一:任务目的
(1)了解计算机网络TCP/IP的分层实现过程,了解不同层次PDU的逐层封装与解封过程; (2)熟悉网络通信的实现过程和数据发送过程; (3)熟悉计算机网络各层知识的应用,能综合利用所学知识对网络数据进行分析;
二:任务内容
(1)了解并熟悉常见的抓包工具,例如Wireshark、Sniffer等,熟悉以太网数据帧和IP数据包的结构; (2)能够正确捕捉ping命令执行过程中所产生的数据包,并逐层分析其构成,进而了解数据包的封装与解封过程; (3)每位同学给出自己的ping命令数据包的分析结果。
三:提交形式及时间
每位同学提交纸质报告一份,期末考试前提交。
四:步骤
1.下载并安装抓包工具Wireshark。链接:https://wireshark.en.softonic.com/ 2.打开安装好的wireshark。 3.打开cmd,运行命令ipconfig /all,可以查到网卡的物理地址(IP地址)、被路由器利用dhcp分配的ip地址、子网掩码等信息。虚拟机也有虚拟机上的网卡。主机上也接入了有线网络,以太网的网卡的mac地址与无线网mac地址略有不同。 4.打开cmd,运行命令route print,可以看到路由表信息。网关是下一跳地址,“在链路上”。“在链路上”指你电脑访问网络的链路中存在多个网关。 5.因为接入了以太网,所以运行arp -a命令可以查看arp缓存中的项目。 6.在wireshark中启动“捕获”。启动后,在cmd中输入ping www.sogou.com,得到搜狗网的ip地址。 7.在wireshark中设置过滤器,只显示发向118.184.170.37的记录。在过滤器中输入:ip.dst==118.184.170.37,可以看到4条数据,因为本机在利用ping指令测试连通性时也会发4条数据。 8.以发送的第一条报文为例进行分析。 9.以自顶向下的顺序,一段数据会被层层封装,(除了ping)首先在运输层被封装成了报文,报文首部为20字节。但是,ping工作在网络层,被封装成的是icmp报文。之后,在网络层被封装成了IP数据报,IP数据报首部占32字节。IP数据报又在数据链路层被封装成了帧。而物理层传输的是比特流。所以,利用捕获工具捕获到的是比特流,它被层层封装,共74byte。 10.数据链路层的mac帧首部的格式为:
“地址”指的是mac地址。目的地址占6byte,即搜狗网服务器的mac地址为0c:4b:54:15:69:73。源地址占6byte,即本机的mac地址为:e4:54:e8:2c:41:33。这个mac地址,与前文中利用ipconfig /all查到的以太网卡mac地址是完全一致的。类型占2byte,0x0800即表示高层(网络层)使用IP数据报,利用IP协议。 但是,捕获到的帧尾部没有CRC循环冗余校验位
11.网络层的IP数据报首部固定部分格式为:
4bit | 4bit | 8bit | 16bit | 16bit | 3bit | 13bit | 8bit | 8bit | 16bit | 32bit | 32bit |
---|
版本 | 首部长度 | 区分服务 | 总长度 | 标识 | 标志 | 片偏移 | 生存时间 | 协议 | 首部检验和 | 源地址 | 目的地址 |
(1)固定部分首部共占20byte。图中深色部分即为固定首部,共20byte。 (2)前4bit标识版本,“4”表示协议IP版本为IPv4。 “5”表示首部长度为5个32位字长。一个32位字长是4byte。所以,“5”表示首部长度为5*4=20byte (3)“00”表示区分服务。这个字段一般不起作用。 (4)“00 3c”表示总长度。3c的10进制值为60,表示IP数据报的首部加上来自高层的数据共60byte。从IP数据报首部(值为45H,正如上文分析)开始到整个数据报结束,其长度确实是60byte。如图。 (5)“89 b0”表示标识。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器加1。本数据报的标识为89b0h。下一条数据报的标识就是89b1h。 (6)同理,再下一条数据报的标识就是89b2h。 (7)回到当前在分析的第0条数据报。接下来3bit是标识,值为000。即:这是若干数据报中的最后一个,不允许分片。 (8)接下来13bit是片偏移。较长的分组分片后,某片在原分组中的相对位置。但是,只有一个完整的数据报片,所以片偏移量为0。 (9)“40”指生存时间TTL。40H也是16进制数,其10进制值为64。TTL值为64,是因为在win10/11上发送的数据报默认ttl为64。这一数值可以在注册表编辑器regedit中,通过路径“HKEY_LOCAL_MACHINE\System\CurrentControlSet \Services\Tcpip\Parameters”找到。 (10)“01”表示协议,协议字段值01表示协议名为icmp。与界面顶部“protocol”字段中的“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报文格式如下
8bit | 8bit | 16bit | 16bit |
---|
类型 | 代码 | 检验和 | (取决于icmp报文类型) |
(1)“08”表明是一个询问报文,表明该报文就是一个ping请求。如wireshark所示。经查阅资料,代码位Code与类型位Type配合。当类型位Type为08且代码位Code为00时,表明是一个回显请求(ping请求)。 (2)“4c d6”为检验和。Wireshark直接给出:该检验和正确。检验和的计算方法为:将该16bit置成0,将整个报文分为多个16bit序列,进行反码相加,对结果取反。ICMP的检验和计算时不仅包括首部,而且包括数据部分。其过程过于复杂,在此不赘述。 (3)“0001 0085”这四个字节取决于ICMP报文类型。Wireshark直接给出:这四个字节中前两个字节表示Identifier,后两个字节表示Sequence Number。经查阅相关资料,win10/11的Identifier固定位0001,配合Sequence Number 才能区分不同的ping进程。例如,本文正在分析的ping进程中,Sequence Number为0085。 下一条报文的Sequence Number为0086,以此类推。 (4)最后是ICMP报文的数据部分。可以看出,ping请求时发送的数据就是abcdefg…uvw等字符的循环,共32byte。 13.在上文中提到过,数据链路层的mac帧最后4byte使用循环冗余检验(CRC)作为FCS对帧的有效性与是否出现差错进行检测。但是,利用Wireshark抓包抓到的帧并不存在这4byte的校验位。经过我查阅相关资料得知:网卡接收到一个帧,第一步就是计算FCS,并与接收到的帧尾的FCS进行对比,如果一致,则接收,如果不一致则丢弃。而Wireshark抓到的帧,是FCS校验通过的帧,而帧尾的FCS会被硬件去掉,所以没有FCS。另一方面,wireshark也不会抓到FCS校验失败的帧。至此,本文已经完成了对本机发送给搜狗网的数据中的每一层的每一位的分析与解释。 14.在wireshark中重新设置过滤器,只显示由搜狗网服务器118.184.170.37发到本机的记录。在过滤器中输入:ip.src==118.184.170.37。同样地,看到了4条用于应答ping请求发回的icmp报文。捕获到的数据就是cmd中的数据。同样,也能用上文办法分析。 15.以第一条为例。 在数据链路层,起点MAC地址搜狗服务器的为0c:4b:54:15:69:73。目的地是本机的mac地址为:e4:54:e8:2c:41:33。类型为IPv4。 16.在网络层的IP数据报,用同样的方法进行分析。 版本为IPv4,首部长度20byte。不使用区分服务。总长度60byte。标识为4604,标志flag为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与使用wireshark捕获到的数据中的ttl是一致的。搜狗服务器使用的操作系统时linux,linux发出的数据的默认ttl也是64。尽管本机的win10/win11操作系统发出去的数据的ttl是64,但这两个64的含义有所区别。 在数据(ICMP报文),也是用同样的办法。类型为0、代码为0,表示应答ping请求。检验和正确。Identifier为1,Sequence Number为0085。数据也同样为abcdefg…循环。在此,wireshark多提供了一条字段为response time。与cmd中应答ping请求的时间一致。
五、感悟
|