HYN慢慢琢磨一些技术。。。
首页/文章列表/TCP连接三次握手、四次挥手/
TCP连接三次握手、四次挥手
2020-08-13 06:38:49 Web 162人阅读

先来几个名词解释:

TCP:Transmission Control Protocol ;

TCP报文:TCP segment;

标志位:Flags;

三个重要的标志位:SYN、ACK、FIN

ACK - 应答响应,表示确认号(acknowledge number)有效。确认应答的字段有效。TCP规定除了最初建立连接时的SYN包之外该位必须设置为1。

SYN - 同步; 表示开始会话请求,用来发起一个连接,建立连接。SYN为1表示希望建立连接,并在其序列号的字段进行序列号初始值的设定。(Synchronize本身有同步的意思。也就是意味着建立连接的双方,序列号和确认应答号要保持同步) 。

FIN - 结束; 结束会话,关闭连接。表示发送方完成任务,今后不会有数据发送,希望断开连接。当通信结束希望断开连接,通信双方的主机之间就可以相互交换FIN位置为1的TCP段。每个主机又对对方的FIN包进行确认应答以后就可以断开连接。

seq(sequence number)序列号:代表在发送方,这个报文中数据部分的第一位应该在整个data stream中所在的位置。

ack(acknowledge number)确认号:表示的是期望的对方(接收方)的下一次sequence number是多少。

注意,SYN/FIN的传输,虽然没有data,但是会让下一次传输的seq增加一,但是,ACK的传输,不会让下一次的传输eq加一,体现在三次握手的第三阶段,👇🏻👇🏻👇🏻。

三次握手:

1、发送方发出报文:标志位SYN=1,seq(序号,int32)=ISN(initial sequence number)生成器生成随机一个,设为x

2、接收方收到报文后,发出回复的报文:SYN=1,ACK=1,seq=y(也是随机生成的),ack(确认号) = x+1(上一个报文没带数据,只带标志位,长度为1)。

3、发送方收到报文,发出回复报文:ACK=1,seq=x+1,ack=y+1,同时可以携带数据了。三次握手完成。

四次挥手:

1、发送方主动结束,发送报文:FIN=1,seq=x(系统里总会有一个当前的序号,拿上就是了);

2、接收方收到请求,进入close-wait状态,并发出报文,ACK=1,seq=y(理由同上),ack=x+1;此时接收端还将继续发送未发送完的数据。

3、接收方数据传输完成后,再发送FIN报文:FIN=1,seq=y+z(发送了数据嘛,数据长z),ack=x+1。

4、发送方接收到FIN报文,立即发送报文ACK=1,seq=x+1,ack=y+z+1;发送报文后,进入time-wait状态,等待2MSL(Maximum Segment Lifetime)时间后,依然没有收到回复,则证明接收方已正常关闭,那么发送方也可以关闭连接了。而接收方在收到针对FIN报文的ACK报文后,立即关闭连接。

收到4次挥手到此结束

前端~
文章目录
三次握手:
四次挥手: