TCP三次握手建立连接

来源:互联网 发布:在淘宝上面卖什么好 编辑:程序博客网 时间:2024/05/24 01:52


 【 TCP三次握手  建立连接】

  A运行的是TCP客户端程序,B运行的是TCP服务器程序。

  最初两端的TCP进程都处于closed关闭状态。

  A主动打开连接,B被动打开连接;

  B的TCP服务器进程先创建传输控制块TCB(存储没个连接中的一些重要信息),准备接收客户进程的连接请求。 然后服务器就处于Listen(监听状态),等待客户的连接请求,如有,则做出回应。

 

          

  1  A>BSYN = 1, seq = x   (ACK=0)

    ATCP客户进程也是首先创建传输控制模块TCB,然后向B发出连接请求报文段,这时首部中的同步位 SYN = 1,并选择一个初始序号seq = x,表明传送数据时的第一个数据字节的序号是 x

    TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但要消耗一个序号

    SYN=1ACK=0时,表明这时一个连接请求报文段。 对方若同意建立连接,则应在响应的报文段中使SYN=1ACK=1

    因此,同步SYN = 1就表示这是一个连接请求或连接接受报文。

    这时,TCP客户A进程进入SYN-Sent(同步已发送状态).

  2 A<B:  SYN = 1, ACK = 1, seq = y, ack= x +1

    B收到连接请求报文段后,如同意建立连接,则向A发送确认。

    确认报文段中应把SYN为和ACK位都1(SYN = 1ACK = 1)确认号是ack = x+1,同时也为自己选择的序号seq = y

    注意,这个报文段也不能携带数据,但同样要消耗一个序号。

    这时TCP服务器B进入SYN-Rcvd(同步收到状态)

  3:  A>BACK = 1, seq = x + 1, ack = y+1

    A收到B的确认后还要向B给出确认。

    确认报文段的ACK = 1确认号 ack = y+1,而自己的序号seq=x+1

    TCP的标准规定,ACK报文段可以携带数据,但如果不携带数据则不消耗序号,在这种情况下,下一个报文段的序号仍是seq=x+1

    这时TCP连接已经建立,A进入ESTABLISHED(已建立连接状态)ATCP通知上层应用进程,连接已经建立。

    B收到A的确认后,也进入ESTABLISHED(已建立连接状态),也通知其上层应用进程:TCP连接已经建立。

    开始数据传输。

 





原创粉丝点击