TCP 3次握手4次断开,可靠机制详解

目录

1>.三次握手建立连接

2>.四次挥手关闭连接

3>.窗口值如何实现流控的过程


由于TCP要提供可靠的通信机制,在传输数据之前,必须先初始化一条客户端(请求端)到服务器(被请求端)的TCP连接,在连接正式建立后,双方经TCP连接通道进行数据传输。

1>.三次握手建立连接

理论上建立传输连接只需一个请求和一个响应。但是,实际网络通信可能导致请求或响应丢失,可采用超时重传解决此问题,即请求或响应的丢失会造成定时器超时溢出,客户端将被迫再次发起连接请求,通过重传连接请求来建立连接。但这又有可能导致重复连接的问题。为避免这些问题,在建立TCP连接时采用三次握手方法。该方法要求对所有报文段进行编号,每次建立连接时都产生一个新的初始序列号。整个连接建立过程如图所示,具体解释如下。

img

(1)客户端(作为源主机)通过向服务器(作为目的主机)发送 TCP 连接请求(又称 SYN段),其中标志SYN=1,ACK=0;序列号为客户端初始序列号(简称ISN);目的端口号为所请求的服务对应的端口;还包括最大段长度(MSS)选项。这个SYN段不携带任何数据,但是它消耗一个序列号。这一步客户端执行主动打开(Active Open)。

(2)服务器在指定的端口等待连接,收到TCP连接请求后,将回应一个TCP连接应答(又称SYN/ACK段),其中标志SYN=1,ACK=1;序列号为服务器初始序列号;确认号为客户端初始序列号加1;目的端口号为客户端的源端口号。这个SYN/ACK段不携带数据,但消耗一个序列号。这一步服务器执行被动打开(Passive Open)。

(3)客户端再向服务器发送一个 TCP连接确认报文(又称 ACK 段),其中标志 SYN=0,ACK=1;序列号为客户端初始序列号加1;确认号为服务器的初始序列号加1。一般来说,这个 ACK 段不携带数据,因而不消耗序列号。某些实现中,该段可以携带客户端的第1个数据块,此时必须有一个新的序列号来表示数据中的第1个字节的编号。

经过上述3次握手后,TCP连接正式建立。双方都置ACK标志,交换并确认了对方的初始序列号,可以通过连接互相传输数据。

2>.四次挥手关闭连接

建立一个连接需要 3 次握手,而终止一个连接要经过 4 次挥手。这是由 TCP 的半关闭(half-close)造成的。由于一个TCP连接是全双工的(即数据在两个方向上能同时传递),因此每个方向必须单独进行关闭,当一方完成它的数据发送任务后就能发送一个FIN段(应用层关闭连接就要求TCP发送FIN段)来终止该方向的连接。当一方收到一个FIN段,它必须通知应用层对方已经终止了该方向的数据传送,此时它自己仍然能够向对方发送数据。首先进行关闭的一方执行主动关闭,而另一方执行被动关闭。整个连接关闭过程如图所示,具体说明如下。

img

(1)客户端发送一个FIN段,主动关闭客户端到服务器的数据传送。

(2)服务器收到这个 FIN 段之后就向应用程序传送一个文件结束符,再给客户端发回一个ACK段,确认号为所收到的序列号加1。与SYN一样,一个FIN将占用一个序列号。

(3)服务器被动关闭与客户端的连接,发送一个FIN段给客户端。

(4)当客户端收到服务端发送的FIN段,就必须发回一个确认(ACK段)以证实从服务器收到了FIN段,并将确认号设置为所收到的序列号加1。

3>.窗口值如何实现流控的过程

TCP传输可靠性主要依据:排序,确认,重传,流控----滑动窗口机制

img

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网工blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值