常用网络数据帧格式


本文主要介绍ARP、ICMP、UDP、TCP等常用网络数据帧格式。

1 ARP帧格式

当一个应用层的数据在网络中传输时,会被逐步封装成链路层的帧,而帧是通过链路层的MAC地址进行定位传输的,那么一个初次通信的主机如何知道对方的MAC地址呢,这时候就需要ARP地址解析协议来获取对方的MAC地址,ARP是提供网络层地址(IP地址)到相关硬件地址(MAC)的映射。ARP工作在网络层,其格式如下图所示,每个字段的说明如下:

  • MAC层
    • 目的地址:数据包的目的MAC地址。
    • 源地址:数据包的源MAC地址。
    • 类型:上层协议类型,0x0800表示上层协议为IP协议,0x0806表示ARP协议,0x835表示RARP协议。
    • 数据:数据负载。
    • 校验码:检测数据是否在传输过程中出错。
  • ARP层
    • 硬件类型:指出硬件地址类型,对于以太网,该值为1。
    • 协议类型:指出映射的协议地址类型,对于IPv4地址,该值为0x0800。
    • 硬件大小:指出硬件地址的字节数,对于以太网中使用IPv4地址的ARP请求或应答,他的值为6。
    • 协议大小:指出协议地址的字节数,对于以太网中使用IPv4地址的ARP请求或应答,他的值为4。
    • 操作类型:指出该操作是ARP请求(值为1)、ARP应答(值为2)、RARP请求(3)、或者RARP应答(4)。
    • 源硬件地址:发送方以太网的MAC地址。
    • 源协议地址:发送方的协议地址(一般是IPv4协议地址)。
    • 目的硬件地址:接收方以太网的MAC地址。
    • 目的协议地址:接收方的协议地址(一般是IPv4协议地址)。

在这里插入图片描述
这里存在着一些重复的信息,以太网的头部和ARP消息中都存在发送方的硬件地址。对于一个ARP请求,除了需要获取的目的硬件地址为0之外,其他字段都需要填充,当一个系统收到一个ARP请求,它填充自己的硬件地址,将两个发送方地址和两个接收方的地址互换,把操作类型字段设置为2,然后发送生成的应答。ARP的基本工作流程如下:

  • 当目的地址和发送方在同一网段
    • ARP帧头部的目的MAC地址是FF:FF:FF:FF:FF:FF(广播地址,注意是头部中的目的MAC地址,而不是ARP消息中的目的MAC地址),同一广播域中的主机都可以收到这个广播帧。这包括运行任何协议的系统(IPV4或IPV6等),但不包括位于不同VLAN中的系统,因为VLAN划分了广播域。
    • 同一网段中的所有主机都会解析这一帧,如果发现这个帧中的目的IP地址就是自己时,就会以单播的形式响应。如果其他主机解析后发现不是发给自己的,则丢弃这个帧。这时接收的这个主机会记下发送方的IP地址到MAC地址的映射,以方便下次通信时使用。
  • 当目的地址和发送方在不同网段
    • 这时候需要网关介入,主机会先发送一个广播帧来获取网关的MAC地址,网关收到帧后会响应给主机自己的MAC地址。
    • 主机收到网关的MAC地址后,又封装了一个带有目标IP的帧以单播的形式给网关,网关收到这个帧后会解析其中的IP地址,根据自己的路由表来决定怎么转发这个包,网关会把源IP地址和源MAC地址改为自己的地址,目的IP不变来生成一个新的ARP帧转发给下一跳。
    • 经过一次或数次转发后这个数据包会到达目标主机所在的子网中,发送给对应的目标主机,目标主机响应一个帧来回应。

在这里插入图片描述
在这里插入图片描述

2 ICMP帧格式

ICMP允许主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成数据报发送出去。其格式如下图所示,每个字段的说明如下:

  • MAC层:同ARP帧
  • IP层
    • 版本:IP协议版本,IPv4为0x4。
    • 首部长度:IP首部长度,单位长度为4个byte,下图所示为5,即20byte。
    • 服务类型:前3bits优先级字段(现在已经不用了),后4bits TOS字段, 最后1bit备用位。4bits TOS位分别代表D(delay)最小时延、T(throughput)最大吞吐量、R(reliability)最高可靠性和C(cost)最小费用,只能设置其中1bit,如果所有 4bits均为0,那么就表示是一般服务。
    • 总长度:包括首部和数据部分,能表示的最大长度为 65535(216-1)。不过由于链路层的MTU限制。超过1480字节后就会被分片(以太帧MTU为1500的情况下,除去20字节的包头)。
    • 标识:用来唯一标识主机发送的每一份数据报,IP软件会在存储器中维持一个计数器,每产生一个数据段,计数器就加1,并将此值赋给标志字段。如数据报由于超过网络的MTU(最大传送单元)而必须分片时,这个标志字段的值就会被复制到所有的数据报的标识字段中,相同的标识字段的值使分片后各数据报片能正确的重装成为原来的数据报。
    • 标志:第一位0bit保留;中间位DF(Don’t Fragment),DF为0 表示能分片,DF为1 表示不能分片。最低位为MF(More Fragment) ,MF为1表示后面还在传输数据报的分片,MF为0表示最后一个报文段。
    • 片偏移:用于数据包分片和重组。13位(片)偏移字段,较长的分组在分片后,某片在原来分组中的相对位置。分片偏移以8bytes做为计量单位,第一个分片偏移为0。所以当片偏移为0时,表示这个数据报文没有分片,或者第一个分片。
    • 生存时间:用来设置数据报最多可以经过的路由器数,由发送数据的源主机设置,通常为32、64、128等,每经过一个路由器,其值减1,直到0,该数据报被丢弃。
    • 协议:指明IP数据字段中的数据采用上层什么协议封装的,常见的有ICMP(1)、IGMP(2)、TCP(6)、UDP(17)。
    • 首部校验和:填充根据IP头部计算得到的校验和码。计算方法是:对头部中每个16比特进行二进制反码求和,但不含涉及头部后的数据字段。
    • 源IP地址:数据包的源IP地址。
    • 目的IP地址:数据包的目的IP地址。
    • 数据:数据负载。
  • ICMP层:ICMP所有报文的前4个字节都是一样的,其它字段根据ICMP报文类型不同而不同。
    • 类型(type):ICMP报文类型,用于标识错误类型的差错报文或者查询类型的报告报文。
    • 代码(code):根据ICMP差错报文的类型,进一步分析错误的原因,代码值不同对应的错误也不同,例如:类型8、代码0表示回显请求(ping请求);类型0、代码0表示回显应答(ping应答);类型11、代码0代表超时。
    • 校验和(checksum):包括数据在内的整个ICMP数据包的检验和;其计算方法和IP头部检验和的计算方法一样的。
    • 标识符(Identifier):对于每一个发送的数据报进行标识。
    • 序列号(Sequence number):对于发送的每一个数据报文进行编号,发送的第一个数据报序列号为1,第二个序列号为2。
    • 数据:数据负载。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 UDP帧格式

UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。一个完整的UDP帧也包含MAC层和IP层的字段,UDP层包含的字段如下图所示,各字段含义如下:

  • 源端口号:由基于UDP应用程序的用户进程随机选择。
  • 目的端口号:接收者所用的端口号,一般由应用程序来指定。
  • UDP长度:标明UDP头部和UDP数据的总字节长度。
  • UDP校验和:用来对UDP头部和UDP数据进行校验。
  • 数据:数据负载。

在这里插入图片描述

4 TCP帧格式

TCP协议与UDP协议在同一层,一个完整的TCP帧也包含MAC层和IP层的字段。TCP是一种网络传输协议,它可以确保数据在网络中传输的可靠性。它使用可靠的传输机制来确保数据在网络中传输的完整性和可靠性。TCP层包含的字段如下图所示,每个字段的含义如下所述:

  • 源端口号:由基于UDP应用程序的用户进程随机选择。
  • 目的端口号:接收者所用的端口号,一般由应用程序来指定。
  • 序号:用来标识从TCP源端向TCP目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的序号。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数,序号是32bit的无符号数,序号达到 232-1 后又从0开始。比如我们收到一个数据报中序号为0,数据报内容为20字节,那么下一个数据报的序号就应该是21。当建立一个新的连接时,控制位中SYN标志变为1,序号字段包含由这个主机选择的该连接的初始顺序号ISN。
  • 确认序号:包含发送确认的一端所期待收到的下一个顺序号。因此,确认序号应该是上次已经成功收到数据字节顺序号加1 。比如我们收到的一个数据报的序号0 ,数据报内容为20字节,那么我们的确认序号应该是21,用来表明序号为0,内容为20字节的数据报已经收到,接下来期望收到的是序号为21的数据报。只有控制位中ACK标志为1时确认序号字段才有效。
  • 首部长度:给出报头中4个byte字的数目(没有“选项”字段时为4’d5),需要这个值是因为“选项”字段的长度是可变的,这个字段占4bit,即TCP最多有60(15*4)字节的首部。
  • 保留:保留给将来使用,目前必须置为0。
  • 控制位:控制位包括
    • URG:为1表示紧急指针有效,为0则忽略紧急指针值。
    • ACK:为1表示确认号有效,为0表示报文中不包含确认信息,忽略确认号字段。
    • PSH:为 1 表示是带有PUSH标志的数据,表示发送端缓存中已经没有待发送的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。
    • RST:用于复位由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个RST为1的报文,那么一定发生了某些问题。
    • SYN:同步序号,为1表示连接请求,用于建立连接和使序号同步。
    • FIN:用于释放连接,为1表示发送方已经没有数据发送了,即关闭本方数据流。
  • 窗口大小:表示从确认序号开始,本报文的源方可以接收的字节数,即源方接收窗口的大小。窗口大小是一个16bit字段,因而窗口大小最大为216-1 。
  • 校验和:对整个的TCP报文段(包括TCP头部和TCP数据以及伪报文头)进行校验和计算。这是一个强制性的字段,要求由发送方计算和存储,并由接收端进行验证(接收端要与发送端数值结果完全一样,才能证明数据是有效的)。
  • 紧急指针:是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式,只有当URG标志置为1时紧急指针才有效。
  • 选项:n*4字节,常见的可选字段是最长报文大小MSS(Maximum Segment Size)。每个连接方通常都在通信的第一个报文段 (为建立连接而设置 SYN 标志的那个段)中指明这个选项,它指明本端所能接收的最大长度的报文段。选项长度不一定是32位字的整数倍,所以需要添加填充位,使得报文长度为32位字的整数倍。
  • 数据:数据负载。

在这里插入图片描述
TCP可靠传输机制使用三次握手机制来确保数据的可靠传输。在三次握手机制中,客户端和服务器之间会发送三个报文段,以确认连接的建立。在第一次握手中,客户端发送一个SYN报文段,表示客户端准备建立连接。在第二次握手中,服务器会发送一个SYN/ACK报文段,表示服务器已经收到客户端的请求,并准备建立连接。在第三次握手中,客户端会发送一个ACK报文段,表示客户端已经收到服务器的确认,并准备建立连接。此外,TCP可靠传输机制还使用确认机制来确保数据的可靠传输。在确认机制中,每当客户端发送一个数据报文段,服务器都会发送一个ACK报文段,表示服务器已经收到客户端发送的数据报文段。如果客户端没有收到服务器发送的ACK报文段,客户端会重新发送数据报文段,直到收到服务器发送的ACK报文段为止。

  • 20
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机网络中有多种帧格式,其中最常见的是以太网帧格式。以太网的帧格式有两种,分别是RFC 894和RFC 1042。这两种帧格式的主要区别在于其中两个字段的命名方式不同,即Type和Len字段。除此之外,其余字段在两种帧格式中是相同的。 除了以太网帧格式,还有其他的帧格式用于不同的网络协议。例如,在点对点协议(PPP)中,计算机之间的数据传输是通过分组来进行的。这些分组需要选择一些PPP参数,并进行网络层配置。此外,网络控制协议(NCP)还会给新接入的计算机分配一个临时的IP地址,使其成为因特网上具有IP地址的主机。 总结起来,计算机网络中存在多种帧格式,其中最常见的是以太网帧格式。除了以太网帧格式外,还有其他帧格式用于不同的网络协议。这些帧格式在字段的命名方式和具体配置上可能会有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [[计算机通信网络]以太网的帧格式详解](https://blog.csdn.net/m0_56738500/article/details/127138052)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [计算机网络(3.6)数据链路层- PPP 协议的帧格式和工作状态](https://blog.csdn.net/qq_40452317/article/details/89643554)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值