一、实验目的
1、网络数据包协议分析
2、掌握常用的TCP/IP协议族的功能
3、掌握WireShark工具的使用
4、理解TCP、IP、UDP、ICMP协议数据包的首部结构
二、实验环境
Windows 7/10/11,WireShark工具软件
三、实验内容
1、IP报文结构分析
2、TCP数据段结构分析
3、UDP数据段结构分析
4、ICMP报文分析
四、实验过程
第一步,确定使用的协议,使用HTTP服务。选择http://www.ncwu.edu.cn作为目标地址。
第二步,启动抓包:点击【start】开始抓包,在浏览器地址栏输入http://www.ncwu.edu.cn。
第三步,通过显示过滤器得到先关数据包:通过抓包获得大量的数据包,为了对数据包分析的方便,需要使用过滤器,添加本机IP地址和TCP协议过滤条件。
1、查看本机IP地址、DNS地址
步骤:运行—输入cmd—指令:ipconfig /all
2、查看www.ncwu.edu.cn的IP地址(目的IP)
3、WireShark工具的使用
(1)打开wireshark后,从菜单栏选择“捕获”
(2)下拉菜单,选择“选项”,从而打开以下对话框
选中接口(网卡,列表中包括硬件/软件(虚拟)网卡/WLAN),单击开始,就会捕获通过这个接口的数据帧。
(3)开始捕获后,中部窗口中显示捕获到的数据帧。在工具栏有一个停止按钮,单击它停止捕获。下图中圈出了停止按钮。
(4)选中相关数据帧,在下部窗口中查看数据帧的解析信息。下面是一个ICMP类型的数据帧。
2、产生数据帧并捕获数
使用ping命令来产生ICMP请求及响应,比如“ping 210.43.128.144”;
使用浏览器访问网页来产生TCP数据段(HTTP请求及响应)。
3、过滤捕获到的数据帧
如图所示,输入过滤规则“icmp”并回车,将只显示ICMP数据报。同理,清空过滤规则并回车,将显示所有的数据帧。
同样的,输入过滤规则“tcp and ip.addr==210.43.128.144”并回车,将只显示包含IP地址为210.43.128.144的TCP数据报。同理,清空过滤规则并回车,将显示所有的数据帧。
4、(可选)只捕获感兴趣的数据帧
如图所示,选中捕获接口后,输入捕获过滤器规则“tcp port 80”,将只捕获源端口或目的端口为80的TCP数据段。适用于数据帧较较多,wireshark逐一捕获拖慢系统运行速度的场合。
五、实验结果
复杂头部只分析关键信息。举一个或两个例子,给出截图及文字说明。
- 以太网帧分析
以太网报头长度为14个字节。主要包括:目的地址占6个字节,源地址6个字节,类型2个字进行验证以太网报头长度为14个字节。通过wireshark解析看到,为14个字节。
- ICMP数据报分析
(1)随机点击一个ICMP的回应请求报文,在分组详情面板中会以分层的形式显示,数据包的具体结构如图
(2)第一行Frame点开,给出了数据帧的全局信息,显示了包括帧长74个字节,帧到达的时间,接口的编号和帧的类型。
(3)第二行显示了数据帧头部信息,可以看到以太帧头部包括的三个字段,目的MAC地址,源MAC地址、类型字段,类型字段取值为十六进制的0800,说明数据帧中包含的是一个IP分组。
(4)第三行显示了IP分组头部信息,包括版本号4,头部长度20字节,服务类型,数据报总长度,用于分片的标志字0,分片偏移字段0,说明这是一个完整的IP数据报,没有被分片。
(5)第四行是ICMP的协议报文,具体内容是类型(type:0),代码(Code:0表明这是一个回显应答报文),校验和字段,这三个字段是所有ICMP报文的通用首部,或称为固定首部,下面的标识字段(Identifier (BE): 1 (0x0001))和序号字段(Sequence Number (BE): 1 (0x0001)),都是用两种不同的字节序来显示的。标识代表的是当前运行的ping进程的标识,序号字段代表ping生成的ICMP报文的编号
- IP头部分析
通过wireshark抓包,进行解析,可以看到IP数据报头的长度为20个字
- TCP头部分析
TCP协议数据报头为20个字节。(普通TCP协议的总报头长度=以太网数据报头+IP数据报头+TCP协议数据报头)
- UDP头部分析
可以看到UDP数据报头的长度为8字节。
六、分析与思考
1、本次实验抓获的数据包有哪些类型?捕获的各类数据包首部有什么不同?
本次实验抓获的数据包有TCP 、UDP 、IP、ICMP;
TCP协议数据首部为20个字节;
UDP数据首部的长度为8字节;
IP数据首部的长度为20个字;
ICMP:类型、代码、校验和字段,这三个字段是所有ICMP报文的通用首部。
2、wireshark是如何确定/推断网络层、传输层、应用层使用的具体协议呢?
Wireshark通过分析网络数据包的头部信息来确定或推断网络层、传输层、应用层使用的具体协议。以下是具体的分析过程:
链路层(数据链路层):
Wireshark通过检查数据包的第二层(链路层)来确定数据帧的类型,如Ethernet II帧、ARP等。在Ethernet II帧中,Type字段用于标识上层协议类型,例如0x0800代表IPv4协议,0x86dd代表IPv6协议。
网络层:
对于IP协议(IPv4或IPv6),Wireshark会查看数据包的IP头部。IP头部包含了版本信息(用于区分IPv4和IPv6)、总长度、生存时间(TTL)、协议类型(如TCP、UDP等)等字段[1][2]。Wireshark会根据这些字段来确定网络层使用的协议。
传输层:
在确定了网络层协议之后,Wireshark会进一步分析传输层头部。对于TCP协议,头部包含了源端口号、目的端口号、序列号、确认号、标志位(如SYN、ACK等)等信息[4]。对于UDP协议,头部包含了源端口号、目的端口号、数据长度和校验和等信息。根据这些字段,Wireshark可以推断出传输层使用的协议。
应用层:
应用层协议的确定通常依赖于传输层的数据内容。Wireshark会检查TCP或UDP数据部分的内容来推断应用层协议。例如,如果数据部分的内容符合HTTP协议的格式(如请求行、请求头部等),那么Wireshark就会将该数据包识别为HTTP协议[3]。同样地,如果数据内容符合SMTP、FTP等其他应用层协议的格式,Wireshark也会进行相应的识别。
七、实验总结
本次运输层实验让我对TCP和UDP两种传输层协议有了更深入的理解。实验中,我们分别使用了这两种协议来发送和接收数据,观察了它们在网络传输中的行为。
TCP协议以其可靠的传输机制给我留下了深刻印象。通过三次握手建立连接,四次挥手断开连接,TCP确保了数据传输的完整性和准确性。同时,其流量控制和拥塞控制机制也有效避免了网络拥堵和数据丢失。
相比之下,UDP协议则更加轻量级,不提供TCP所具有的错误纠正、重传和排序功能。这使得UDP在实时性要求较高的应用中表现出色,如视频流传输和在线游戏。
通过本次实验,我深刻体会到了不同传输层协议在应用场景中的差异和选择的重要性。同时,也锻炼了我分析和解决问题的能力。未来,我将继续深入学习网络协议相关知识,为将来的工作和学习打下坚实的基础。