TCP 研究探讨1

249 阅读3分钟

1. 背景介绍

TCP 是数据传输层,这一块是网络协议的核心,只有了解这一块,才能够知道实际数据流是怎么走的。网络世界里面纷繁复杂的事情存在。

1.1 TCP的基本架构

image

2. TCP 哪些事,查看

2.1 TCP 的内容/结构

image

  • Source Port是源端口,16位。 (2个字节) TCP首部 TCP首部
  • Destination Port是目的端口,16位。(2个字节)
  • Sequence Number是发送数据包中的第一个字节的序列号,32位。 (4个字节)
  • Acknowledgment Number是确认序列号,32位。 (4个字节)
  • Data Offset是数据偏移,4位,该字段的值是TCP首部(包括选项)长度除以4。[1] (2字节)
  • 标志位: 6位,URG表示Urgent Pointer字段有意义:
  • ACK表示Acknowledgment Number字段有意义
  • PSH表示Push功能,RST表示复位TCP连接
  • SYN表示SYN报文(在建立TCP连接的时候使用)
  • FIN表示没有数据需要发送了(在关闭TCP连接的时候使用)
  • Window表示接收缓冲区的空闲空间,16位,用来告诉TCP连接对端自己能够接收的最大数据长度。(2字节)
  • Checksum是校验和,16位。(2字节
  • Urgent Pointers是紧急指针,16位,只有URG标志位被设置时该字段才有意义,表示紧急数据相对序列号(Sequence Number字段的值)的偏移。(2字节)
  • offset :所以用偏移量来计算整个TCP报头的长度,偏移量每增加1, 报头长度增加4字节

3. TCP的机制和原理

3.1 TCP是怎么来发包和接收包,保证其可靠性?

  • 会在最后的包进行确认,如接收到699个包,会ack =700
3.1.1 遇到丢包问题?重传机制
  • 超时重传机制
    • 一种是仅重传timeout的包。也就是第3份数据。
    • 另一种是重传timeout后所有的数据,也就是第3,4,5这三份数据
  • 快速重传机制: 解决多份数据确认的问题,不以时间驱动,而以数据驱动重传。只要数据没有到就一直等确认,如果超过3次就自动重传
  • Duplicate SACK – 重复收到数据的问题: 对于已经收到的包作为标识,如果有重复的包来了,回复D-SACK确认号
  • TCP的RTT算法:解决超时重传的时间问题
    • 经典算法: 记录最近几次的RTT时间,进行加权平均。 并得到重传时间的区间(对于大的网络抖动的问题,很容易平滑掉了)
    • jacobson , 这个算法引入了最新的RTT的采样和平滑过的SRTT的差距做因子来计算。
3.2 TCP滑动窗口(Window)

我们都知道,TCP必需要解决的可靠传输以及包乱序(reordering)的问题,所以,TCP必需要知道网络实际的数据处理带宽或是数据处理速度,这样才不会引起网络拥塞,导致丢包。(调整发送包大小的,调整期,会根据宽带的数据和网络的情况,综合计算出需要发送包的大小,类似流量控制作用)

  • 缓冲区分为四类:1.发送+确认 , 2. 发送+未确认 , 3. 待接受者接受数据, 4. 未发送也还不准备接受者接收。

image

  • 拥塞控制主要是四个算法:1)慢启动,2)拥塞避免,3)拥塞发生,4)快速恢复。这四个算法不是一天都搞出来的,这个四算法的发展经历了很多时间,到今天都还在优化中。