TCP随记

目录

  1. 一些常识
  2. 状态机
  3. ack
  4. 滑动窗口
  5. 拥塞窗口和慢启动
  6. 快速恢复和快速重传
  7. SACK

一些常识

  • MAC头14字节
  • IP首部:20字节+option
  • TCP头:20字节+option(klv格式,toa,mss,win,sack等)
  • UDP头:8字节
  • MTU:网络层最大传输单元
  • MSS:最大分段长度(TCP的syn包中传递,防止底层分片)
  • MSL:报文最大生存时间

状态机

握手

tcp握手

挥手

tcp挥手

ack

  • server端准备发送的数据包可以和ack一起发送(接受延迟的ack,最大200ms,可以通过TCP_NODELAY关闭)
  • 不必每个数据包都回ack,可以发一个累积的ack

滑动窗口

  • 发送方不必把整个窗口一口气发送完
  • 窗口大小由接收端通告
  • PUSH标记:通知接收端,传输层别再攒包了,一口气全上送应用层。

滑动窗口

拥塞窗口和慢启动

  • 拥塞窗口:cwnd
  • 慢启动:slow start,“慢”是相对于整个滑动窗口一波流而言,
  • 慢启动阈值:ssthresh = 拥塞时cwnd的一半
  • 发送方取得滑动窗口 = MIN(拥塞窗口,接收端通告窗口)

当发生网络拥塞(cwnd = 32)时(定时器超时,没有收到确认),cwnd= 1,进入慢启动,cwnd *= 2,呈指数增长,直到ssthresh = 16, 进入拥塞避免,cwnd += 1.

快速重传和快速恢复

  • 一旦接收端收到一个乱序的报文,立即发送一个重复ack出去,不要再延时确认, 如果连续收到3个重传的ack,发送端就知道网络拥塞了,立即重传,不要等超时定时器了。
  • 快速恢复:不想进入慢启动突然降低窗口大小,发送端收到3次重复ack后,ssthresh = cwnd/2 , cwnd = sstresh + 3,然后每次收到一个重复的ack时,cwnd+=1,一旦收到确认新数据的ack时,cwnd = ssthresh。

SACK

可选择的确认,告诉发送方,哪些报文需要重传,而不是全部重传,导致窗口迅速减少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值