常见报文格式及其字段说明

二层报文

二层报文是指工作在数据链路层的传输单位,主要是以太网帧。

1.报文格式

以太网帧
目的地址: 该帧要发送到哪里,6个字节的MAC地址即物理地址,通常是不可更改的地址。
源地址: 该帧是从哪里发来的,同样是MAC地址。
类型:2字节,用来区分以太网帧类型比如,以太网帧、IP数据报、ARP请求和应答等。0x0800,代表IPv4;0x86DD,代表IPv6;0x0806,代表ARP;0x8100,代表IEEE 802.1q;等等。不同的类型字段值可以用来区别不同的帧类型。接收端知道是什么数据类型后,接下来可以做正确的操作。
数据: 传送的数据大小为46~1500字节,不够46字节的将进行填充,最大长度为1500字节。
CRC: 循环冗余校验,用于帧内后续字节差错。

Wireshark

在这里插入图片描述
抓到了目的地址,源地址,类型。

广播报文

广播报文是以广播的形式传输消息或信息。广播报文向网络中的所有报文发送信息,不需要特定的目的地址,被广播到网络当中。

####1. 报文格式
在这里插入图片描述
工作流程:
1.主机A发送广播帧,主机BCD都可以收到该报文
2.主机B可以对该报文做出响应,那么主机B单播响应主机A,其余不响应。
D.MAC 目的MAC地址为FF-FF-FF-FF-FF-FF(全为1) ,作为目的地址,发往该网段所有主机。广播目的IP地址为255.255.255.255。
S.MAC: 源MAC地址。
DATA: 数据段。
值得注意的是:ARP(地址解析协议就是使用的广播帧)

2.Wireshark(ARP为例)

在这里插入图片描述
以ARP协议为例,广播报文的目的MAC地址为ff:ff:ff:ff:ff:ff。

ARP

ARP(Address Resolution Protocol)地址解析协议,根据IP地址获取物理地址的一个TCP/IP协议。

1.ARP功能:
1.将IP地址解析为MAC地址。
2.维护IP地址与MAC地址的映射缓存,即ARP表项。
3.实现网段内重复IP的检测。
2.报文格式在这里插入图片描述

目的MAC地址: ARP请求的目的以太网地址,广播地址,即全为1。

源MAC地址: 发送ARP请求的以太网地址。

帧类型: 以太网帧类型表示后面的数据类型,ARP请求和ARP应答报文为:0x0806。

硬件类型: 硬件地址类型,硬件地址不止以太网一种,是以太网类型时,值为1。

协议类型: 表示要映射的协议地址的类型,要对IPv4地址进行映射,此值为0x0800。

硬件地址长度和协议地址长度: 报文中硬件地址的长度(ARP报文中,它的值为6),报文中协议地址的长度(ARP报文中,它的值为4)。
op操作类型: 是操作类型字段,1 是ARP请求,2是 ARP应答,3是 RARP请求和4是 RARP应答。

发送端以太网地址: 发送方设备的硬件地址。

发送端以太网地址: 发送方设备的IP地址。
 
目的以太网地址:接收方设备的硬件地址。

目的IP地址: 接收方设备的IP地址。

3.工作过程

1.主机A想要发送数据给主机B,首先要在本地的ARP缓存表中检查主机B的IP地址是否有对应的MAC地址。有则结束,无则下一步。
2. 主机A将ARP请求报文广播到本地网络中的所有主机,本地网络中的所有主机将会收到该ARP请求,并检查目的IP地址是否相同,不相同则丢弃该ARP请求。
3. 主机B收到ARP请求后,与目的IP相同,那么将主机A的IP和MAC地址添加到本地缓存表中。
4. 主机B将发送ARP响应给主机A,该报文中包含主机B的MAc地址。
5. 主机A收到主机B的响应报文,将主机B的IP和MAC地址添加到字节的ARP缓存表中。本地ARP缓存表的的生存周期为120s,以便节省资源,超过该时间后,将会重复上述过程。

4.Wireshark抓包

以ARP请求报文为例:
在这里插入图片描述
在这里插入图片描述
和ARP报文一致。

DHCP

1.DHCP功能

为了解决传统静态手工配置IP的不足,DHCP(dynamic host configuration protocol)应运而生了,其可以实现网络动态合理地分配IP地址给主机使用。DHCP采用C/S架构,主机无需配置,从服务端获取IP地址,实现即插即用。可以给用户分配永久固定的IP地址。
DHCP的优点是实现了IP地址的同意分配管理,提出了租期的概念,可有效提高地址利用率。
DHCP客户端向DHCP服务器发送报文时采用67端口号,DHCP服务器向DHCP客户端发送报文时采用68端口号(服务端监听的端口为67,客户端监听的端口为68)

2.报文格式

在这里插入图片描述
op: 报文的操作类型。分为请求报文和响应报文。客户端发送给服务器的包为请求报文,值为 1;服务器发送给客户端的包为响应报文,值为 2。
htype: DHCP 客户端的 MAC 地址类型。htype 值为 1 时表示为最常见的以太网 MAC 地址类型。
hlen: 硬件地址长度。以太网 MAC 地址长度为 6 个字节,即 hlen 值为 6。
hops: 跳数,DHCP 报文经过的中继数量。每经过一个路由器,该字段就会增加 1。如果没有经过路由器,则值为 0(同一网内)。
xid: 事务 ID。客户端发起一次请求时选择的随机数,用来标识一次地址请求过程。在一次请求中所有报文的 xid 都是一样的。
secs: DHCP 客户端从获取到 IP 地址或者续约过程开始到现在所过去的时间,以秒为单位。在没有获得 IP 地址前,该字段始终为 0。
flags: BOOTP 标志位。只使用第 0 比特位,是广播应答标识位,用来标识 DHCP 服务器应答报文是采用单播还是广播发送。其中,0 表示采用单播发送方式,1 表示采用广播发送方式。其余位尚未使用。
ciaddr: DHCP 客户端的 IP 地址。仅在 DHCP 服务器发送的 ACK 报文中显示,在其他报文中均显示为 0。这是因为在得到 DHCP 服务器确认前,DHCP 客户端还没有分配到 IP 地址。
yiaddr: DHCP 服务器分配给客户端的 IP 地址。仅在 DHCP 服务器发送的 Offer 和 ACK 报文中显示,其他报文中显示为 0。
siaddr: 为 DHCP 客户端分配 IP 地址等信息的其他 DHCP 服务器 IP 地址。仅在 DHCP Offer、DHCP ACK 报文中显示,其他报文中显示为 0。
giaddr: 转发代理(网关)IP 地址,DHCP 客户端发出请求报文后经过的第一个 DHCP 中继的 IP 地址。如果没有经过 DHCP 中继,则显示为 0。
chaddr: DHCP 客户端的 MAC 地址。在每个报文中都会显示对应 DHCP 客户端的 MAC 地址。
sname: 为客户端分配 IP 地址的服务器名称(DNS 域名格式)。只在 DHCP Offer 和 DHCP ACK 报文中显示发送报文的 DHCP 服务器名称,其他报文显示为 0。
file: DHCP 服务器为 DHCP 客户端指定的启动配置文件名称及路径信息。仅在 DHCP Offer 报文中显示,其他报文中显示为空。
options: 可选选项,格式为“代码+长度+数据”。

3.工作流程

在这里插入图片描述
1、客户端发送一个广播discover报文

2、Server收到报文后,会向客户端发送offer报文(携带为客户端分配的地址)

3、客户端收到offer报文后,会服务器发送广播request报文

4、Server收到报文之后会回复一条ACK进行确认

5、客户端收到ack之后会执行DAD(重复地址检测),如果冲突了会给服务器发送decline报文,告知这个地址无法使用,然后重

在这里插入图片描述
如上述工作流程。

4.Wireshark抓包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
引用博客,这篇博客讲解非常详细,同时介绍了DHCPv6点击访问

IP报文

IP协议(Internet Protocol)是TCP/IP协议族中最核心的协议,提供不可靠的、无连接的、尽力而为的数据报传输服务。

1.IP协议功能

设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。

2.IPv4报文格式

IPv4报文的最大长度是65,535字节,这个长度是由IP报文中的16位总长度字段决定的,描述首部格式的宽度是32位(4字节)下图为IPv4报文的结构:
在这里插入图片描述
版本(Version): 4比特,4:表示为IPv4;6:表示为IPv6。
首部长度(Internet Header Length): 4比特,表示IP首部的长度,首部长度说明首部有多少32位字(4字节,也就是说单位为4字节)。这个字段的最小值是5(二进制0101),相当于54=20字节;最大十进制值是15,相当于154=60字节
服务类型(Type of Service,TOS): 占用8比特位,表示IP报文的服务类型,用于指定QoS(Quality of Service)和流量控制等参数,一般情况下都不使用。
总长度(Total Length): 占用16比特位,表示整个IP数据报的长度,包括IP首部和数据部分,单位为字节。这个字段的最小值是20(20字节首部+0字节数据),最大值是2^16-1=65,535。
标识(Identification): 占用16比特位,这个字段主要被用来唯一地标识一个报文的所有分片,因为分片不一定按序到达,所以在重组时需要知道分片所属的报文。每产生一个数据报,计数器加1,并赋值给此字段。
标志(Flags): 占用3比特位,用于标识IP分片的状态。位0:保留,必须为0;位1:禁止分片(Don’t Fragment,DF),当DF=0时才允许分片;位2:更多分片(More Fragment,MF),MF=1代表后面还有分片,MF=0 代表已经是最后一个分片。
分片偏移(Fragment Offset): 占用13比特位,用于表示分片相对于原始数据报的偏移量。相对于用户数据字段的呃呃起点,该片从何开始,一定是8的整数倍。
生存时间(Time to Live): 占用8比特位,表示数据报在网络中最多可以被经过的路由器数量,用于防止数据报在网络中无限循环。
协议(Protocol): 占用8比特位,表示数据报中的数据部分使用的协议类型,例如TCP、UDP、ICMP等。
校验和(Header Checksum): 占用16比特位,用于检测IP头部在传输过程中是否出现了错误。
源地址(Source Address): 占用32比特位,表示数据报的发送者IP地址。
目标地址(Destination Address): 占用32比特位,表示数据报的接收者IP地址。
选项(Options) 附加的首部字段可选的跟在目的地址之后,但这并不被经常使用,从1到40个字节不等。如果首部长度大于5,那么选项字段必然存在。

IP数据报文的长度实际上受到以太网的影响,以太网的MTU为1500字节,那么IP的数据报文长度要小于1500.

IPv6数据报文

3.Wireshark

在这里插入图片描述
引用博客IPv4 vs IPv6 点击访问

TCP报文

TCP——传输控制协议(Transmission Control Protocol)。是一种面向连接的,可靠的,基于字节流的传输层通信协议。

1. TCP功能

  • 有连接:TCP类似于打电话,需要建立连接,才可以发送消息.
  • 可靠传输:发送方发送的数据,并不是百分百发送给接收方,而是尽力而为,尽可能的把数据传输过去,同时,如果还是传输不过去,至少能知道.
  • 面向字节流:数据传输与文件读写类似,是"流式"的(一次可以读一个字节或者十个字节或者一百个字节)
  • 全双工:一个通信通道,可以双向传输.(既可以发送,也可以接收)
    TCP可以实现可靠传输、流量控制和拥塞控制等。

2.TCP报文格式

TCP报文段前20个字节是固定的,后面4n字节是需要根据需要而增加的情况,因此TCP首部的最小长度是20字节。在这里插入图片描述

  • 源端口和目的端口: 各占两个字节,分别写入源端口号和目的端口号。

  • 序号: 4字节,表示本报文段所发送数据的第一个字节的编号。

  • 确认号: 接收方期望收到发送方下一个报文段的第一个字节数据的编号

  • 数据偏移: 4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。实际上是TCP报文段的首部长度。

  • 保留: 6位保留字段:为TCP将来的发展预留空间,目前必须全部为0 。

  • URG:紧急字段,1时,紧急,请尽快传送。

  • ACK:确认字段,ack=1,确认号有效,0无效,tcp规定,建立连接后的所有传送的报文段段都要把ack置为1.

  • PUSH:推送,希望尽快收到响应,不用等到缓存满了再想上交付。

  • RST: 复位,rst=1,连接出现严重差错,必须释放连接,重新建立连接。

  • SYN:同步,在连接建立时同步序号用,syn=1&ack=0,这是请求连接报文,syn=1&ack=1,是同意建立连接。syn=1是一个连接请求或者连接接受报文。

  • FIN: 终止,1时,发送完毕,要求释放运输连接。

  • 窗口: 2字节,从确认号算起,可以接受对方发送的数据量,因为对方的数据缓存空间是有效的。

  • SYN: 同步,在连接建立时同步序号用,syn=1&ack=0,这是请求连接报文,syn=1&ack=1,是同意建立连接。syn=1是一个连接请求或者连接接受报文。2字节,计算校验和时,要加上12字节的伪首部。

  • 紧急指针:2字节,=1时才有意义。

  • 选项:长度可变,最长可以40字节。

    3.TCP三次握手建立连接&四次挥手断开连接

    三次握手
    在这里插入图片描述

  • TCP连接发起方,发送syn=1,ack=0的请求连接报文,初始序列号a为随机数字,确认序号为0.

  • 接收方收到合法的syn报文后,回复一个syn=1,ack=1 的确认连接报文后,初始序列号为b的随机数字,因为是回复报文,确认序号要在a上+1,即为a+1

  • 发送收到后,回复接收方一个序列号好为a+1,确认序号为b+1的报文,接收方收到后,TCP双向连接建立.

四次挥手
在这里插入图片描述

  • 1.发送方发送一个FIN=1的不带数据的TCP报文段。
  • 2.接收方收到后,回复一个ACK置位的TCP报文。
  • 3.接收方也没有要发送的数据后,发送FIN置位的TCP报文。
  • 4.发送方收到FIN置位的TCP报文,回复ACK报文,TCP双向连接断开。
3.wireshark

在这里插入图片描述
可以看到源端口,目的端口等信息。

UDP报文

用户数据报协议UDP(User Datagram Protocol)在传送数据之前不需要建立连接,接收方收到后,不需要做出任何确认,UDP提供不可靠交付,UDP简单高效。

1.UDP功能
  • UDP是无连接的
  • UDP使用尽最大努力交付
  • UDP是面向报文的
  • UDP没有拥塞控制
  • UDP支持一对一、一对多、多对一和多对多的交互通信
  • UDP的首部开销小
2.UDP报文格式

在这里插入图片描述

源端口: 源端口号,2字节,需要对方回信时选用,不需要时可以全为0.
目的端口:目的端口号,2字节,这在终点交付报文时必须使用。
长度:UDP用户数据报的长度,其最小值为8(仅有首部)。
校验和:检测UDP用户数据报在传输中是否有差错,有错就丢弃。

UDP工作流程:UDP协议和TCP协议在工作方式是不同的,但是他们都是建立了端口到端口的通信。端口(port)是伴随着传输层诞生的概念。实现一个UDP通信服务实现是调用操作系统的API来构建socket,socket是操作系统的一种编程接口,它代表某个网络通信。下面我们图解一下UDP基于编程接口的调用实现。
在这里插入图片描述

wireshark

在这里插入图片描述
可以看到源端口,目的端口,长度校验和。

ICMP报文

ICMP协议作用

ICMP(Internet Control massage protocol)因特网控制协议,主要用来在网络设备间传递各种差错、控制和查询等消息(在收集网络信息、诊断、排查故障等方面具有重要的作用)。
为了更有效的转发IP数据报文和提高数据报文交互成功的机会,在网络层使用ICMP协议,ICMP允许主机或设备报告差错情况和相关异常情况的报告。
ICMP报文封装在IP报文中,IP报文头部的protocol的值为1时表示ICMP协议。

ICMP报文格式

在这里插入图片描述
类型: 占1字节,标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文
代码: 占1字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型
校验和: 占2字节,这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错。
内容: 占8字节

ICMP报文分为ICMP差错报告报文和ICMP询问报文。其报文类型如下在这里插入图片描述
在这里插入图片描述
引用博客,较为详细:点击访问
ICMP的重要应用就是分组网间探测PING(Packet InterNet Groper),用来测试两台主机的连通性。

wireshark

ICMP回复报文ICMP回复报文

在这里插入图片描述
ICMP请求报文。

  • 17
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值