二、TCP连接的建立(三次握手、三报文握手)

二、TCP连接的建立(三次握手、三报文握手)_第1张图片

  • 前置准备:一开始客户端和服务端都是CLOSED状态,服务端创建传输控制块TCB,进入LISTEN状态等待客户端的连接请求;客户端创建传输控制块TCB。
  • 1)客户端向服务端发送同步报文段,同步位SYN=1,初始序列号seq=x。客户端进入SYN-SENT状态
  • 2)服务端收到请求后,向客户端发送报文段,同步位SYN=1,确认位ACK=1,初始序列号seq=y,确认号ack=x+1。服务端进入SYN-RCVD状态
  • 3)客户端收到服务端的确认,再次发送确认报文段,确认位ACK=1,初始序列号seq=x+1,确认号ack=y+1。客户端进入ESTABLISHED状态,服务端收到客户端的确认后也进入ESTABLISHED状态

为什么是三次?两次可以不?(以下情况假定去掉第三次的确认)
客户端第一次发送连接请求报文段x,在某个网络节点长时间滞留,然后客户端第二次发送连接请求报文段y,这时服务端收到y,建立连接,经过一系列的传输后连接释放。过了一段时间后,服务端收到了第一次发送的连接请求报文段x,这其实是一个废弃的请求。但服务端不知道,服务端发送确认后直接建立连接,这时就会浪费资源。

为什么第一次seq=x,第三次seq=x+1
SYN报文段不能携带数据,但要消耗一个序列号。

你可能感兴趣的:(计算机网络)