TCP三次握手_Linux

说明:A ,B处于关闭CLOSED状态,一般是客户端主动发起连接请求的,因为客户端的端口是随机产生的,不固定,服务器的端口是固定的,容易找到。服务器端不能一直处于关闭状态,服务器要工作。要变成收听状态,这样就可以随时接受到来自客户端的请求了。

    (1) A要与B通信时,会发送SYN=1(请求通讯位,1代表请求建立连接),seq=xx 表示所发的数据包在客户端A上所排的序号,在抓包时,这个序号一般是相对序号,例如当AB第一次建立连接,那么这个序号,一般为0),当A发完包后,会立即进入SYN-SENT 同步已发送状态

   (2)当B收到A发来的包后,会回复确认收到,回复SYN=1(请求建立连接),ACK=1(确认收到),seq=y(所收到的包在我自己机器上即B所排的序号),ack=x+1(这里的xA发来的x是一样的,假如x=100,代表A发送的是第100个包,B如果想告诉A我收到这个100包了,会回复,我希望你下一个发的包是101个,即代表已经收到了100包,所以这里是ack=x+1,代表下一个期望收到的包序号),B回复后会立即进入SYN-RCVD同步收到状态。

   (3)当A收到B发来的回复后,会再次与B确认,发送ACK=1(确认收到),seq=x+1(这个包的序号是x+1,即B上次的回复中请求下次要发的包),ack=y+1B在上次回复中有告诉A,你第一次发的包在我这的排序,所以这次A发送时,直接计算了这次发的包在B那边的排序),当A发送完后,会进入ESTAB-LISHED已建立连接状态。

   (4)B收到后也会进入ESTAB-LISHED已建立连接状态,然后双方开始数据传送。

    例子:当双方打电话时,当你打过去电话时,对方会回复喂,然后你也会说,喂,是我,然后双方开始通话。