TCP的握手

TCP的握手主要有两个:建立连接时的三次握手、释放连接时的四次握手

首先理解下TCP协议中用到的几个关键字:

tcp关键字

最常用的是SYN(发起连接时的同步序列号)、ACK(确认包的接收)、FIN(结束连接)、RST(重置连接、通知双方马上关闭连接)

一、建立TCP连接的三次握手:

示意图:

tcp连接的建立

  1. 首先由某一方主机主动发起连接(C/S架构中通常时Client发起),发送SYN命令同时附带值为x的序列号;
  2. 另一端收到这个连接请求之后,会回复一个SYN命令同时附带值为x+1的ACK(表明x+1之前不包括x+1的所有值都收到了,下一次再发应从x+1开始发),同时附带自己的一个值为y的序列号;
  3. 然后这边再收到之后,回复一个ACK=y+1的表明收到了对方的SEQ=y,同时附到自己的序列号SEQ=x+1。当这个包发出去之后,其会同步开启本方的连接
  4. 另一端收到这个包之后,不再回复确认包,直接开启本方的连接,由此,双方都各自开启了连接,一个TCP连接由此形成。下面就可以全双工地发数据了。

二、释放TCP连接的四次握手:

示意图:

tcp连接的释放

  1. 首先,由host1主动发起结束连接的请求,发送FIN包以及SEQ=x的序列号,注意,这之后host1不会再发送data,单仍会接收data
  2. host2接收到来自host1的请求之后,回复一个ACK包,但并不会发送SEQ,要等到下一次发包,这是因为host2本机可能仍有数据没发完给host1,所以需要一些时间来进行这些殿后的处理
  3. host2把殿后的工作处理完了,发送一个FIN包附带SEQ=y,告诉host1我已经准备好了可以释放连接了,这之后host2页不再发送数据
  4. host1接收到来自host2的FIN包之后,回复一个Ack=y+1的ACK包,然后再等待一个timeout wait时间之后才正式关闭连接(这个timeout是用来防止来自host2的包在网络中延迟稍晚才来到)
  5. host2接收到这个ACK包之后也正式关闭TCP连接,至此,TCP连接完全关闭(释放)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux TCP握手时间可以分为三个阶段:建立连接、数据传输和关闭连接。 首先是建立连接的握手过程。在客户端想要与服务器建立TCP连接时,它会发送一个SYN(synchronize)报文给服务器,并进入SYN_SENT状态。服务器接收到SYN报文后,会发送一个SYN-ACK(synchronize-acknowledge)报文作为响应,并进入SYN_RECV状态。最后,客户端收到SYN-ACK报文后,发送一个ACK(acknowledge)报文给服务器,确认连接建立。整个握手过程耗时通常为1个RTT(Round-Trip Time)。 接下来是数据传输阶段。一旦建立了连接,客户端和服务器可以开始进行数据传输。TCP使用滑动窗口协议来控制发送和接收缓冲区的大小,以便进行流量控制和拥塞控制。在这个阶段,具体的时间取决于数据传输的大小和网络状况。同时,为了保证数据的可靠传输,TCP还会进行数据的分段与重组,因此可能会有一定的时间延迟。 最后是关闭连接的握手过程。当客户端或服务器想要关闭连接时,它会发送一个FIN(finish)报文给对方,并进入FIN_WAIT状态。接收到FIN报文的一方会发送一个ACK报文作为回应,并进入CLOSE_WAIT状态。当另一方收到ACK报文后,会发送一个FIN报文作为确认,并进入LAST_ACK状态。最后,接收到确认的一方会发送一个ACK报文来关闭连接。整个关闭过程通常需要1个RTT的时间。 总之,Linux TCP握手时间取决于网络延迟、拥塞控制和数据传输的大小。这些因素都可能导致握手过程的时间延长。同时,根据具体的应用场景和需求,还可以通过调整TCP的参数来优化握手时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值