[关闭]
@AlexWuYh 2019-10-31T09:07:36.000000Z 字数 1792 阅读 76

TCP协议简析

TCP/IP


TCP 协议

三次握手

  1. 第一次握手 (SYN=1, seq=x):
  2. 客户端发送一个TCP的包, SYN 标志位 1. 设置服务器端口,初始序号 x, 保存在包头的序列号(Sequence Number)字段.
  3. 发送完毕后, 客户端进入 `SYN_SEND` 状态.
  4. 第二次握手 (SYN=1, ACK=1, seq=y, ACKnum=x+1):
  5. 服务器发回确认包(ACK)应答, SYN标志位 ACK标志位 均为1. 服务器端选择自己的 ISN 序列号, 放到 Seq域里.
  6. 同时,将确认序号(Acknowledgement Number)设置为客户的 ISN 1 (x+1).
  7. 发送完毕后,服务器端进入 `SYN_RCVD` 状态.
  8. 第三次握手 (ACK=1, ACKnum=y+1):
  9. 客户端再次发送确认包(ACK), SYN 标志位 0, ACK 标志位 1. 把服务器发来的 ACK 的序号字段 1 (y+1).
  10. 放在确定字段中发送给对方, 在数据段放写 ISN+1.
  11. 发送完毕后,客户端进入 `ESTABLISHED` 状态.
  12. 当服务器端接收到这个包时,也进入 `ESTABLISHED` 状态, TCP握手结束.

四次挥手

  1. 第一次挥手 (FIN=1, seq=x):
  2. 客户端关闭连接, 发送一个 FIN 标志位 1 的包,表示没有数据要发送了,但可以接收数据.
  3. 发送完毕后,客户端进入 `FIN_WAIT_1` 状态.
  4. 第二次挥手 (ACK=1, ACKnum=x+1):
  5. 服务器端确认客户端的 FIN 包,发送一个确认包, 表明接收了关闭连接的请求,但还没准备好关闭连接.
  6. 发送完毕后,服务器进入 `CLOSE_WAIT` 状态.
  7. 客户端接收到这个确认包, 进入 `FIN_WAIT_2` 等待服务器关闭连接.
  8. 第三次挥手 (FIN=1, seq=y):
  9. 服务器准备好关闭连接时,向客户端发送结束连接请求, FIN 标志位 1.
  10. 发送完毕后,服务器进入 `LAST_ACK` 状态,等待来自客户端的的最后一个ACK.
  11. 第四次挥手 (ACK=1, ACKnum=y+1):
  12. 客户端接收到关闭请求,发送一个确认包,进入 `TIME_WAIT` 状态,等待可能出现的要求重传的ACK包.
  13. 服务器接收到确认包,关闭连接,进入 `CLOSED` 状态.
  14. 客户端等待了某个固定的时间 (2*最大段生命周期, 2*MSL, 2 Maximum Segment Lifetime) 之后,
  15. 没有收到服务器的ACK,认为服务器已正常关闭,自己也关闭连接,进入 `CLOSED` 状态.

SYN攻击

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注