TCP

介绍

连接的生命周期

报文格式

  • 序列号 包的序列号,用于控制包的按序传送
  • Ack server的回应,表示收到,用于可靠性传输
  • tcp flags tcp 状态机
  • window 流量控制

通过三次握手建立连接,连接有半连接队列和全连接队列。如果发生dos攻击,会出现大量的SYN_RCVD状态,可通过服务端主动发送一个特殊的ack来进行探测对方是否是恶意客户端。连接队列如果满了的话,会出现connection reset by peer异常。当server收到client的ack时,会将连接放到全连接队列中等待accept,这个时候如果server没有accept connection并且client在持续发送数据,就会造成客户端重传数据卡住。

client发送数据后,server可能会延迟回复ack 一般是配置为40ms

关键词

  • rtt 网络往返时间(round trip time)
  • mss 最大分段大小 (maxium segment size)。tcp最大报文大小,不包含tcp header和option
  • mtu 网络最大传输单元(maximum transmit unit)。多用于以太网口,如果要传输的数据包的大小超过mtu,有可能会丢弃包。

三次握手

握手过程
syn-> syn ack -> ack

半连接队列 baklog

全连接队列

在连接队列满了的时候会出现 connection reset by peer

常见问题

队列溢出

Connection reset by peer

队列溢出后的重传

四次挥手

挥手过程,中间状态

finish_wait_1
close_wait
finish_wait_2
last_ack
TIME_WAIT

TIME_WAIT大量出现的话会造成不能创建连接

常见问题

  1. 出现大量TIME_WAIT

  2. 为何四次挥手
    fin -> fin ack -> fin -> ack

传输过程


  • mss
  • mtu maximum transmission unit
  • delay ack
  • nagle

启动

慢启动,逐渐增大流量

可靠

ack确认,重传
ack 实际确认直接,deplay ack。

流量控制

窗口,拥塞

常见问题

  • 粘包
  • 丢包 加速
  • 队头阻塞(head-of-line blocking)
  • dos攻击

调试工具


参考

  1. 最经典的TCP性能问题
  2. TCP流量控制、拥塞控制
  3. TCP之“滑动窗口”协议
  4. TCP 的那些事儿
  5. MAC地址表、ARP缓存表以及路由表
  6. ip地址 mac地址

评论