Internet(互联网)是全球范围内连接计算机网络的系统,它由大量的本地、区域和全球网络互连而成,使用统一的通信协议(TCP/IP)进行数据传输。互联网使得全球的计算设备(如个人电脑、服务器、智能手机等)能够通过多种不同的方式(有线、无线等)互相通信和共享资源。
什么是OSI七层模型?
OSI七层模型 和 Internet(互联网) 的关系在于,OSI模型提供了一种逻辑上的分层结构,用于理解网络通信中不同功能的分工。开放系统互联模型(OSI, Open System Inter Connect),是国际标准化组织在 1985 年研究的网络互联模型。该体系结构定义了网络互联的七层框架,物理层-数据链路层-网络层-传输层-会话层-表示层-应用层,即开放系统互联模型。
OSI七层模型是一个用于理解网络通信的分层架构,旨在标准化不同网络协议之间的交互。该模型由国际标准化组织(ISO)于1984年提出,包含以下七层,从下到上依次为:
- 物理层(Physical Layer):
- 负责传输原始比特流,涉及硬件和物理媒介,如电缆、光纤和无线信号。
- 数据链路层(Data Link Layer):
- 确保在物理介质上无误地传输数据帧,处理错误检测和纠正,使用MAC地址进行设备识别。
- 网络层(Network Layer):
- 负责数据包的路由和转发,确保数据在不同网络之间的传输,使用IP地址进行寻址。
- 传输层(Transport Layer):
- 提供端到端的通信,保证数据传输的可靠性和完整性,常用协议有TCP和UDP。
- 会话层(Session Layer):
- 管理和控制会话,确保数据在应用程序之间有序传输,处理连接建立、维护和终止。
- 表现层(Presentation Layer):
- 处理数据的格式转换、加密和解密,确保不同系统之间的数据可以正确理解。
- 应用层(Application Layer):
- 提供用户与网络之间的接口,支持应用程序的运行,包含常用协议如HTTP、FTP和SMTP。
总结:OSI七层模型提供了一个清晰的框架,帮助理解和设计网络通信系统。每一层都独立地处理特定的功能,同时与相邻层进行交互,从而确保数据在网络中的有效传输。
常见的网络协议和所属层次可参见下表:
开放系统互联网络模型表
序号 | OSI 七层网络模型 | 对应网络协议 |
1 | 应用层(Application) | HTTP、 TFTP、 FTP、 NFS、 WAIS、 SMTP |
2 | 表示层(Presentation) | Telnet、 Rlogin、 SNMP、 Gopher |
3 | 会话层(Session) | SMTP、 DNS |
4 | 传输层(Transport) | TCP、 UDP |
5 | 网络层(Network) | IP、 ICMP、 ARP、 RARP、 AKP、 UUCP |
6 | 数据链路层(Data Link) | FDDI、 Ethernet、 Arpanet、 PDN、 SLIP、 PPP |
7 | 物理层(Physical) | IEEE 802.1、 IEEE 802.2 至 IEEE 802.11 |
TMAC(MAC,Media Access Control,介质访问控制)工作在OSI模型的第二层,即数据链路层。
数据链路层分为两个子层:
- 逻辑链路控制(LLC)子层:负责与网络层的交互,处理流量控制、帧同步和错误恢复。
- 介质访问控制(MAC)子层:负责设备之间的物理介质访问,决定谁可以在特定时刻发送数据,解决多设备共享通信介质时的冲突问题。
MAC主要的任务包括:
- 设备地址识别:通过MAC地址标识网络设备。
- 帧封装与解封装:对网络层传来的数据进行封装或解封装。
- 访问控制:在共享介质(如以太网)中,管理哪些设备在什么时间可以发送数据。
因此,TMAC (MAC 层协议)专门解决网络设备之间如何共享和使用物理网络资源的问题,确保数据在共享的物理链路上有效传输。
UDP与TCP的区别,以及UDP通信的优势
UDP(User Datagram Protocol) 和 TCP(Transmission Control Protocol) 是两种常见的传输层协议,二者在通信方式、可靠性、连接性等方面有显著区别。
UDP与TCP的区别:
- 连接性:
- TCP:面向连接的协议。在传输数据前,客户端与服务器之间必须先建立一个连接(三次握手),确保双方准备好传输数据。
- UDP:无连接协议,不需要建立连接。数据可以直接从一方发送到另一方,不进行握手或连接建立。
- 可靠性:
- TCP:提供可靠的数据传输服务。通过序列号、确认应答(ACK)、超时重传、流量控制等机制,确保数据包按序、无差错地传送到接收端。
- UDP:不保证可靠性。数据包可能丢失、重复或顺序错乱,发送端不关心是否成功到达接收端。
- 数据传输方式:
- TCP:面向字节流传输,数据以流的形式进行连续传输,保证顺序和完整性。
- UDP:面向报文传输,发送的消息称为数据报(datagram)。每个数据报独立传输,不保证顺序,也不会对数据进行分片处理。
- 速度与性能:
- TCP:由于需要建立连接、确认应答和重传机制,导致其传输效率较低,开销更大。
- UDP:无连接、无握手、无确认应答,通信开销小,传输速度快,适合对实时性要求高的场景。
- 流量控制与拥塞控制:
- TCP:具有流量控制和拥塞控制机制,避免网络拥堵。
- UDP:没有流量控制和拥塞控制,网络拥堵时也会持续发送数据,可能导致更高的丢包率。
UDP通信的优势:
- 低延迟:
- UDP没有建立连接和确认应答的开销,因此在实时性要求高的场景(如语音、视频、游戏)中,UDP能够提供更低的延迟,快速传输数据。
- 高效传输:
- UDP头部仅占用 8 字节,比 TCP 的 20 字节头部更小,传输更高效,特别是在小数据包的应用中,效率更为明显。
- 无需连接管理:
- UDP是无连接协议,发送端和接收端不需要维护连接状态,特别适用于广播和多播等通信模式。
- 简单易用:
- UDP协议简单,适合一些简单的、一发即收的应用场景,不需要复杂的重传、流量控制等机制,减少了编程的复杂度。
UDP的典型应用场景:
- 视频/音频流媒体传输:如IPTV、视频会议、VoIP等,实时性要求高,宁可偶尔丢失一些数据包,也不能接受传输延迟。
- 在线游戏:实时性是关键,玩家的动作和反应需要即时反馈,UDP提供了低延迟的数据传输。
- DNS查询:DNS是基于UDP的,因为它的请求数据量小且无需建立连接,响应时间短。
- 网络广播和多播:UDP可以方便地用于广播和多播应用,适合发送数据到多个设备。
UDP比TCP更加轻量级,适合需要低延迟、对数据包丢失不敏感的应用场景。TCP则更适用于需要数据完整性和可靠性的应用,如文件传输、电子邮件等。
UDP 协议与 TCP 协议一样用于处理数据包,在 OSI 模型中,两者都位于传输层,处于 IP 协议的上一层。 UDP 有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。 UDP 用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用 UDP 协议。 UDP 协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使在今天 UDP 仍然不失为一项非常实用和可行的网络传输层协议。
UDP 是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端, UDP 传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端, UDP 把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
UDP 信息包的标题很短,只有 8 个字节,相对于 TCP 的 20 个字节信息包而言 UDP 的额外开销很小。吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。 UDP 是面向报文的。发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付给 IP 层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
虽然 UDP 是一个不可靠的协议,但它是分发信息的一个理想协议。例如,在屏幕上报告股票市场、显示航空信息等等。 UDP 也用在路由信息协议 RIP(Routing Information Protocol)中修改路由表。在这些应用场合下,如果有一个消息丢失,在几秒之后另一个新的消息就会替换它。 UDP 广泛用在多媒体应用中。
Anlogic UDP通信应用方案介绍
UDP 通信应用方案的主要功能如下:
支持三种不同的速度运行模式(10/100/1000 Mb/s)
支持全双工模式
支持 ARP 包的请求与响应
支持响应 ICMP 包
支持 IP 首部校验和检测
UDP 通信应用方案的功能框图如图所示。
UDP 上层可以与用户应用程序进行数据的接收和发送,下层通过安路的三速以太网 IP 与物理层通信,支持单播、组播和广播的通信方式。用户应用程序和 UDP 通过 FIFO 进行数据的交换。ARP 层可以响应接收到的对方 ARP 包,同时可以发起 ARP 包,IP 地址和 MAC 地址的缓存池默认深度是 4,最多可以缓存 4 对地址。
工程文件
工程中有如下关键代码文件,如表所示。
参数 | 说明 |
参考设计 | Yes |
RTL Language | Verilog |
Test bench | Yes |
Test bench Format | Verilog |
C 文件 | N/A |
IP Model | Yes |
时钟结构
本方案时钟结构如图 2-2 所示。从 TEMAC 传来的数据通过异步 fifo 传输给 UDP 模块,两边时钟域
如图中虚线所示,TEMAC 可以工作在三个速度下,UDP 可以相应调整输入的时钟以适应三种不同的带宽。
端口说明
信号名 | bits | 方向 | 功能描述 |
udp_rx_clk | 1 | input | UDP 接收时钟,千兆模式 125MHz, 百兆模式 12.5MHz,十兆模式 1.25MHz。 |
udp_tx_clk | 1 | input | UDP 发送时钟,千兆模式 125MHz, 百兆模式 12.5MHz,十兆模式 1.25MHz。 |
reset | 1 | input | 全局复位信号,高电平有效。 |
udp2app_tx_ready | 1 | output | UDP 和 APP 之间的握手信号,指示准备接收数据, 高电平有效。 |
udp2app_tx_ack | 1 | output | UDP 和 APP 之间的握手信号,指示响应接收数据, 高电平有效。 |
app_tx_request | 1 | input | UDP 和 APP 之间的握手信号,指示请求发送数据, 高电平有效。 |
app_tx_data_valid | 1 | input | APP 层发送数据有效指示信号,高电平有效。 |
app_tx_data | 8 | input | APP 层发送数据。 |
app_tx_data_length | 16 | input | APP 层发送数据长度,数据包的字节数。 |
app_rx_data_valid | 1 | output | APP 层接收数据有效指示信号,高电平有效。 |
app_rx_data | 8 | output | APP 层接收数据。 |
app_rx_data_length | 16 | output | APP 层接收数据长度,数据包的字节数。 |
app_rx_port_num | 16 | output | UDP 层的接收数据的源端口号。 |
app_tx_dst_port | 16 | input | UDP 层的发送数据的目的端口号。 |
ip_tx_dst_address | 32 | input | IP 层的 IP 地址。 |
temac_rx_valid | 1 | input | MAC 层接收的数据有效信号,高电平有效。 |
temac_rx_data | 8 | input | MAC 层接收的数据信号。 |
temac_tx_ready | 1 | input | MAC 层接收数据的握手指示信号,低电平有效。 |
temac_tx_valid | 1 | output | MAC 层发送数据的有效指示信号,低电平有效。 |
temac_tx_data | 8 | output | MAC 层发送数据信号。 |
temac_tx_sof | 1 | output | MAC 层发送数据的首字节指示信号。低电平有效。 |
temac_tx_eof | 1 | output | MAC 层发送数据的末字节指示信号。低电平有效。 |
ip_rx_error | 1 | output | IP 层的错误指示信号。 |
arp_request_no_reply_error | 1 | output | ARP 层的请求无响应错误指示信号。 |
除上述端口外,本设计还有以下可配置的参数:
DEVICE: 器件选择。
ARP_REQUEST_NUM: ARP 层发起请求包的数量。
ARP_REQUEST_DELAY: ARP 层发起请求包的间隔。
LOCAL_UDP_PORT_NUM:本地 UDP 层的端口号。
LOCAL_IP_ADDRESS:本地 IP 层的地址。
LOCAL_MAC_ADDRESS:本地 MAC 层的地址。
TEMAC 部分的接口本文不再叙述,请参考 TEMAC 的 IP 数据手册或者 TEMAC 的应用方案文档。
接口时序
用户应用程序数据接收端口的时序图如图所示:
用户应用程序数据发送端口的时序图如图:
EMAC 接收数据到 UDP 数据接收端口时序图如图
UDP 发送数据到 TEMAC 数据发送端口的时序图如图
UDP 方案的 RGMII 接口的时序图如图:
资源消耗
其中BRAM资源量可以依据应用要求进行裁剪。
上板实验
在实验板 demo 板上连接网线到 PC 机上, demo 板的硬件准备工作完成。
板上调试连接示意图
此时需要更改 PC 机的 IP 地址和子网掩码,如图所示:
将网卡速率改为自适应
demo 板上电后,先将位流文件通过 TD 下载到 demo 板,需要等待一下,然后再打开 PC 机上的 UDP 收发管理应用程序,配置好 UDP 的设置,如图 所示。
由于 demo 板上的程序是环回模式的,所以 UDP 收发管理应用程序上统计的 TX 和 RX 字节数相等, 说明传输没有丢包。
项目可改选项说明
更改器件
修改53行的DEVCE参数即可
更改发送端口号
修改第54行的 LOCAL_UDP_PORT_NUM
更改速率
仿真调试
千兆速度模式
如图所示,千兆速度模式正常数据传输。
百兆速度模式
百兆全双工模式正常数据传输。
十兆速度模式
兆全双工模式正常数据传输。
移植与注意事项
本文描述的板上测试情况仅支持环回模式测试。
若要移植其他系列器件,请注意将 ODDR IDDR PLL 等原语进行替换。
若要使用不同软件版本请重新生成 TEMAC IP。
补充:UDP 报文的大小
主要影响 UDP 报文大小的三大因素:
- UDP 协议规定报文长度为 16 位,所以 UDP 的报文长度不能超过 2^16 = 65536 字节
- 以太网(Ethernet)数据帧的长度,这是由以太网的物理特性决定,也叫数据链路层的 MTU(最大传输单元)
- socket 的 UDP 发送缓冲区大小
UDP 最大数据包长度
根据 UDP 协议,从 UDP 数据包的包头可以看出,UDP 的最大包长度是 2^16-1 个字节。
由于 UDP 包头占 8 个字节,而在 IP 层进行封装后的 IP 包头占去 20 字节,所以这个是 UDP 数据包的最大理论长度是 2^16 – 1 – 8 – 20 = 65507 字节。
同时 UDP 发送缓冲区大小(linux下UDP发送缓冲区大小为:cat /proc/sys/net/core/wmem_default)相关,肯定不能超过缓冲区大小。
UDP 理想数据包长度
每个以太网帧都有最小的大小 64 字节,最大不能超过 1518 字节。
除去链路层的首部和尾部的 18 个字节,链路层的数据区范围是 46-1500 字节,
那么链路层的数据区,即 MTU(最大传输单元)为 1500 字节。
事实上这个 1500 字节就是网络层 IP 数据报的长度限制。
因为 IP 数据报的首部为 20 字节,所以 IP 数据报的数据区长度最大为 1480 字节。而这个 1480 字节就是用来放 TCP 传来的 TCP 报文段或 UDP 传来的 UDP 数据报的。
除去 UDP 包头占 8 个 字节,那么 UDP 数据报的数据区最大长度为 1472 字节。
结论1:局域网环境下,建议将 UDP 数据控制在 1472 字节以下
Unix 网络编程第一卷里说:ipv4 协议规定 ip 层的最小重组缓冲区大小为 576 字节,所以将 UDP 数据报的数据区最大长度控制在 548 字节(576-8-20)以内。
结论2:Internet 编程时,建议将 UDP 数据控制在 548 字节以下。
网络调试的时候通常需要抓包,那PC上最好的网络抓包工具非wireshark莫属。
没有回复内容