和TCP三次握手和四次挥手做朋友

70 阅读3分钟

TCP三次握手和四次挥手

tcp三次握手请求一般都是客户端发起的,四次挥手可以由双方任意一方开启。

第一步:客户端发起第一次tcp请求报文,请求报文,内容包含本次请求特定的序号 X;并将SYN (Synchronization)同步码设为1,表示请求同步。

客户端说:hello,服务器老大,我是小A,序号8633,希望建立链接,收到请回复!

第一步:服务端收到客户端的同步请求报文,获取到客户端的特定序号X(以此区分不同的客户端)。服务端 发送第二次tcp报文,响应报文。内容包括 服务端的特定序号(根据客户端信息进行特定算法获得)Y;同 时将SYN 同样设为1,并发送ACK(Acknowledgment)确认码X+1(根据接收到的客户端序号加1); 表示已经收到请求报文。

此时服务端确认了自己的接收能力正常

服务端说:收到,小A。同意链接,我的序号是303,确认号8634,收到请回复!

第三步:客户端收到服务端响应报文,获取到了服务端的特定序号。客户端此时再发送第三次tcp报文,内容包 括ACK参数 Y+1。

收到服务端响应报文时,客户端明确了自己的发送能力和接收能力都正常 .

并且当服务端收到客户端的第三次报文时,确定了自己的发送能力正常。

客户端说:收到,服务器老大。我的序号8634,确认号304。建立链接。

第一次:客户端发起断开连接请求报文,报文内容包括 FIN(finish)结束码为1,ACK为之前累积的确认码 X。

客户端说:服务器老大,咱们断开链接吧

第二次:服务端收到断开请求,发送第二次报文,响应报文。内容包括 ACK确认码X+1,向客户端表示已经收到了断开服务的请求。

服务端说:客户端,我收到你的断开请求了。稍等一下,我看还有没有数据没传完,等确认了通知你!

但客户收到确认报文后还不能断开,因为这次断开请求是客户端发起的,客户端无法确定服务端是不是还有没有发完的响应数据。所以需要等待一段时间,等待服务主动通知。(如果服务端超过指定时间没有确认响应,客户端也会主动断开

第三次:服务端确定没有需要发送的数据了,发送第三次报文,内容包括ACK 确认码 Y,FIN 结束码 1.。

服务端说:客户端客户端,我这边数据传完了,可以断开连接了。

第四次:客户端收到服务端发起的接收请求,发送第四次报文,内容包括刚刚收到的确认 Y+1。

服务端说:好的,那断开连接了。谢谢服务器老大。


图片来自B站知名up主技术蛋老师: 【TCP三次握手和四次挥手】 www.bilibili.com/video/BV18h…