TCP三次握手

TCP三次握手

三次握手

TCP三次握手 图1

第一次握手:客户端发送SYN报文

SYN标识:1,seq(序号):X

第二次握手:服务端发送SYN+ACK报文

SYN标识:1,ACK标识:1,seq(序号):Y,ack(确认号):X+1

第三次握手:客户端发送ACK报文

ACK标识:1,seq(序号):X+1,ack(确认号):Y+1

三次握手作用?

TCP三次握手 图2

目的:确认客户端和服务端接收以及发送能力是否正常。确认的信息如下:

  1. 窗口大小
  2. 序号
  3. 选项:
  • kind 2:最大报文传输长度(MSS)
  • kind 3:窗口扩大因子
  • kind 4:SACK支持

为什么握手是三次,而不是两次或者四次?

两次握手容易出现以下问题:情况1.已失效的连接请求报文段突然又传送到了服务端产生错误情况2.两次握手只能保证单向连接正常 四次握手:没有必要图:情况1

TCP三次握手 图3

情况1:已失效的连接请求报文段突然又传送到了服务端产生错误

客户端发送第一次握手,第一次握手在网络中滞留,客户端重发第一次握手,服务端可能接收两个握手消息,从而建立两个TCP连接,客户端接收两个第二次握手消息,但只建立一个TCP连接,连接出错

思考:服务端收到两个第一次握手,为什么建立两个TCP连接而不是一个?

图:情况2

TCP三次握手 图4

情况2:两次握手只能保证单向连接正常

客户端发送第一次握手,服务端成功接收到第一次握手,服务端发送第二次握手并成功建立TCP连接,如果第二次握手丢失,客户端无法建立TCP连接,服务端也无法知道客户端是否建立连接

← 返回文章列表