TCP的三次握手

Posted wan_ghuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP的三次握手相关的知识,希望对你有一定的参考价值。

第一次握手

客户端调用connect,向服务端发送连接请求报文。该报文是一个特殊报文,报文首部同步位SYN=1,同时确认位ACK=0,seq=x表示确认字段的值为x,该字段值由客户端选择,表示客户端向服务端发送数据的第一个字节编号为x+1。连接报文发送后,客户端的TCP连接状态由CLOSED转为SYN_SENT。

服务端调用accept,从lisent的连接请求队列中取出一个连接请求,并为之创建套接字和分配资源,开始建立连接。服务端的TCP连接状态由LISENT转为SYN_RCVD。

QQ截图2

第二次握手

服务端为连接分配资源,同意连接,向客户端发送SYN=1的确认报文。ACK=1表示确认号字段ack的值有效,ack=x+1表示希望收到第一个字节编号为x+1的若干数据,seq=y表示服务端向客户端发送数据的起始字节编号为y+1。客户端收到确认,TCP连接状态由SYN_SENT转为ESTABLISHED。

第三次握手

客户端TCP连接状态转为ESTABLISHED,立即向服务器发送确认报文,connect函数返回,连接建立成功。

服务端收到客户端的确认报文,TCP连接状态由SYN_RCVD转为ESTABLISHED,accept函数返回。

至此一个连接的三次握手结束,连接建立,客户端可以和服务端进行可靠通信。

以上是关于TCP的三次握手的主要内容,如果未能解决你的问题,请参考以下文章

TCP协议的三次握手漏洞问题!

TCP 连接三次握手、四次挥手

TCP的三次握手和四次挥手

图解TCP的三次握手和四次挥手(简单明了)

HTTP中的TCP三次握手-详细解析(TCP ConnectionTCP的三次握手介绍为什么创建TCP三次握手)

关于TCP的三次握手和四次挥手及其衍生问题