TCP 三次握手

 

TCP建立连接过程

  • Syn=1表示建立连接的同步信号
  • Seq=x表示当前发送的序列号
  • ack=x+1表示收到序列号x 期望下一个收到包为x+1 

TCP 三次握手_第1张图片

 

第一次握手
客户端向服务端发送连接请求报文段。该报文段的头部中SYN=1,ACK=0,seq=x。请求发送后,客户端便进入SYN-SENT状态。

  • SYN=1,ACK=0表示该报文段为连接请求报文。
  • x为本次TCP通信的字节流的初始序号。
     

第二次握手
服务端收到连接请求报文段后,如果同意连接,则会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1。
该应答发送完成后便进入SYN-RCVD状态。

  • SYN=1,ACK=1表示该报文段为连接同意的应答报文。
  • seq=y表示服务端作为发送者时,发送字节流的初始序号。
  • ack=x+1表示服务端希望下一个数据报发送序号从x+1开始的字节。

第三次握手
当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。
该报文段的头部为:ACK=1,seq=x+1,ack=y+1。
客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,连接建立

——为什么是三次握手? 不是2次或4次?

3次握手是确保通信双方收发都正确的最少次数,是双发都确认自己和对方都能发送和接收的基本前提

  • 服务端收到第一次Syn包时,可以确认自己的收功能,和客户端的发功能正确
  • 客户端收到服务端的ack应答后,可以确认服务端收发都正确,自己的收发也正确
  • 服务端第二次收到客户端对自己Syn包的ack应答后,可以确认双发的收发都正确

至此,连接双方都确认自己和对方的发送和接收功能正常,连接建立

——已失效的连接请求报文段”的产生在这样一种情况下:

client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。

 

 

 

 

 

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