网络层
在数据封装时,网络层的IP协议会为数据包封装IP头部
IP协议
为网络层的设备提供逻辑地址,协议规定了IP地址的格式,以及封装时的格式,负责数据包的寻址和转发
办法IPv4,IPv6
IPv4报文格式
Version:4 bit,4:表示为IPv4;6:表示为IPv6。
Header Length:4 bit,首部长度,如果不带Option字段,则为20,最长为60。
Type of Service:8 bit,服务类型。只有在有QoS差分服务要求时,这个字段才起作用。
Total Length:16 bit,总长度,整个IP数据包的长度。
Identification:16 bit,标识,分片重组时会用到该字段。
Flags:3 bit,标志位。
Fragment Offset:12 bit,片偏移,分片重组时会用到该字段。
Time to Live:8 bit,生存时间。
Protocol:8 bit,协议:下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。
Header Checksum:16 bit,首部检验和。
Source IP Address:32 bit,源IP地址。
Destination IP Address:32 bit,目的IP地址。
Options:可变,选项字段。
Padding:可变,填充字段,全填0。
IP头部报文抓包理解
拓扑:
AR1配置
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]inte gi 0/0/0
[Huawei-GigabitEthernet0/0/0]ip add 192.168.1.1 255.255.255.0
Aug 29 2023 16:40:55-08:00 Huawei %%01IFNET/4/LINK_STATE(l)[1]:The line protocol
IP on the interface GigabitEthernet0/0/0 has entered the UP state.
[Huawei-GigabitEthernet0/0/0]
AR2配置
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]inte gi 0/0/0
[Huawei-GigabitEthernet0/0/0]ip add 192.168.1.2 255.255.255.0
Aug 29 2023 16:41:42-08:00 Huawei %%01IFNET/4/LINK_STATE(l)[1]:The line protocol
IP on the interface GigabitEthernet0/0/0 has entered the UP state.
[Huawei-GigabitEthernet0/0/0]
AR1 ping AR2,在AR1的ge0/0/0口抓包
FLAG中的第一个字段是保留字段(未被定义使用),第二个字段(Don't Fragment)表示是否允许分片,0表示允许,1表示不允许,第二个字段More fragment表示是否后面还有分片的数据,0表示没有,1表示有(Not set表否定就是0的意思)
在这当中IP头部的bit为20(通过IP头部中的Header Length),数据包的总长度为84(Total Length),ICMP携带的数据长度为48bit
Protol指定了上层协议是ICMP
Source Address和Destion Address表明了来源IP和目的IP
Checksum校验和,可以观察发现回包和去包的首部检验和是相同的,表面对应关系
AR1 -f -s 1472 192.168.1.2
可以通,IP头部的20bit,ICMP头部的8个bit,1472的数据,正好1500
<Huawei>ping -f -s 1472 192.168.1.2
PING 192.168.1.2: 1472 data bytes, press CTRL_C to break
Reply from 192.168.1.2: bytes=1472 Sequence=1 ttl=255 time=30 ms
Reply from 192.168.1.2: bytes=1472 Sequence=2 ttl=255 time=20 ms
AR1 ping -f -s 1473 192.168.1.2
发送超过1500bit的数据包观察,无法ping通对端了,一个数据包的长度最多为1500bit,IP头部为20字节,ICMP头部为8个bit加上1473bit的数据超过了1500bit,-f为不允许分片,所以此数据包不合法
ping -f -s 1472 192.168.1.2
<Huawei>ping -f -s 1473 192.168.1.2
PING 192.168.1.2: 1473 data bytes, press CTRL_C to break
Request time out
Request time out
Request time out
AR1 ping -s 1473 192.168.1.2
允许分片后可以进行通信,数据包进行了分片发送
<Huawei>ping -s 1473 192.168.1.2
PING 192.168.1.2: 1473 data bytes, press CTRL_C to break
Reply from 192.168.1.2: bytes=1498 Sequence=1 ttl=255 time=30 ms
Reply from 192.168.1.2: bytes=1498 Sequence=2 ttl=255 time=40 ms
第一个数据包IP包头直接封装在数据前面,携带了1480bit的数据,加上IP包头的20bit正好1500bit,是合法的
第一个数据波其中flag里的,DF(Don't fragment)为0,代表支持分片,MF(More fragment)为1代表后面还有未发完的数据包,偏移量为0因为是第一个数据包
第二个数据包的flag字段
DF为0支持分片,MF为0,代表后面没有数据包了,偏移量为1480,上一个数据包已经传输了1480bit的字节,为1472bit的数据和8bit的ICMP头部,在第二个包开始组装成完整的包