TCP 协议详解(六)-- TCP连接控制(三次握手与四次挥手)-面试高频

前言

TCP(Transmisson Control Protocol)又叫传输控制协议作为传输层最重要的协议,对于信息的可靠传输有着重要的意义,针对这一协议的攻击也数不胜数,这里就对这一协议以及相关内容进行详细的总结,将从以下几个方面进行介绍。
本文以韩立刚老师的《计算机网络》网课为基础,感兴趣的话可以私信我要资料
在各种计算机行业的岗位面试时,三次面试和四次挥手都是高频考点,下面仔细的介绍一下

1. 建立连接时的三次握手

拿我用ethereal抓到的一系列包的前三个做例子,第一个为:
在这里插入图片描述
由图可知,client先向服务器发送了一个tcp包,其中两个标志位分别为ACK:0,SYN:1,序列值Seq设为0,确认号此时是无效的,也默认为0,长度为0,也就是说不传送任何有效数据,只是建立连接,协商MSS等数据,此时只有SYN置为1,其他都没有意义,这是第一次握手。
第二个包为:
在这里插入图片描述
接着服务器做出响应,发出的TCP报文将ACK标志位置为1,这样确认号就有了意义,为了向客户端表明自己收到了这个连接请求,将对方发来的Seq加上1也就是0+1=1作为确认号(ack)发回给客户端,同时SYN置为1,也向客户端发送长度为0的序列。这是第二次握手。
第三个包为:
在这里插入图片描述
客户端在收到响应包以后,为了向服务器表明自己收到了这个响应,在对方发来的seq基础上加上1也就是0+1=1作为ack值发换回对方,然后根据对方的确认号,发送Seq为1的值 ,此时已经完成了同步,SYN已经失去了作用,故在后来传输数据的过程中一直置为0

大家也看到了,关于ACK和ack, 1和0的问题,搞得是不是脑壳疼,其实这都是表示不严谨和数值选择不合适导致的,下面我将对其进行严格的区分,选择不那么容易混淆的数字进行讲解,和大家一起掌握这个重要的知识点
大家首先要搞明白的是ACK和ack,虽然只是大小写的不同,好多讲解中都没有说清楚,这里的ACK是标记位中的值,它是个布尔值,只能是0或者1,而ack是确认号,其表示的是对于信息的确认,是对方发来的序列号+1得到的值,你可以理解成是催着对方接着发这个序列的数据,其是一个整数。
还有就是在这三次握手中的1和0太混乱,我举得例子中就是这样,那么我们就假如发送方和接收方第一次发送的序列值不是0,而是88和10(随便)

在这里插入图片描述
这样应该更加好理解了。
当有网络流量时,大家用netstat -n命令可以查看到各种状态,如下:
在这里插入图片描述

2. 断开连接时的四次挥手

  1. 第一次挥手
    在这里插入图片描述
    A主动向B发送结束报文,将FIN标志位置为1,序号为u,等待B确认。
  2. 第二次挥手
    在这里插入图片描述
  3. 第三次挥手
    在这里插入图片描述
  4. 第四次挥手
    在这里插入图片描述
    其各阶段状态如下:
    在这里插入图片描述
    这里有一点需要说明,那就是A的TIME-WAIT,需要等待一段时间(2MSL)才能释放连接,原因有两点:1.为了保证A发送的最后一个ACK报文段能够到达B计算机,丢失了的话也可以利用这段时间重传,如果没有这段时间的话,A发出的最后一个ACK报文段如果丢失以后,B就一直处在LAST-ACK状态,这个连接也就不能完全释放
    2.保证这个连接内所有的报文段都在网络上失效,这样下一个新的连接就不会出现这个连接的请求了。

猜你喜欢

转载自blog.csdn.net/qq_29566629/article/details/106124581
今日推荐