理解TCP中的三次握手

来源:互联网 发布:登陆千牛淘宝客服不亮 编辑:程序博客网 时间:2024/04/28 11:06

TCP三次握手

TCP(Transmission Control Protocol) 传输控制协议

TCP是端到端的传输控制协议,提供可靠的连接服务,采用三次握手方式来建立连接。

要理解三次握手流程,需要先了解TCP协议格式,因为在三次握手过程中,发送的都是没有数据,只有报头信息的TCP报文,通过报头中某些字段值的不同含义从而实现连接的建立。TCP报文格式如下:

       clip_image001

上述的TCP报文格式中每个字段意义已经描述得很清楚,现针对三次握手中要用到的字段再做简单描述,

TCP报文格式中有6位的tcp标志位,每个标志位对应着TCP连接的不同状态,完整的6个标志位组成了TCP连接的完整状态。

具体每个标志位的含义如下:

    1. URG (urgent 紧急 =1时表示Urgent Pointer字段值有效)
    2. ACK (acknowledgement 确认 =1表示Acknowledgement number字段值有效)
    3. PSH (push =1时表示传送数据)
    4. RST (reset =1时表示连接需要复位)
    5. SYN( synchronous =1时表示建立连接,序号同步)
    6. FIN (finish 结束 =1时表示终止连接)

 

三次连接具体过程描述:

          clip_image002

第一次握手:Client端发送标志位SYN=1,随机产生Seq number=8000的SYN包到Server,此时Client进入SYN_SEND状态。Server根据SYN=1知道Client要求建立TCP连接

第二次握手:Server收到SYN请求后如果允许建立连接,就向Client发送Ack number=8001 (Client的Seq Number+1),随机产生Seq Number=15000,状态标志位,SYN=1,ACK=1的SYN+ACK包,此时Server进入SYN_RECV状态。

第三次握手:Client收到SYN+ACK包后检查Ack number是否正确,是否等于第一次握手中发送的Seq number+1,同时检查标志位ACK是否为1,若两项检查都正确,Client会再次发送Ack number=15001(Server的Seq Number+1),ACK=1的ACK包,Server收到后检查Ack number值与ACK=1无误后则连接建立成功, 此时Client和Server均进入ESTABLISHED状态。

完成三次握手后Client与Server开始传送数据。

 

三次握手过程中报头信息的变化

第一次握手

     SYN包没有携带任何数据,使用了报头中SYN标志位和Seq number字段,其中SYN=1标志请求建立一个连接

第二次握手

     SYN+ACK包也没有携带任何数据,使用了报头中的SYN和ACK标志位,以及Seq Number 和 Ack Number字段,

     其中SYN=1标志Server端同步初始顺序号,以便Server向Client发送信息。

     ACK=1标志已确认收到SYN包,同时给出期望从Client端收到的下一个序号。

     需要注意的是在第二次握手中还定义了动态窗口大小。

第三次握手

     ACK包没有携带任何数据,使用标志位ACK=1以及Seq Number和Ack Number字段。

 

本文出自 “我儿子真帅!” 博客,转载请与作者联系!

原创粉丝点击