TCP 三次握手原理详解

版权声明: https://blog.csdn.net/csdnwgf/article/details/82177791

三次握手过程详解

Three-Way Handshake 用来建立TCP连接。需要握手三次是确认连接的一种手段。

在socket编程中,三次握手的过程是由client执行connect触发。

第一次握手

Client将标志位SYN置1,并随机产生一个值seq=x,并将该数据包发送给Server,Client随即进入SYN_SENT状态,等待Server做出响应。

第二次握手

Server收到数据包后由标志位SYN=1知Client请求连接,如果Server准备好建立连接(即Server处于listen状态),Server随即将标志位 SYN 和 ACK 位均置1,为了标识服务端收到了Client的数据包,将Client发送的seq + 1 作为ack返回给Client,同时Server自己再生成一个随机数 y 赋给seq发送给Client。Server进入SYN_RCVD状态。

第三次握手

Client接收到数据包后,先检查ack是否为x+1,ACK是否为1。若是,则将标志位ACK置1,ack = y + 1,并将该数据包发送给Server(注意:上图中第三次握手没有seq,因为不再需要确认Server是否收到数据,在第二次握手时已经确认过了,图中有错)。Server检查ack是否为 y+1 ,ACK是否为1,如果均正确则连接建立成功。

Client与Server都进入ESTABLISHED状态,完成三次握手,随后两者之间可以开始通信。

其中,SYN与ACK的作用类似于:

A:How are you?(SYN=1)

B:Fine,thank you. And you ?(ACK=1,SYN=1)

A:Fine.(ACK=1)

两人相见,客套完之后就开始谈正事了。(*^_^*)

小弟才疏学浅,这些只是在学习过程中所记录的笔记,难免有些错漏。如果哪里有问题,请在文后留言,大家一起学习进步,谢谢!

猜你喜欢

转载自blog.csdn.net/csdnwgf/article/details/82177791