从01开始 从01开始
首页
  • 计算机科学导论
  • 操作系统
  • 计算机网络
  • 关于本站
  • 网站日记
  • 赞赏支持
  • 如何搭建一个博客
  • 如何搭建一个邮箱
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 操作系统
  • 计算机网络
  • 关于本站
  • 网站日记
  • 赞赏支持
  • 如何搭建一个博客
  • 如何搭建一个邮箱
GitHub (opens new window)
  • 计算机科学导论

  • 操作系统

  • Linux

  • 编译原理

  • 计算机网络

    • 计算机网络微课堂-B站教书匠

    • 计算机网络微课堂-实验手册

      • 实验0 安装PacketTracer
      • 实验1 访问WEB服务器(加深对网络体系结构的理解)
      • 实验2 MAC地址,IP地址,ARP协议
      • 实验3 总线型以太网的特性(广播,竞争总线,冲突)
      • 实验4 集线器和交换机的区别
      • 实验5 交换机的自学习算法
      • 实验6 生成树协议STP的功能
      • 实验7 虚拟局域网VLAN
      • 实验8、9、10 IPv4地址 分类地址,划分子网、构造超网
      • 实验11 IP数据报的发送和转发流程
      • 实验12 默认路由和特定主机路由
      • 实验13 静态路由配置错误导致的路由环路问题
      • 实验14 聚合了不存在的网络导致的路由环路问题
      • 实验15 网络故障导致的路由环路问题
      • 实验16 路由信息协议RIP
      • 实验17 开放最短路径优先OSPF
      • 实验18 边界网关协议BGP
      • 实验19 网际控制报文协议ICMP的应用
      • 实验20 运输层端口
      • 实验21,22,23 VLAN
      • 实验24 TCP的运输连接管理
      • 实验25 动态主机配置协议DHCP的作用
    • 计算机网络
  • 数据库

  • 计算机基础学习路线
  • 计算机基础
  • 计算机网络
  • 计算机网络微课堂-实验手册
2022-10-24

实验24 TCP的运输连接管理

# 实验24 TCP的运输连接管理

下面我们来进行一个仿真实验,本仿真实验的目的在于验证TCP使用三报文握手来建立连接,使用四报文挥手来释放连接。

我们首先来构建一个非常简单的网络拓扑,只需要一台普通的主机和一台普通的服务器,然后将它们直连即可,选择这里的终端设备,然后拖动一台普通的主机到逻辑工作空间,再拖动一台普通的服务器到逻辑工作空间,选择自动连线方式,将主机和服务器连接起来即可。

接下来给主机和服务器分别配置IP地址和地址掩码,点击主机在弹出窗口中选择桌面选项卡,配置的IP地址为192.168.0.1,默认子网掩码,255.255.255.0,不用修改
再来给服务器配置IP地址和地址掩码,点击服务器在弹出窗口中选择桌面选项卡,然后选择IP配置的IP地址为192.168.0.2,默认子网255.255.255.0,不用修改,

image.png

下面我们来检查一下物理拓扑以及之前的配置工作是否正常。点击主机在弹出窗口中选择桌面选项卡,然后选择网页浏览器,这样我们就打开了仿真软件为我们提供的一个简易的网页浏览器,在地址栏中输入服务器的IP地址,192.168.0.2,然后点击前往按钮或按下回车键,可以看到主机中的浏览器获取到了服务器中的网页内容,这就表明我们的配置工作都是正常的,可以进行下面的仿真实验了。

image.png

‍

‍

‍

‍

‍


对于本仿真实验,我们关心的是TCP的连接建立与释放的过程,至于和浏览器相关的HTTP协议,HTML语言等并不是本仿真实验的重点,您只需要知道本仿真实验所要实现的应用功能,在应用层需要使用HTTP协议,在运输层需要使用TCP协议即可。

接下来我们从实时模式切换到仿真模式,监听HTTP协议和TCP协议即可,我们再次点击浏览器中的前往按钮,来看看浏览器访问WEB服务器内容,TCP协议在其中所扮演的角色,可以看到主机现在准备发送一个数据包,我们点击该数据包来看看详细情况。由于HTTP协议需要使用运输层的TCP协议所提供的运输服务,而TCP又是面向连接的,也就是在数据传输之前必须首先建立逻辑连接关系,因此主机尝试与服务器建立TCP连接,我们来看看主机运输层的具体处理,设置TCP连接状态为同步已发送,然后准备一些协商参数,例如可接受的最大窗口值,使用最大报文段容量MSS选项等,发送TCP连接请求报文段,也就是这里显示的SYN报文段,该报文段首部中的SYN标志位被设置为一,首部中的序号字段的值为0,这是主机位自己选择的初始序号,请注意,这只是仿真软件给出的值,实践当中不一定是0,而是一个随机值。确认号ACK字段的取值为0,该字段的值对于本报文段而言其实没有意义,因为本报文段并不是一个确认报文段,这里的数据长度24是指该TCP连接请求报文段的总长度为24字节,由于TCP连接请求报文段不能携带数据,因此这24字节其实就是该报文段的首部长度,TCP首部有20字节的固定部分和最大40字节的选项部分构成,因此可知有四字节是选项部分,具体为三字节的最大报文段容量MSS选项和一字节的填充,使用一字节填充是为了使TCP首部长度能被四字节整除,您也可以点击出站PDU详情选项卡,来查看TCP封包的详情,我这里就不再赘述了。当然TCP连接请求报文段还要封装成IP数据报,IP数据报还要封装成以太网帧才能进行发送,为了把重点放在TCP上,后面我们就不再提及IP数据报和以太网帧的封装了,

image.png

‍

‍


点击这里的捕获前进按钮进行单步仿真,可以看到主机发送TCP连接请求报文段给服务器,点击该报文段。我们来看看服务器的处理情况,服务器收到该报文段后,解析出该报文段是TCP连接请求报文段,服务器接受连接请求,进入同步已接收状态,

image.png

‍

‍

‍


然后服务器准备给主机发回TCP连接请求确认报文段,也就是这里显示的SYN加ACK报文段,该报文段首部中的SYN标志位和ACK标志位都被设置为一,序号字段的值为0,这是服务器为自己选择的初始序号,请注意这只是仿真软件给出的值,实践当中不一定是0,而是一个随机值。
确认号ACK字段的取值为一,表明这是对TCP连接请求报文段的确认,因为报文段的序号为0,且不携带数据

image.png

‍

‍

‍


关闭弹出窗口,再次点击捕获前进按钮,可以看到服务器发送TCP连接请求确认报文段给主机,

image.png

‍

‍

点击该报文段。我们来看看主机的处理情况,主机收到该报文段后,解析出该报文段是TCP连接请求确认报文段,就要进入连接已建立状态

然后主机准备给服务器发回一个普通的TCP确认报文段,也就是这里显示的ACK报文段,该报文段首部中的ACK标志位被设置为一,序号字段的值为一,这是因为之前主机所发送的不携带数据的TCP连接请求报文段使用了序号0,因此主机现在发送的 TCP报文段的序号应该为一,确认号ACK字段的值为一,表明这是对TCP连接请求确认报文段的确认,因为报文段的序号为0,且不携带数据

image.png

‍

‍

image.png

‍

‍

‍

‍

‍


再次点击捕获前进按钮,可以看到主机发送普通的TCP确认报文段给服务器,点击该报文段,我们来看看服务器的处理情况,服务器收到该报文段后,解析出该报文段是对TCP连接请求确认报文段的确认,就要进入连接已建立状态,至此主机和服务器都已进入连接已建立状态,他们可以基于已建立好的TCP连接进行数据传输了,

image.png

‍

‍

‍


再次点击捕获前进按钮,可以看到主机发送HTTP请求报文给服务器,点击该报文可以看到HTTP请求报文使用TCP报文段来封装,并且报文段首部中的Push标志位为一,表明服务器应尽快地将该报文段交付给应用进程,而不再等到整个缓存都填满了,再向上交付。
ACK标志位为一,表明该报文段还对之前收到的TCP连接请求确认报文段进行了重复确认
序号字段的值为一,这是因为主机之前发送的普通TCP确认报文段的序号为一,它不携带数据也不消耗序号,
确认号ACK字段的值为一,这是对之前收到的TCP连接请求确认报文段的确认,因为报文段的序号为0且不携带数据,长度为100,表明该TCP报文段总长为100字节

image.png

‍

‍

服务器对收到的HTTP请求做出响应,构建出HTTP响应报文,使用TCP报文段来封装该HTTP响应报文,报文段首部中的序号字段的取值为一,这是因为服务器之前发送的 TCP连接请求确认报文段要消耗掉一个序号,当时选的初始序号为0,且不携带数据,那么现在服务器发送的 TCP报文段的序号就应该取一,确认号ACK字段的取值为101,这是对之前收到的封装有HTTP请求报文的TCP报文段的确认,因为报文段的序号为一,长度为100,因此确认号ACK应当取值为101,数据长度471,表明该TCP报文段总长为471个字节,

image.png

‍

‍

‍

‍

‍

image.png

‍

‍


再次点击捕获前进按钮,可以看到服务器发送HTTP响应报文给主机,主机收到该报文后进行解析,就可以显示出具体的网页内容了。现在主机和服务器间的应用层传输结束了

image.png

‍

‍

‍

主机要发起运输层TCP连接的释放,可以看到主机准备发送一个TCP报文段,点击该报文段查看其详细内容,主机设置TCP连接状态为终止等待一,并准备发送TCP连接释放报文段,也就是这里所显示的FIN加ACK报文段,该报文段首部中的FIN标志位和ACK标志位都设置为一,序号字段的取值为101,这是因为主机之前发送的封装有HTTP请求报文的TCP报文段的序号为一,且长度为100,
确认号ACK字段的取值为472,这是对所收到的封装有HTTP响应报文的TCP报文段的确认,因为报文段的序号为一,长度为471,

image.png

‍

‍

‍

‍

‍

再次点击捕获前进按钮,可以看到主机发送TCP连接释放报文段给服务器,点击该报文段。我们来看服务器的处理。
服务器解析该TCP报文段,发现这是TCP连接释放报文段,于是进入关闭等待状态。由于服务器此时也没有数据要发给主机了,于是又进入最后确认状态,请注意这与我们理论课讲解时稍有不同,理论课讲解时所举例子是处于关闭等待状态的服务器,还有数据要发给主机,

image.png

‍

‍

‍

处于最后确认状态的服务器,还要给主机发送TCP连接释放报文段,也就是这里所显示的FIN加ACK报文段,该报文段首部中的FIN标志位和ACK标志位都设置为一,序号字段的取值为472,这是因为服务器之前发送的封装有HTTP响应报文的TCP报文段的序号为一,长度为471,确认号ACK为102,这是对所收到的TCP连接释放报文段的确认,因为报文段的序号为101,且不携带数据

image.png

‍

‍

再次点击捕获前进按钮,可以看到服务器发送TCP连接释放报文段给主机,点击该报文段。我们来看主机的处理,主机解析带TCP报文段,发现这是TCP连接释放报文段,于是进入正在关闭状态,这相当于我们理论课中介绍的时间等待状态,也就是要等待一段时间才进入关闭状态。

image.png

处于正在关闭状态的主机,还要给服务器发送一个普通的TCP确认报文段,该报文段首部中的ACK标志位设置为一
序号字段的取值为102,这是因为主机之前所发送的TCP连接释放报文段的序号为101且不携带数据,那么现在主机发送的 TCP报文段的序号就应当为102,确认号ACK为472,这是对所收到的TCP连接释放报文段的确认,因为报文段的序号为472,且不携带数据

image.png

‍

‍

‍

‍

再次点击捕获按钮,可以看到主机发送普通的TCP确认报文段给服务器,点击该报文段,我们来看看服务器的处理,服务器解析该TCP确认报文段就要进入了关闭状态,一段时间后主机中的TCP也会进入关闭状态,那时TCP连接释放过程才彻底结束

‍

image.png

‍

‍

‍

TCP连接建立和释放的过程还是比较复杂的,尤其是三豹纹握手,四豹纹挥手所使用的7个报文段,其首部中的同步标志位SYN,终止标志位FIN,确认标志位ACK,序号字段,确认号字段的取值,以及这些报文段是否可以携带数据,非常容易弄错,建议在仿真实验的过程中把它们记录下来,以便搞清楚它们之间的关系。

最后还需要提醒您注意的是在我们的教学过程中,发现有的同学认为通过这里就可以看出TCP三报文握手建立连接,四报文挥手释放连接

image.png

但实际上这是不对的,这里的同一个TCP报文段可能出现在不同行,用来表示该报文段当前在哪个设备上,或该报文段是由哪个设备发往哪个设备,对于本地TCP释放连接,实际上只使用了3个报文段,而不是这里所显示的4个报文段

‍

在GitHub上编辑此页 (opens new window)
上次更新: 2022/10/31 23:45:48
实验21,22,23 VLAN
实验25 动态主机配置协议DHCP的作用

← 实验21,22,23 VLAN 实验25 动态主机配置协议DHCP的作用→

Theme by Vdoing | Copyright © 2022-2022 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式