运输层协议及其应用
目录
主页:噗-噗
注意:实验内容主要在五 实验结果中,可以直接点击目录,内容可能不是太完善,自主调整!
一、实验目的及要求
1. 能够基于TCP与HTTP协议的作用、工作过程等设计实验方案并开展实验;
2.能够在实验中捕获TCP连接建立、数据传输、连接释放相关的报文段并进行分析,验证协议的工作过程,解释相关控制字段的作用;
3.能够通过实验验证HTTP协议的工作过程,解释HTTP报文中主要字段的作用。
二、实验内容
1.查看UDP数据报的内容,分析UDP协议各字段的作用和格式;
2.查看DNS报文的内容,分析DNS协议的工作过程和报文中关键字段的格式和作用;
3.查看HTTP报文的内容,分析HTTP协议的工作过程和报文中关键字段的格式和作用。
4.查看TCP连接的建立和释放过程;
5.查看TCP报文段的内容,分析TCP协议各字段的作用和格式;
6.编辑并发送TCP报文段,验证TCP标志位的作用;
三、实验设备与环境
1.实验设备
安装有wireshark和tcpCSTool的计算机两台,两个机器间应能相互访问。
2.实验拓扑
3.IP地址规划
设备 | IP地址 | 子网掩码 | DNS Server |
PC | 192.168.1.1 | 255.255.255.0 | 192.168.1.10 |
DNS Server | 192.168.1.10 | 255.255.255.0 | |
Web Server | 192.168.1.20 | 255.255.255.0 | 192.168.1.10 |
四、实验设计方案
练习1 捕获UDP数据报
(1)实验准备
①启动Packet Tracer,连接对应拓扑。
②各主机按地址规划配置相应IP地址,其中PC的DNS地址配置成192.168.1.10。
③服务器启用http服务、DNS服务,同时配置一条DNS记录,如下图所示。
④PC能够ping通服务器。
(2)进入Simulation模式下,编辑过滤器,只捕获DNS、UDP协议(在Filter中选中DNS、UDP),由PC打开Desktop下的Web browser,在URL栏输入www.server.com回车,单击Auto Capture按钮,捕获并观察DNS报文。单击事件列表中位于PC和DNS Server上数据包的 Info(信息)正方形,打开 PDU Information(PDU 信息)窗口,单击 Outbound PDU Details(出站 PDU 详细数据)选项卡以查看 UDP 报文的内容,并分析解释。
分析: 通过分析实验结果,UDP报文结构由哪几部分组成,其功能是什么?
练习2 访问服务器Http服务,捕获数据包并分析。
1.进入Simulation模式,编辑过滤器,只捕获HTTP协议(在Filter中选中HTTP),由PC打开Desktop下的Web browser,在URL栏输入www.server.com回车,单击Auto Capture按钮,捕获并观察HTTP 报文。单击事件列表中位于PC和Web Server上数据包的 Info(信息)正方形,打开 PDU Information(PDU 信息)窗口,单击 Outbound PDU Details(出站 PDU 详细数据)选项卡以查看 HTTP 报文的内容,并分析解释。
2.查看event list中捕获到的第一个HTTP类型请求,可以看到,PC向IP为192.168.1.20的服务器发送了一个请求,使用方法为GET。
3.在接下来的一个HTTP报文中,可以看到,服务器对与PC机的应答正确,出现了应答码200,即为“OK”。
练习3 察看TCP连接的建立、数据传输和释放的过程
1. 主机PC和server上分别启动wireshark协议分析软件,设置过滤条件(host 192.168.8.10 and tcp),其中HOST后的地址是对方的IP地址,选择网络接口为本地连接设备,点击“开始一个新的抓包”按钮,进入数据包捕获状态。
2. 主机PC和server分别启动tcpCSTool下的sokit.exe工具。
(1)主机server下选择服务器,TCP地址为本地连接的IP,端口输入一个特定的值如6000,单击TCP侦听,启动TCP服务器侦听。
(2)主机pc下选择客户机,TCP地址为(1)中服务器的IP,端口为(1)中服务器的端口,点击[TCP连接]按钮进行连接。
(3)在PC的客户窗口的数据0框中输入12345,点击“发送”。
(4)在PC的客户窗口中再次点击[TCP连接]按钮断开连接。
3. 主机PC和server的wireshark窗口中,分别点击“停止正在进行的抓包”按钮,观察抓到的数据包。
4.数据包分析:
(1) TCP连接建立时,前两个报文的首部都有一个“最大字段长度”字段,它的值是多少?作用是什么?结合IEEE802.3协议规定的以太网最大帧长度分析此数据是怎样得出的。
(2)理解TCP的三次握手建立连接和四次握手的释放连接过程。
(3)主机PC中报文的序列号和主机server中报文的确认号有什么关系?理解序号、确认号等字段在TCP可靠连接中所起的作用。
(4)主机PC中哪个报文携带有发送的数据?该报文的序列号和下一个报文的序列号有什么关系?
练习4 TCP的重传机制
1. 主机PC启动wireshark协议分析软件,设置过滤条件(host 192.168.8.10 and tcp),其中HOST后的地址是server方的IP地址,选择网络接口为本地连接设备,点击“开始一个新的抓包”按钮,进入数据包捕获状态。
2. 主机PC和server分别启动tcpCSTool下的sokit.exe工具。
(1)主机server下选择服务器,TCP地址为本地连接的IP,端口输入一个特定的值如6000,单击TCP侦听,启动TCP服务器侦听。
(2)主机pc下选择客户机,TCP地址为(1)中服务器的IP,端口为(1)中服务器的端口,点击[TCP连接]按钮进行连接。
(3)在PC的客户窗口的数据0框中输入1234567890,点击“发送”。
(4)在PC的客户窗口的数据1框中输入abcdefg,先不要点击“发送”,拔掉主机的网线,点击“发送”,观察sokit和wireshark窗口中的变化。
3. 等待2分钟后,在主机PC的wireshark窗口中,点击“停止正在进行的抓包”按钮,观察抓到的数据包。
5.数据包分析
(1)发送的数据“1234567890”server端是否收到了?PC端是否收到了确认信息?
(2)发送的数据“abcdefg” PC端是否发出去了?共重传了多少次?server端是否收到了?PC端是否收到了确认信息?
(3)TCP连续重传失败后,主机PC的客户端进程作出了什么处理?
练习5 连接不存在的端口
1. 主机PC启动wireshark协议分析软件,设置过滤条件(host 192.168.8.10 and tcp),其中HOST后的地址是server方的IP地址,选择网络接口为本地连接设备,点击“开始一个新的抓包”按钮,进入数据包捕获状态。
2. 主机PC启动tcpCSTool下的sokit.exe工具。
(1)主机server不启动sokit.exe工具,或者启动sokit.exe工具但不启动TCP服务器侦听。
(2)主机pc下选择客户机,TCP地址为(1)中 server的IP,端口为server中不存在的端口,点击[TCP连接]按钮进行连接。
(4)在PC的wireshark窗口中观察抓到的数据包,并分析:pc向server发出连接请求后,是否收到了server的确认?收到的是什么样的确认信息?
五、实验结果
练习1 捕获UDP数据报
(1)实验准备
①启动Packet Tracer,连接对应拓扑。
②各主机按地址规划配置相应IP地址,其中PC的DNS地址配置成192.168.1.10。
③服务器启用http服务、DNS服务,同时配置一条DNS记录,如下图所示。
④PC能够ping通服务器。
(2)进入Simulation模式下,编辑过滤器,只捕获DNS、UDP协议(在Filter中选中DNS、UDP),由PC打开Desktop下的Web browser,在URL栏输入www.server.com回车,单击Auto Capture按钮,捕获并观察DNS报文。单击事件列表中位于PC和DNS Server上数据包的 Info(信息)正方形,打开 PDU Information(PDU 信息)窗口,单击 Outbound PDU Details(出站 PDU 详细数据)选项卡以查看 UDP 报文的内容,并分析解释。【如下图】
在Filter中选中DNS、UDP
URL栏输入www.server.com回车
单击 Outbound PDU Details
分析: 通过分析实验结果,UDP报文结构由哪几部分组成,其功能是什么?
UDP报文结构可以分为报头和数据载荷两部分,其中报头可以分为四个部分:16位源端口号;16位目的端口号;64K报文长度以及2个字节大小的校验和。
UDP的报文格式中,报头由四个16位长(8字节)字段组成,分别说明该报文的源端口、目的端口、报文长度以及校验和。
UDP协议的功能如下:
- UDP是无连接的。即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。
- UDP使用尽最大努力交付。即不保证可靠交付,因此主机不需要维护复杂的连接状态表(这里面有许多参数)。
- UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不分拆,而是保留这些报文的边界。
- UDP是为了在给定的主机上能识别多个目的地址,同时允许多个应用程序在同一台主机上工作并能独立地进行数据报的发送和接收而设计的。
- UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接数据报传输服务。它不提供报文到达确认、排序、及流量控制等功能。
练习2 访问服务器Http服务,捕获数据包并分析。
1.进入Simulation模式,编辑过滤器,只捕获HTTP协议(在Filter中选中HTTP),由PC打开Desktop下的Web browser,在URL栏输入www.server.com回车,单击Auto Capture按钮,捕获并观察HTTP 报文。单击事件列表中位于PC和Web Server上数据包的 Info(信息)正方形,打开 PDU Information(PDU 信息)窗口,单击 Outbound PDU Details(出站 PDU 详细数据)选项卡以查看 HTTP 报文的内容,并分析解释。
Filter中选中HTTP
URL栏输入www.server.com回车
打开 PDU Information
2.查看event list中捕获到的第一个HTTP类型请求,可以看到,PC向IP为192.168.1.20的服务器发送了一个请求,使用方法为GET。
3.在接下来的一个HTTP报文中,可以看到,服务器对与PC机的应答正确,出现了应答码200,即为“OK”。
练习3 察看TCP连接的建立、数据传输和释放的过程
1. 主机PC和server上分别启动wireshark协议分析软件,设置过滤条件(host 192.168.8.10 and tcp),其中HOST后的地址是对方的IP地址,选择网络接口为本地连接设备,点击“开始一个新的抓包”按钮,进入数据包捕获状态。
2. 主机PC和server分别启动tcpCSTool下的sokit.exe工具。
(1)主机server下选择服务器,TCP地址为本地连接的IP,端口输入一个特定的值如6000,单击TCP侦听,启动TCP服务器侦听。
(2)主机pc下选择客户机,TCP地址为(1)中服务器的IP,端口为(1)中服务器的端口,点击[TCP连接]按钮进行连接。
(3)在PC的客户窗口的数据0框中输入12345,点击“发送”。
(4)在PC的客户窗口中再次点击[TCP连接]按钮断开连接。
3. 主机PC和server的wireshark窗口中,分别点击“停止正在进行的抓包”按钮,观察抓到的数据包。
4.数据包分析:
(1) TCP连接建立时,前两个报文的首部都有一个“最大字段长度”字段,它的值是多少?作用是什么?结合IEEE802.3协议规定的以太网最大帧长度分析此数据是怎样得出的。
TCP连接建立时,前两个报文的首部都有一个“最大字段长度”字段,其值为65535字节。该字段的作用是标识TCP首部的长度,以便接收端能够正确解析TCP报文。
以太网协议规定,一个以太网帧的最大长度为1518字节,其中前14字节是帧头(包括目的MAC地址、源MAC地址和类型/长度字段),接下来是数据部分。由于TCP报文段的首部长度固定为20字节,因此最大数据长度为1500字节。因此,TCP报文段的最大长度为14字节的帧头 + 20字节的TCP首部 + 1500字节的数据 = 1534字节。
(2)理解TCP的三次握手建立连接和四次握手的释放连接过程。
TCP的三次握手建立连接过程如下:
- 主机A发送一个SYN报文给主机B,请求建立连接。
- 主机B收到SYN报文后,回复一个SYN+ACK报文给主机A,表示接受连接请求。
- 主机A收到SYN+ACK报文后,发送一个ACK报文给主机B,确认连接建立。
TCP的四次握手释放连接过程如下:
- 主机A发送一个FIN报文给主机B,表示要关闭连接。
- 主机B收到FIN报文后,回复一个ACK报文给主机A,表示已收到关闭请求。
- 主机B发送一个FIN报文给主机A,表示自己也准备好关闭连接。
- 主机A收到FIN报文后,回复一个ACK报文给主机B,确认连接关闭。
(3)主机PC中报文的序列号和主机server中报文的确认号有什么关系?理解序号、确认号等字段在TCP可靠连接中所起的作用。
主机PC中报文的序列号和主机server中报文的确认号有以下关系:
- 在TCP三次握手建立连接过程中,主机PC发送的SYN报文携带数据时,该报文的序列号就是主机PC期望接收的第一个字节的数据序号。主机Server在收到SYN报文后,会回复一个SYN+ACK报文,该报文的确认号是主机Server期望接收的下一个字节的数据序号。因此,主机Server中的确认号与主机PC中的序列号之间的关系是:确认号 = 序列号 + 数据长度。
- 在TCP四次握手释放连接过程中,主机PC发送的FIN报文不携带数据,因此该报文的序列号为0。主机Server在收到FIN报文后,会回复一个ACK报文,该报文的确认号就是主机PC发送的FIN报文的序列号。因此,主机Server中的确认号与主机PC中的序列号之间的关系是:确认号 = 序列号。
- 序号、确认号等字段在TCP可靠连接中起的作用是:序号用于标识数据传输的顺序;确认号用于标识接收端期望接收的下一个数据序号;序号和确认号的交互确保了数据的可靠传输。
(4)主机PC中哪个报文携带有发送的数据?该报文的序列号和下一个报文的序列号有什么关系?
在TCP三次握手建立连接过程中,主机PC发送的SYN报文携带有发送的数据。该报文的序列号为主机PC期望接收的第一个字节的数据序号。下一个报文的序列号与该报文的序列号之间的关系是:下一个报文的序列号 = 该报文的序列号 + 数据长度。
练习4 TCP的重传机制
- 主机PC启动wireshark协议分析软件,设置过滤条件(host 192.168.8.10 and tcp),其中HOST后的地址是server方的IP地址,选择网络接口为本地连接设备,点击“开始一个新的抓包”按钮,进入数据包捕获状态。
2. 主机PC和server分别启动tcpCSTool下的sokit.exe工具。
(1)主机server下选择服务器,TCP地址为本地连接的IP,端口输入一个特定的值如6000,单击TCP侦听,启动TCP服务器侦听。
(2)主机pc下选择客户机,TCP地址为(1)中服务器的IP,端口为(1)中服务器的端口,点击[TCP连接]按钮进行连接。
(3)在PC的客户窗口的数据0框中输入1234567890,点击“发送”。
(4)在PC的客户窗口的数据1框中输入abcdefg,先不要点击“发送”,拔掉主机的网线,点击“发送”,观察sokit和wireshark窗口中的变化。
3. 等待2分钟后,在主机PC的wireshark窗口中,点击“停止正在进行的抓包”按钮,观察抓到的数据包。
5.数据包分析
(1)发送的数据“1234567890”server端是否收到了?PC端是否收到了确认信息?
(2)发送的数据“abcdefg” PC端是否发出去了?共重传了多少次?server端是否收到了?PC端是否收到了确认信息?
是的,如果PC端发送了数据“abcdefg”,那么这些数据已经被发送出去了。TCP协议确保了数据从发送端到接收端的可靠传输。
TCP协议确保了数据的可靠传输,即使在网络状况不佳的情况下也是如此,因此server端能收到。
如果服务器端正常工作并收到了数据,它应该会发送确认信息给PC端。然而,如果服务器端出现问题或网络状况不佳,可能不会发送确认信息。
(3)TCP连续重传失败后,主机PC的客户端进程作出了什么处理?
1.增加超时时间:客户端可能会增加等待确认的时间,以便给服务器更多的时间来响应。
2.尝试其他服务器:客户端可能会尝试连接到其他可用的服务器,以找到一个可以成功通信的服务器。
3.报告错误:如果重传失败次数超过了预设的阈值,客户端可能会向用户报告一个错误消息,说明无法与服务器建立连接。
4.记录日志:客户端可能会在日志中记录错误信息,以便后续分析和故障排除。
5.关闭连接:在连续的重传失败后,客户端可能会选择关闭连接并释放资源。
练习5 连接不存在的端口
1.主机PC启动wireshark协议分析软件,设置过滤条件(host 192.168.8.10 and tcp),其中HOST后的地址是server方的IP地址,选择网络接口为本地连接设备,点击“开始一个新的抓包”按钮,进入数据包捕获状态。
2. 主机PC启动tcpCSTool下的sokit.exe工具。
(1)主机server不启动sokit.exe工具,或者启动sokit.exe工具但不启动TCP服务器侦听。
(2)主机pc下选择客户机,TCP地址为(1)中 server的IP,端口为server中不存在的端口,点击[TCP连接]按钮进行连接。
(4)在PC的wireshark窗口中观察抓到的数据包,并分析:pc向server发出连接请求后,是否收到了server的确认?收到的是什么样的确认信息?
六、思考问题
1.连接建立阶段的第一次握手是否需要消耗一个序号?其SYN报文段是否携带数据?为什么?第二次握手呢?
在TCP(传输控制协议)中,连接建立阶段涉及三次握手,而不是两次。以下是关于这三次握手的具体描述:
第一次握手:客户端发送一个SYN报文段到服务器,表示希望与服务器建立连接。SYN报文段不携带数据,但会消耗一个序号。这是因为在TCP中,序号是对每一个字节进行编号的,因此SYN报文段也消耗一个序号。
第二次握手:服务器收到SYN报文段后,会回应一个SYN-ACK报文段。这个报文段表示服务器已经收到了客户端的请求,并同意建立连接。SYN-ACK报文段也不携带数据,但它同样消耗一个序号。
第三次握手:客户端收到服务器的SYN-ACK报文段后,会发送一个ACK报文段作为回应,表示已经收到服务器的回应并同意建立连接。这个ACK报文段也不携带数据,但它同样消耗一个序号。
2.本实验中连接释放过程的第二、三次握手是同时进行的还是分开进行的?这两次握手何时需要分开进行?
在TCP连接释放过程中,第二次和第三次握手是分开进行的,而不是同时进行。这是因为TCP是一种可靠的传输协议,它需要确保数据传输的完整性和顺序。
在释放连接时,第二次握手(FIN报文段)和第三次握手(ACK报文段)需要分开进行的原因是,服务器在收到FIN报文段后,需要先确认收到这个报文段,然后再发送自己的FIN报文段。这样可以确保连接的释放是可靠的,并且可以避免数据传输过程中的混乱。
因此,第二次和第三次握手需要分开进行的情况是在TCP连接释放时。而在连接建立阶段,第一次、第二次和第三次握手是连续进行的,以建立可靠的连接。
3.本实验中连接释放阶段的第四次握手,PC向Server发送最后一个TCP确认报文段后,为什么不是直接进入CLOSED(已关闭)连接状态,而是进入CLOSING(正在关闭)连接状态?
在TCP连接释放阶段,第四次握手(ACK报文段)是客户端发送给服务器的最后一个确认报文段。在发送这个报文段后,客户端并不直接进入CLOSED状态,而是进入CLOSING状态。
这是因为TCP协议要求在发送完FIN报文段后,等待对方发送一个确认报文段(ACK报文段)后,才真正关闭连接。在CLOSING状态下,连接仍然处于打开状态,等待对方发送的确认报文段。
如果客户端直接进入CLOSED状态,而服务器还没有发送完数据或者还没有收到服务器的确认报文段,那么数据传输可能会出现混乱或者丢失。因此,TCP协议规定在发送完最后一个确认报文段后,需要等待对方的确认报文段,以确保连接的可靠关闭。