当前位置:文档之家› 实验3 UDP协议与TCP协议

实验3 UDP协议与TCP协议

实验3 UDP与TCP协议【实验目的】1、理解UDP协议的工作原理及工作过程;2、掌握UDP的数据包格式;3、了解基本的端口分配。

4、掌握TCP协议的工作原理;5、理解TCP协议的通信过程。

【实验学时】4学时【实验类型】综合型【实验内容】1、学习UDP协议的通信过程;2、学会手工计算UDP校验和;3、理解TCP首部中各字段的含义及作用;4、理解三次握手的过程;5、能够分析TCP协议的建立连接、会话和断开连接的全过程;6、学会计算TCP校验和的方法;7、了解TCP的标志字段的作用。

【实验原理】一、UDP协议UDP是面向非连接的协议,发送端与接收端在传输数据包之前不建立连接,而只是简单地把数据包发送到网络上,或者从网络上接收数据包。

UDP提供不可靠的数据传输服务。

1、UDP封装在IP数据报图1 UDP的封装UDP字段组成2、3、关于UDP“校验和”的计算方法尽管UDP校验和的基本计算方法与IP首部“校验和”的计算方法类似(16bit的二进制反码和),但是它们之间存在不同的地方。

首先,UDP数据报长度可以为奇数字节,但是“校验和”的算法是把若干个16bit字相加。

解决方法是必要时在最后增加填充字节0,这只是为了“校验和”的计算(也就是说,可能增加的填充字节不被传送)。

其次,UDP数据报包含一个12字节长的伪首部,它是为了计算“校验和”而设置的。

伪首部包含IP首部一些字段。

其目的是让UDP两次检查数据是否已经正确到达目的地。

发送时不用传送伪首部,但接收时将IP头中的信息构建伪首部,然后计算“校验和”用以判错。

UDP“校验和”是一个端到端的“校验和”。

它由发送端计算,然后由接收端验证。

其目的是为了发现UDP首部和数据在从发送端到接收端之间发生的任何改动。

UDP数据报中的伪首部格式如图5-3:图3 UDP分组的伪首部二、TCP协议TCP协议是面向连接的、端到端的可靠传输协议,它支持多种网络应用程序。

TCP必须解决可靠性,流量控制的问题,能够为上层应用程序提供多个接口,同时为多个应用程序提供数据,TCP也必须能够解决通信安全性的问题。

1、TCP的封装图4 TCP的封装2、TCP首部格式:各字段含义:16位源端口号和16位目的端口号:端口号通常也称为进程地址。

32位序号:序号用来标识从TCP发送端向TCP接收端发送的数据字节流。

32位确认序列号:表示一个准备接收包的序列号。

4位首部长度:首部长度指出了首部中32 bit字的数目。

正常的TCP首部长度是20字节。

6个标志字段:U R G 紧急指针;A C K 确认序号;P S H 推标志;R S T 重建连接;S Y N 同步序号;F I N 结束标志。

16位窗口:TCP的流量控制由连接的每一端通过声明的滑动窗口大小来提供,窗口大小为字节数。

16位检验和:检验和字段覆盖了TCP首部和TCP数据。

TCP检验和的计算方法和UDP检验和的计算方法一样,计算时需要考虑伪报头。

16位紧急指针:URG标志置1时紧急指针才有效。

1161732图5 TCP分组格式示意图【实验步骤】一、UDP协议练习练习1:编辑并发送UDP数据包1、打开协议仿真编辑器,在工具栏选择“新建”,建立一个以太网帧(也可以利用协议仿真编辑器打开时默认的以太网帧进行编辑);2、填写该帧的以太网协议首部:⑴源MAC地址:发送方的MAC地址;⑵目的MAC地址:接收方的MAC地址。

注意:当选择的目的主机与本机不在同一子网的情况,目的MAC地址该怎样填写;⑶类型或长度:该字段值应为0800(即IP协议的类型值);3、填写IP协议头信息:⑴高层协议字段:即上层协议类型应为17(UDP协议的类型为17);⑵总长度字段:应包括UDP长度;⑶填写源、目的IP地址;⑷计算IP头校验和。

4、填写UDP协议信息,见图6:⑴16位源端口号:自选⑵16位目的端口号:自选(对于本实验,选择大于1024)⑶16位UDP长度:UDP报头长度(8个字节)与UDP数据长度之和。

⑷校验和:覆盖UDP首部(含伪首部)和数据两部分。

⑸数据字段:可有可无。

图6 UDP 协议树示意图⑹校验和的计算方法:请先参考原理的内容进行手工计算,然后利用协议仿真编辑器来计算(方法二),比较二者的结果,检验手工计算结果的正确性。

5、“校验和”的计算⑴方法一:手工计算按照参考原理3中介绍的内容,计算好UDP 伪首部和首部中的各项值,然后按16bit 进行反码求和(方法同计算IP 校验和),将结果填入相应字段。

⑵方法二:利用协议仿真编辑器来计算。

步骤为:①将UDP 长度填写到16位UDP 校验和字段中作为伪首部中UDP 长度字段值;②选中IP 首部中的32位源IP 地址和32位目的IP 地址作为UDP 伪首部中的32位源IP 地址和32位目的IP 地址;③选中IP 首部中8位的协议字段作为UDP 伪首部中的8位的协议字段;④在8位的协议字段之前选择一个8位的0作为UDP 伪首部中的8位0;⑤再选中UDP 首部及数据各字段;⑥点击鼠标右键,选择“计算校验和”;⑦将得到的校验和值填写到16位UDP 校验和字段。

下面是一个计算UDP 校验和的例子:一个不含数据部分的UDP 数据报的十六进制对照表如下:其中含有MAC 地址和IP 首部: IP首部UDP类型UDP部分00 01 02 03 04 05 06 07 08 09 0A 0B 08 00 45 0000 4F 94 48 40 00 80 11 E4 9D C0 A8 00 20 C0 A800 52 00 00 00 00 00 08 00 08目的IP地址图7 计算UDP 检验和示意图其中下划线部分为用来计算校验和的UDP 伪首部和UDP 首部,其中:00 11(十进制的17):为UDP 伪首部中8位的0和8位的协议字段;C0 A8 00 20:为UDP 伪首部中32位源IP 地址;C0 A8 00 52:为UDP 伪首部中32位目的IP 地址;00 00 00 00 00 08 00 08:为8字节的UDP 首部;由于缺少伪首部中16位UDP 长度,故该值暂时存放在16位UDP 校验和字段中,在本例中该值为00 08。

对上述选中部分计算校验和即可。

⑶方法三:利用协议仿真编辑器来计算。

步骤为:①先计算UDP校验和,后计算IP校验和;②将0011添到IP头校验和字段中作为UDP伪首部中的8位0和8位的协议字段;③将UDP长度填写到16位UDP校验和字段作为伪首部中UDP长度字段值;④从IP校验和字段开始选中直到UDP尾;⑤点击鼠标右键,选择“计算校验和”。

将计算结果添到UDP校验和字段中;⑥将IP校验和字段清零,计算IP头的校验和;⑦将得到的IP校验和值填写到IP头的16位校验和字段中。

如果要发送多个UDP数据报,可重复上述步骤,并可在多帧编辑器中设置每一帧的发送次数和发送每帧的时间间隔;5、点击工具栏或菜单栏中的“发送”,在弹出对话框中选择“发送”按钮,发送UDP报文;6、在协议分析器一端截获相应的报文并分析,注意观察“会话分析”中的UDP会话过程。

7、将编辑正确的UDP数据报保存到文件:UDP.pkt。

练习2:编辑并发送UDP广播包1、实验步骤同上;注意:以太网协议首部中的目的MAC地址应怎样填写?IP首部中的目的IP地址该怎样填写?2、在协议分析器一端截获相应的报文并分析。

练习3:运行netstat命令netstat命令是用于显示网络使用协议的统计;1、在命令行方式下运行:netstat –s ;显示每个协议的使用状态,观察UDP协议的使用情况。

2、在命令行方式下运行:netstat –a ;显示所有主机的端口号,观察与UDP协议相关的内容。

二、TCP协议练习注意:本实验要求服务器端启动TELNET服务。

练习1:运行netstat命令1、在浏览器的地址栏输入:,在命令行下输入: netstat -n 回车。

2、观察TCP状态,记录Local Address、Foreign Address和State。

3、在浏览器的地址栏输入:,在命令行下输入: netstat -n 回车。

4、观察TCP状态,记录Local Address、Foreign Address和State。

5、再开一个命令行窗口,输入:telnet ,6、观察TCP状态,记录Local Address、Foreign Address和State。

7、三次记录有什么不同,为什么?8、使用带其他参数的netstat命令,查看网络状态。

例如:netstat –anetstat –b练习2:利用仿真编辑器编辑并发送TCP数据包说明:●在本实验中由于TCP连接有超时时间的限制,故仿真编辑器端和协议分析器端的两位同学要默契配合,某些步骤(如计算TCP校验和)要求熟练、迅速。

●为了实现TCP三次握手过程的仿真,发送第一个连接请求帧之前,应该暂停仿真编辑器端的TCP/IP协议(否则计算机系统的网络会对该请求帧的应答帧发出拒绝响应)。

●通过手工编辑TCP数据包实验,要求理解实现TCP连接建立、数据传输以及断开连接的全过程。

在编辑的过程中注意体会TCP首部中的序列号和标志位的作用。

首先选择服务器主机上的一个进程作服务器进程,并向该服务器进程发送一个建立连接请求报文,对应答的确认报文和断开连接的报文也编辑发送。

其步骤如下:1、打开协议仿真编辑器,在界面初始状态下,程序会自动新建一个单帧,可以利用协议仿真编辑器打开时默认的以太网帧进行编辑;2、填写该帧的以太网协议首部:⑴源MAC地址:本机MAC地址;⑵目的MAC地址:服务器的MAC地址;⑶类型或长度:0800,选择IP协议;3、填写IP协议头信息:⑴协议字段:协议类型值为6,即上层协议类型应为TCP;⑵总长度字段:修改IP总长度字段为40(20IP头部+20TCP头部);⑶计算IP头部校验和,应用前面学到的知识进行计算;⑷源IP地址:本机IP地址;⑸目的IP地址:服务器的IP地址;⑹其它字段任意;4、填写TCP协议信息:⑴源端口号:任意大于1024的数,不要用下拉选择;⑵目的端口号:可以设80(HTTP协议);⑶32位序号:选择一个序号ISN(假设1942589885),以后的数据都按照这个来填写;⑷32位确认序号:设置为0;⑸首部长度和标志位:首部长度和标志位设为5002(即长度20字节,标志SYN=1);⑹窗口大小:任意;⑺紧急指针:0;⑻校验和:覆盖TCP首部(包含伪首部)和TCP数据两部分,计算方法同UDP协议一样。

值得注意的是伪首部中的协议号是0006,而不是UDP时的0011;⑼将设置完成的数据帧复制3份;修改第二帧的TCP首部长度和标志位为5010(即标志位ACK=1),TCP层序号为1942589885+1。

相关主题