TCP连接管理机制(三次握手、四次挥手),结合表白、分手更容易理解哈。

1.导读:

本篇文章主要讲的是TCP中的连接管理机制(三次握手,四次挥手全过程以及原理。)

2.TCP 数据格式:

在这里插入图片描述
这里先不细讲格式内部的所有参数的具体含义,我们为了后边方便进行TCP三次握手四次挥手的讲解,先重点关注我图中用红笔圈出的部分(ACK、SYN、FIN)

  • ACK:表示的是确认应答,看确认号是否有效。
  • SYN:表示请求建立连接,将携带SYN的报文叫做同步报文段
  • FIN:表示通知对方,本端将要进行关闭,将携带FIN的报文叫做结束报文段

3.什么是连接,为什么建立连接:

  • 这里的连接指的是客户端和服务端之间的一种双方都能保持连接状态的一种连接,是有方向性的。只有双方的连接都建立好才能表示真正的连接成功。
  • 下边用一张图来表示。
    在这里插入图片描述

4.三次握手(表白的全过程):

(1)是什么:

  • 握手嘛,不就是相互见面,相互了解的过程,也就是建立连接的过程。

(2)三次握手全过程:

  • 先上图:连接的操作过程分为三步,如下图所示。
    在这里插入图片描述
    (1)第一次握手:
  • 做的事情:图中绿线表示。进行的操作是,A请求与B建立连接。具体是A发送SYN + SEQ_NO[序号]到B。这里只是尝试的请求建立连接,A到B的连接是否建立成功还不知道。
  • 形象理解:你遇到了一个女神,你在向她表白,你说:“我能做你男朋友吗?”你只是尝试着向女神进行表白,是否成功还不知道,要等女神的反馈。此时情侣关系还没有确定。

(2)第二次握手:

  • 做的事情:拿图中的紫线表示。进行的操作是B在收到A的请求建立连接之后,B进行响应并请求与A建立连接。具体是B给A返回ACK + SYN + SEQ_NO +1。这里B给A的ACK响应就表示B同意A跟它建立连接。SYN表示B也想尝试A建立连接,此时B到A的连接是否建立还不确定。
  • 形象理解:你表白之后,你的女神同意了。在实际表白中,这时的关系就已经确定了,但是计算机中不同。在计算器中,女神同意之后,它尝试喜欢你并问道:“你能做我男朋友,那我能做你女朋友吗?”。此时你还没有回答呢,此时情侣关系也没有确定。

(3)第三次握手:

  • 做的事情:图中的蓝线表示。A在接收到B发送来的SYN请求之后做出ACK响应。具体就是A给B发送ACK响应。在B收到A的响应之后,此时双方的连接正式建立。
  • 形象理解:上边不是女神,问她能喜欢你吗。此时你回应了,并说道“你能做我女朋友”。在女神收到这句话之后你两的关系就确认了。这种关系是双方都在线保持的,双方都通畅的。

(3)注意点:

  • 为啥不是两次握手?:原因为真正连接的建立要是双方都建立到对方的连接。要是只有两次握手,只能保证A到B建立好了连接,但是B请求A建立连接是否成功还不确定。要是没有第三次握手,A就不会给B发送数据,这时B就会一直等待,会浪费资源。

  • 半连接队列: 在建立连接的过程中,当发送了请求但是双发还没有真正建立连接时,服务器会把处于这种状态的未完成的连接专门放在一个队列里边,此时存放这些没有真正建立连接的队列叫做半连接队列。当然,连接真正建立好的连接会放在一个队列里,这时的队列就叫做全连接队列。

  • 发送连接时可否携带数据:第一次和第二次的时候不能携带数据,因为要是第一次能携带数据,那些想恶意攻击服务器的人会在每一次都给连接里边存放大量数据,就会加大服务器处理数据的能力,浪费时间和内存。第三次是可以携带数据的。

5.四次挥手(分手的全过程):

(1)是什么?

  • 挥手字面值理解就是告别了、离开了的意思。因此挥手表示的是连接的断开过程。

(2)四次挥手全过程:

  • 先上图:
    在这里插入图片描述
    (1)第一次挥手:
  • 做的事情:客户端发送FIN给服务端,尝试请求断开单方的连接。此时单方连接断开与否还不能确定,要等服务端确认,因此此时的客户端处于FIN_WAIT1状态
  • 形象理解:由于某种原因,你想进行分手。你去给你对象说道:“不好意思,我不能给你幸福,我们分手吧”。此时你们双方的关系还是存在的,因为你对象还没有给答复。

(2)第二次挥手:

  • 做的事情:服务端收到断开请求后,服务端向客户端发送ACK回应,表示能断开了。此时只是客户端到服务端连接断开,处于半断开状态。服务端为:CLOSE_WAIT状态。
  • 形象理解:你对象听到你说分手的话后,她说:“好吧,谢谢你这么多年的陪伴。”。注意此时只是你单方面和她没有关系了,她和你的关系还在。

(3)第三次挥手:

  • 做的事情:服务端给客户端发送FIN请求,此时服务端处于最后一次确认状态(LAST_ACK状态)。此时还是没有断开连接,还得等待客户端回应。
  • 形象理解:上边说道,第一第二次挥手是你和她的关系断了。这里第三次挥手表示,你女朋友同意你能和她分手并问道:“我觉得我也不能给你温柔体贴,我们分手吧”。此时,她和你的关系还没有断开,还要等你的回复。

(4)第四次挥手:

  • 做的事情:客户端给服务端发送ACK回应。服务端收到之后,此时连接真正断开。
  • 形象理解:你听到她说的话之后,你说到:“好吧,往后余生,各自安好”在这个是时候,不管是你和她的关系还是她和你关系都断开了。此时你们两个此时真正分手了。

(3)注意点:

  • 1.为什么要进行四次挥手,三次行不行?:
    解析:首先四次挥手是必然的。ACK报文是用来的应答的,SYN报文是用来同步的。在服务端收到客户端的FIN之后,很大可能不会立即关闭SOCKET,所以先发送一个ACK回应。等服务端的数据发送完成之后,才会再次向哭护短发送FIN。因此两个不能合并。四次挥手不能删减。
  • 2.后边客户端在发送完ACK之后为什么要进行等待,等待的时间是多长?
    解析:因为最后客户端在给服务端发送ACK的时候,可能出现丢包情况,等待时间是2MSL(超时重传时间)。要是不等待,如果丢包的话就不能处理了。

好了,今天就和大家分享到这里,希望有所帮助

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值