CN-TCP-1

TCP概述
TCP 概述
点对点
一个发送方一个接收方
可靠的、按照顺序的字节流
流水线机制
- TCP拥塞控制和流量控制机制设置窗口尺寸。
发送方/接收方缓存0
全双工(full-duplex)
同一链接中能够传输双向数据流
面向连接
通信双方在发送数据之前必须建立连接
连接状态只在链接的两端中维护,在沿途节点中并不维护状态
TCP连接包括 两台主机上的缓存、连接状态变量、socket等
流量控制机制
TCP段的结构
第一行:源端口号,目的端口号
段序列号和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.
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
- 如果窗口中还有没有被确认的分组,重新启动定时器
TCP重传示例如上:此时返回的时候ACK发生丢失,主机发生Timeout事件,此时重新接受,同样会使用ACK100来进行回复
两个数据相近的发出,这个Timeout间隔设置的短了,所以就会发生重传,注意,此时重新传回来的数据应该是ACK120
如果没有收到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
- 标题: 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 进行许可。