理解TCP三次握手和四次分手

原创
03/03 10:02
阅读数 53

什么是TCP

传输控制协议,运行在传输层

TCP的特点

  • 面向连接。点对点,通过三次握手建立连接,四次挥手断开连接
  • 传输可靠的数据流。通过超时重传和应答确认等机制保证可靠性
  • 数据排序。传输数据包序列号标识
  • 流量控制。通过滑动窗口,协商双方的传输能力,可动态调整
  • 全双工。同一时刻双方都能同时发送。

名词解释

  • SYN:连接请求标识
  • ACK:响应确认标识
  • FIN:连接终止标识
  • seq:数据包的序列号,第一包为发送端(客户端或服务端)随机生成,后面该端的包在第一包的值上加一
  • ack:响应的序列号,对应发送端的数据包的seq值加一

三次握手和四次挥手图解和抓包

三次握手(客户端主动发起)

  1. 第一次握手,客户端发送数据包(SYN seq=x),客户端进入SYN_SENT(请求连接)状态,服务端收到数据包,进入SYN_RECV(等待接收)状态

  1. 第二次握手,服务端发送数据包(SYN ACK ack=x+1 seq=y),客户端收到数据包,进入ESTABLISHED(等待通信)状态

  1. 第三次握手,客户端发我数据包(ACK ack=y+1 seq=x+1),服务端收到数据包,进入ESTABLISHED(等待通信)状态

为什么要三次握手?

TCP是面向连接的可靠传输控制协议,可靠传输最少需要的握手次数是3次

四次挥手(客户端和服务端都可以主动发起)

  1. 第一次挥手,客户端close主动关闭,发送数据包(FIN seq=x)表示数据发送完了,客户端进入FIN_WAIT-1状态,服务端收到数据包

  1. 第二次挥手,服务端发送数据包(ACK ack=x+1 seq=y),进入CLOSE_WAIT状态,客户端收到数据包,进入CLOSE_WAIT-2状态

  1. 第三次挥手,服务端继续发送未完的业务数据包,然后发送数据包(FIN ACK ack=x+1 seq=y+1)表示数据发送完了,进入CLOSE状态,客户端收到数据包,进入TIME_WAIT状态

  1. 第四次挥手,客户端发送数据包(ACK ack=y+2 seq=x+1),服务端收到数据包进入CLOSED状态,客户端等待2+MSL时间后,自动进入CLOSED状态

为什么需要TIME_WAIT状态?

  1. 可靠的终止TCP连接。客户端最后发的ACK数据包有可能丢失,TIME_WAIT状态方便接收服务端重发的FIN数据包,然后重新发送ACK数据包给服务端
  2. 保证迟来的TCP报文有足够的时间被识别并丢弃。如果没有TIME_WAIT状态,客户端立刻关闭,新的客户端应用程序启动如果使用了相同端口,有可能收到服务端迟来的FIN数据包,而无法识别。
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部