CN-TCP-1

Molaters Lv5
[[计算机网络]]

TCP概述

TCP 概述

点对点

一个发送方一个接收方

可靠的、按照顺序的字节流

流水线机制

  • TCP拥塞控制和流量控制机制设置窗口尺寸。

发送方/接收方缓存0

全双工(full-duplex)

同一链接中能够传输双向数据流

面向连接

通信双方在发送数据之前必须建立连接

连接状态只在链接的两端中维护,在沿途节点中并不维护状态

TCP连接包括 两台主机上的缓存连接状态变量socket

流量控制机制

TCP段的结构

image.png

第一行:源端口号,目的端口号

段序列号和ACK的数据

U:URGENT 代表紧急数据
A:ACK 代表是否有效
P:PUSH DATA NOW 没有用处
R:RST
S:SYN
F:FIN
checksum:代表校验和

序列号

  • 序列号是segment中第一个字节的编号,而不是segment的编号
  • 建立TCP的时候,双方随机选择序列号

ACKs:

  • 希望接收到的下一个字节的序列号
  • 累计确认,该序列号之前的所有字节都已经被正确收到

Q:接收方是怎么处理乱序到达的Segment?

A: TCP 规范中没有规定,由TCP的实现者做出决策

有两台主机,两个之间进行远程登陆的功能 telnet

〽️ 之前已经建立了连接

  • 当主机A用户输入一个C之后,会产生一个序列号的段。(Seq=42,ACK=79(期望收到的),data=’C’)
  • 返回来的段中的内容是Seq=79,ACK=43,data=’C’
  • 主机会再发送一个确认,Seq=43,ACK=80.

image.png

TCP的可靠数据传输

TCP在IP层里面提供的服务的不可靠服务基础上实现可靠数据传输服务

流水线机制

累计确认

TCP使用单一重传定时器

触发重传的时间

  • 超时
  • 收到重复的ACK

TCP RTT和超时

问题怎么设置定时器的超时时间?

可以使用RTT来作为一个标尺来定下TCP的超时时间

过短就会产生不必要的重传

如果过长就会对段丢失的时间反应比较慢

问题怎么估计RTT?

SampleRTT:测量从段发出去到收到ACK 的时间

  • 忽略重传

SampleRTT变化

  • 测量多个SampleRTT,求平均值,形成RTT的估计值

使用指数加权移动平均的方法:

EstimatedRTT = (1 - $\alpha$) * EstimatedRTT + $\alpha$ * SampleRTT

典型值就是0.125

定时器超时时间的设置

  • EstimatedRTT +”安全边界”
  • EstimatedRTT变化大 $\rightarrow$ 较大的边界

测量RTT值的变化:SampleRTT和EstimatedRTT的差值

DevRTT = (1-$\beta$) * DevRTT + $\beta$ * | SampRTT-EstimatedRTT |

Typically, $\beta$ = 0,25

定时器超时时间的设置

TimeoutInterval = EstimatedRTT + 4 * DevRTT

TCP发送方的事件

从应用层收到数据

  • 创建Segment
  • 序列号是Segment第一个字节的编号
  • 开启计时器
  • 设置超时时间:TimOutInterval

超时

  • 重传引起超时的Segment
  • 重启定时器

收到ACK

如果确认此前未确认的Segment

  • 更新SendBase
  • 如果窗口中还有没有被确认的分组,重新启动定时器

image.png

TCP重传示例如上:此时返回的时候ACK发生丢失,主机发生Timeout事件,此时重新接受,同样会使用ACK100来进行回复

image.png

两个数据相近的发出,这个Timeout间隔设置的短了,所以就会发生重传,注意,此时重新传回来的数据应该是ACK120

image.png

如果没有收到100,但是收到了ACK120,同样是把SendBase来设置为120.

TCP ACK的生成 : RFC 1122,RFC 2581

Event at Receiver TCP Receiver action
Arrival of in-order segment with expected seq # All data up to expected seq # already ACKed Delayed ACK.Wait up to 500ms for next segment. If no next segment send ACK
Arrival of in-order segment with expected seq # One other segment has ACK pending Immediately send single cumulative ACK. ACKing both inorder segments
Arrival of out-of-order segment higher-the expect seq # Gap detected Immediately send duplicate ACK,indicating seq # of next expected byte
Arrival of segment that partitially of completely fills gap Immediately send ACK,provided that segment startset lower end of gap

快速重传机制

TCP的实现中,如果发生超时,超时的事件间隔将重新设置,即将超时时间间隔加倍,导致很大。

  • 重发丢失的分组之前要等待很长时间

通过重复ACK检测分组丢失

  • Sender 会背靠背的发送多个分组
  • 如果某个分组丢失,可能会引起多个重复的ACK

入宫Sender收到对同一个数据的3个ACK,那么久假定数据之后的段已经丢失

快速重传:在定时器超时之前就进行重传!利用多个重复的ACK

image.png

  • 标题: CN-TCP-1
  • 作者: Molaters
  • 创建于 : 2023-11-24 10:14:50
  • 更新于 : 2023-10-12 17:07:06
  • 链接: https://molaters.github.io/2023/11/24/计算机网络/CN-TCP-1/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论