Exp8: UDP报⽂分析
⼀、实验⽬的
了解 UDP 协议的⼯作原理
⼆、实验任务
使⽤Wireshark快速了解UDP协议
三、实验过程
3.1 UDP 协议
⽤户数据报(UDP)协议是运输层提供的⼀种最低限度的复⽤/分解服务,可以在⽹络层和正确的⽤户即进程间传输数据。UDP 是⼀种不提供不必要服务的轻量级运输协议,除了复⽤/分⽤功能和简单的差错检测之外,⼏乎就是 IP 协议了,也可以说它仅提供最⼩服务。UDP 是⽆连接的,因此在两个进程通信前没有握⼿过程。UDP 协议提供⼀种不可靠数据传输服务,也就是说,当⼀个进程讲⼀个报⽂发送进 UDP套接字时,UDP 协议并不保证该报⽂将到达接收进程。也正是由于 UDP 不修复错误,因此到达接收进程的报⽂也可能是乱序到达的。UDP 是⾯向报⽂的,这是因为 UDP 并不会对应⽤层传递下来的报⽂进⾏任何处理,对于报⽂的边界信息都会保存,向下交付时交付的是完整报⽂。
3.2 UDP 报⽂结构
UDP ⾸部只有 4 个字段:源端⼝号、⽬的端⼝号、⻓度、校验和,其中每个字段由 2 个字节组成。
3.3 实验操作
在 Wireshark 中捕获数据包,然后执⾏⼀些会导致主机发送和接收多个 UDP 数据包的操作。也可以什么也不做,仅执⾏ wireshark 捕获以便获取其他程序发给您的 UDP 数据包。有⼀种特殊情况:简单⽹络管理协议(SNMP)在 UDP 内部发送 SNMP 消息,因此可能会在跟踪中找到⼀些SNMP 消息(以及 UDP 数据包)。
停⽌数据包捕获后,设置数据包筛选器,以便 Wireshark 仅显示在主机上发送和接收的 UDP 数据包。 选择其中⼀个 UDP 数据包并在详细信息窗⼝中展开 UDP 字段。
task1:
从跟踪中选择⼀个 UDP 数据包。从此数据包中,识别并确定 UDP ⾸部字段,请为这些字段命名并将实验结果附在实验报告中。
UDP首部有8个字节,由4个字段构成,每个字段都是两个字节,
1.源端口: 源端口号,需要对方回信时选用,不需要时全部置0.
2.目的端口:目的端口号,在终点交付报文的时候需要用到。
3.长度:UDP的数据报文的长度(包括首部和数据)其最小值为8(只有首部)
4.校验和:检测UDP数据报在传输中是否有错,有错则丢弃。
下面这段报文节选自Wireshark捕捉到的一个UDP数据包
1 | User Datagram Protocol, Src Port: 52355, Dst Port: 8000 |
task2:
根据选择的UDP数据包,确定 UDP 报头字段的⻓度,请将实验结果附在实验报告中。
我们发现这个UDP报头字段的长度是8个字节,因为每个字段长度为两个字节:
Source Port: cc 83 , 转换成十进制就是52355,即端口号
Destination Port:1f 40,转换成十进制就是8000
Length: 00 4c,转换成十进制就是76 也就是报文长度
task3:
UDP⾸部中的⻓度字段的值指的是什么?使⽤捕获的 UDP 数据包进⾏验证,请将实验结果附在实验报告中。
UDP的数据报文的长度(包括首部和数据)其最小值为8(只有首部)。
比如说这个UDP报文,首部的长度是8个字节,data部分如下:
‘
我们发现Data部分的长度是68个bytes,从十六进制数字中也可以看出一共有68个字节。
task4:
UDP 有效负载中可包含的最⼤字节数是多少?请将实验结果附在实验报告中。
因为UDP首部中,长度的字段只有2个字节也就是16位。所以能表示的最大数为$2^{16}-1=65535$ 。又UDP首部占据了8字节,所以有效负载中可包含的最⼤字节数是 $65535-8 = 65527$ 字节。
⾸先先认识下有效负载:
有效负载是被传输数据中的⼀部分,⽽这部分才是数据传输的最基本的⽬的,和有效负载⼀同被传送的数据还有:数据头或称作元数据,有时候也被称为开销数据,这些数据⽤来辅助数据传输。
task5:
最⼤可能的源端⼝号是多少?请将实验结果附在实验报告中。
因为端口号也只有2个字节,因此最大能表达的数为65535,因此最大可能的源端口号是 65535
在之前我们编写的UDP Provider和UDP searcher文件当中,我们可以来验证这个结论:
当我们申请65535端口的时候,是可以正常利用UDP来发送数据处理数据的
但是当我们申请65536端口的时候,Java会给我们一个报错,说 Port out of range,说明 65536接口是非法的。
task6:
根据选择的UDP数据包指出UDP的协议号是多少?请以⼗六进制和⼗进制表示法给出答案,并将实验结果附在实验报告中。
协议号指的是一个协议在IP包头中的一个字段,IP头中的协议号用来说明IP报文中承载的是哪种协议.目的主机收到IP包后,根据IP协议号确定送给哪个模块(TCP/UDP/ICMP…)处理,送给TCP/UDP模块的报文根据端口号确定送给哪个应用程序处理。
我们在IPV4报文中找到了UDP的协议号,是17
用同样的方法可以找到
TCP的协议号是6
HTTP的协议号是80
DNS的协议号是53
task7:
观察发送 UDP 数据包后接收响应的 UDP 数据包,这是对发送的 UDP 数据包的回复,请描述两个数据包中端⼝号之间的关系。(提示:对于响应 UDP ⽬的地应该为发送 UDP 包的地址。)请将实验结果附在实验报告中。
我们找到了这样一组发送UDP数据包和响应的UDP数据包。
他们的编号是532493和532494。
532493 这个包的源地址是:192.168.31.15也就是我本地的电脑地址,目的地址是180.153.91.44 ,源端口是52355,目的端口是8000
532494 这个包的原地址是:180.153.91.44,而目的地之是192.168.31.15, 源端口是8000,目的端口是52355