对于TCP三次握手,四次断开的一些个人理解

首先,什么是TCP?

TCP是传输控制协议(Transmission Control Protocol)的缩写,是一种面向连接的、可靠的、基于字节流的传输层通信协议。它是由IETF的RFC 793定义的,旨在适应支持多网络应用的分层协议层次结构1。 TCP在网络传输中起到了重要的作用,它确保了数据的可靠传输,使得数据能够在远程计算机之间创建连接。

以上是百度词条对TCP的诠释,可以一点一点理解。

 面向连接:是在传输数据前将进行三次握手来进行端到端的虚链路。

三次握手

在TCP协议中,通信双方将通过三次TCP报文,实现对信息的了解,并在此基础上建立一个TCP连接,而通信双方的三次TCP报文段的交换过程就叫三次握手。

fef3947a85af4487b685686cf818d304.png

             TCP三次握手示意图

第一次握手:

客户端发送一个数据包,询问对方是否能与对方建立连接,我们称这个数据包为SYN包,并随机产生一个值seq=j,这个数据包传输到服务器,客户端进入SYN_SENT状态,等待服务器回应;

第二次握手:

服务器收到syn包,必须确认客户端的SYNack=j+1),同时自己也发送一个SYN包(值为seq=k)确认请求,即SYN+ACK包,此时服务器进入SYN_RECV状态。

第三次握手:

客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),两方检查ACK包和ack值,如果没有问题,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,三次握手完成。

为什么是三次握手?

原因就是为了相互确认对方的序列号。

完成三次握手后,TCP协议为每一个连接都建立了一个发送缓冲区,建立连接后,第一个序列号为0,从第一个序列号开始,后面每个字节的序列号会增加1。发送数据时,会从发送缓冲区取一部分数据组成发送报文,其中会附带序列号和长度。另一边在接收到数据后,会回复确认报文,在确认报文中,ack=序列号+长度,这是下一数据包要发送的起始序列号。

这样的发送方式能使发送端确认发送的数据被接收端接收。发送端也可以一次发送多个数据片段。如果丢失了其中一些数据包,接收端可以要求重传,这时接收端发送的ack就等于缺失部分起始序列号。这个过程不分发送端和接收端,TPC连接是全双工的。

四次断开

处于连接状态的客户端和服务端都可以发起断开连接请求。

1b8299e117624f0483825ffe91a19717.png

              TCP四次断开示意图

第一次断开:

 当客户端通知TCP数据已经发送完毕时,TCP向服务端发送一个带有FIN附加标记的报文段(FIN表示英文finish),表示要求关闭连接,然后进入等待一状态。

第二次断开:

服务端收到这个FIN报文段之后,并不立即用FIN报文段回复客户端,而是先向客户端发送一个确认序号ACK,表示自己进入了关闭等待状态,同时客户端进入了等待二状态。

第三次断开:

服务端说我要彻底的关闭连接,向客户端发送一个FIN报文段,进入最后确认状态。

第四次断开:

客户端收到这个FIN报文段后,向服务端发送一个ACK包,进入超时等待状态,时间到了之后自动关闭;服务端收到ACK包后立刻关闭连接。

超时等待是为了确认对方已经收到ACK包。

至此TCP四次断开结束。

一些专业术语:

  1. IETF:国际互联网工程任务组(The Internet Engineering Task Force)是一个公开性质的大型民间国际团体,汇集了与互联网架构和互联网顺利运作相关的网络设计者、运营者、投资人和研究人员。
  2. RFC:是一系列以编号排定的文件。文件收集了有关互联网相关资讯,以及UNIX和互联网社群的软件文件。RFC 793是传输控制协议。
  3. syn:请求同步。
  4. ack:确认同步。
  5. seq:发送自己的数据。
  6. FIN(ISH):为TCP报头的码位字段,该位置为1的含义为发送方字节流结束,用于关闭连接。
  7. 报文:数据包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TCP (Transmission Control Protocol) 是一种基于连接的、可靠的传输层协议,它的通信过程包括三次握手建立连接和四次挥手关闭连接。 **三次握手(Three-way Handshake)**: 1. **SYN(同步序号)阶段**:客户端发送一个 SYN 包到服务器,请求建立连接,包中包含随机生成的初始序列号(seq)。 2. **ACK(确认应答)阶段**:服务器接收到 SYN 包后,回应一个 SYN+ACK 包,确认序列号(ack),并设置自己的初始序列号(seq)。 3. **FIN(结束连接)阶段**:当服务器准备好接收数据后,会发送一个 FIN 包给客户端,表明它已经不再需要进一步的数据了。此时连接还未完全关闭,客户端还会等待一段时间后再发送一个 ACK 包确认关闭。 **四次挥手(Four-way handshake)**: 1. **FIN(结束连接)阶段续**:客户端收到服务器的 FIN 包后,如果还有未发送的数据,则先发送一个 ACK 包确认,然后发送自己的 FIN 包,表示客户端也准备断开连接。 2. **ACK(确认应答)阶段续**:服务器收到客户端的 FIN 包后,回复一个 ACK 包确认,并进入半关闭状态。 3. **FIN(结束连接)阶段再续**:服务器等待一段时间后,如果没有新的数据传输,再发送一个 FIN 包给客户端,正式断开连接。 4. **ACK(确认应答)阶段终结**:客户端接收到服务器的 FIN 包后,发送最后一个 ACK 包,至此,整个连接才真正关闭。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值