tcp的三次握手四次断开

三次握手

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收机能正常。

第一次

第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认

第二次

第二次握手:服务器收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

第三次

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手

 

 

客户端调用 socket() 函数创建套接字后,因为没有建立连接,所以套接字处于CLOSED状态;服务器端调用 listen() 函数后,套接字进入LISTEN状态,开始监听客户端请求。

这个时候,客户端开始发起请求:

当客户端调用 connect() 函数后,TCP协议会组建一个数据包,并设置 SYN 标志位,表示该数据包是用来建立同步连接的。同时生成一个随机数字 1000,填充“序号(Seq)”字段,表示该数据包的序号。完成这些工作,开始向服务器端发送数据包,客户端就进入了SYN-SEND状态。

服务器端收到数据包,检测到已经设置了 SYN 标志位,就知道这是客户端发来的建立连接的“请求包”。服务器端也会组建一个数据包,并设置 SYN 和 ACK 标志位,SYN 表示该数据包用来建立连接,ACK 用来确认收到了刚才客户端发送的数据包。

服务器生成一个随机数 2000,填充“序号(Seq)”字段。2000 和客户端数据包没有关系。

服务器将客户端数据包序号(1000)加1,得到1001,并用这个数字填充“确认号(Ack)”字段。

服务器将数据包发出,进入SYN-RECV状态。

客户端收到数据包,检测到已经设置了 SYN 和 ACK 标志位,就知道这是服务器发来的“确认包”。客户端会检测“确认号(Ack)”字段,看它的值是否为 1000+1,如果是就说明连接建立成功。

四次断开

第一次断开:

主动方发送FIN报文,并置发送序号为u。

第二次断开:

被动方发送ACK报文,并置发送序号为v,在确认序号为u+1。

第三次断开:

被动方发送FIN+ACK报文,并置发送序号为w,在确认序号为u+1。

第四次断开:

主动方发送ack报文,并置发送序号为u+1,在确认序号为w+1。

TCP4次断开

    TCP四次断开即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。

TCP4次断开详解

     第一次断开:主动关闭方会发送一个包,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在这个包之前发送出去的数据,如果没有收到对应的确认字符确认报文,主动关闭方依然会重发这些数据),但主动关闭方还可以接收数据。

     第二次断开:被动关闭方收到包后,发送一个确认字符给对方,确认序号为收到序号+1。

     第三次断开:被动关闭方发送一个包,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

     第四次断开:主动关闭方收到包后,发送一个确认字符给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值