(7) 返回当前正在分析的第0个数据报。 接下来的3位是标识,值为000。即:这是几个数据报中的最后一个,不允许分段。
(8) 接下来的13bit是切片偏移量。 较长的数据包被分片后,切片在原始数据包中的相对位置。 然而,只有一个完整的数据报切片,因此切片偏移量为0。
(9)“40”指生存时间TTL。 40H也是一个十六进制数,它的十进制值为64。TTL值为64,因为win10/11上发送的数据报的默认ttl为64。这个值可以在注册表编辑器中通过路径“\\ \\Tcpip\"。
(10)“01”表示协议,协议字段值为01表示协议名称为icmp。 与界面顶部“”字段中的“icmp”一致。
(11)“0000”表示报头校验和。 但该数据报中的头验证功能被关闭。
(12)“c0 a8 01 6d”表示源地址。 将这四个十六进制数转换为十进制是192.168.1.109,说明发送数据报时的ip地址是192.168.1.109。
(13)“7b 68 aa 25”表示目的地址。 将这四个十六进制数转换成十进制数是118.184.170.37,说明搜狗服务器的IP地址是118.184.170.37。
在此示例中,没有可变部分。 以下数据部分由ICMP协议封装。
12、ICMP报文格式如下
8位
8位
16位
16位
–
–
–
–
类型
代码
校验和
(取决于icmp数据包类型)
(1)“08”表示是询问消息,表明该消息是ping请求。 如图所示。 查阅数据后,代码位Code与类型位Type相匹配。 当类型位Type为08、代码位Code为00时,表示回显请求(ping请求)。
(2)“4c d6”是校验和。 直接给出:校验和正确。 校验和的计算方法为:将16bit设置为0,将整个报文分成多个16bit序列,进行反码相加,将结果取反。 ICMP的检查和计算不仅包括报头,还包括数据部分。 该过程过于复杂,这里不再赘述。
(3) 四个字节“0001 0085”取决于ICMP消息的类型。 直接给出:四个字节中,前两个字节代表,后两个字节代表。 查阅相关资料,win10/11的固定位是0001,可以用来区分不同的ping进程。 例如本文分析的ping过程中,为0085。
下一条消息是 0086,依此类推。
(4)最后是ICMP报文的数据部分。 可以看到,ping请求时发送的数据是...uvw、total等字符的循环。
13. 如上所述,数据链路层的mac帧的最后4个字节使用循环冗余校验(CRC)作为FCS来检测帧的有效性以及是否有错误。 然而,抓包捕获的帧没有4字节校验位。 我查了相关资料后得知,当网卡接收到一个帧时,首先要计算出FCS,并与接收到的帧末尾的FCS进行比较。 如果一致则接收,如果不一致则丢弃。 捕获到的帧就是通过FCS检查的帧,帧末尾的FCS会被硬件去掉,所以就没有FCS了。 另一方面,未通过 FCS 检查的帧将不会被捕获。 至此,本文就完成了本机向搜狗发送的数据中各层每一位的分析和解释。
14. 重置过滤器,只显示搜狗服务器118.184.170.37发送到本机的记录。 在过滤器中输入:ip.src==118.184.170.37。 同样,我看到 4 个 icmp 数据包被发送回来以响应 ping 请求。 捕获的数据就是cmd中的数据。 同样,也可以用上面的方法来分析。
15.以第一篇文章为例。
在数据链路层,搜狗服务器的起始MAC地址为0c:4b:54:15:69:73。 目的地是本机的 MAC 地址:e4:54:e8:2c:41:33。 类型是 IPv4。
16、网络层的IP数据报同样进行分析。
版本是 IPv4,以及标头的长度。 不使用 。 总长度。 标识符为4604,标志为0,无分片。 切片偏移量为0,TTL为52,协议号为1,使用ICMP协议。 第一个校验和未确认。 源ip为搜狗服务器ip118.184.170.37,目的ip为本地ip192.168.1.109。
ttl 需要一些补充说明。 在cmd上,收到响应的数据TTL=52,说明从搜狗服务器到本机经过了64-52=12跳。 Cmd上的ttl与使用捕获数据中的ttl相同。 搜狗服务器使用的操作系统是linux,linux发送的数据默认的ttl也是64。虽然本地win10/win11操作系统发送的数据的ttl是64,但这两个64的含义是不同的。
在数据(ICMP消息)中,使用相同的方法。 如果类型为0且代码为0,则表示应答ping请求。 检查并改正。 是1,是0085。数据还循环....这里,又提供了一个字段作为时间。 与cmd中响应ping请求的时间一致。
5. 理解力