sack dsack 相关介绍
之前做过关于 sack dsack相关笔记:tcp dsack
其实关于sack的不好之处 也是比较明显的:在一定程度上来说,SACK可能就像DOS攻击一样,每次遍历都要消耗大量CPU,时间复杂度为O(n^2),n为packets in flight的数量。
SACK Advantages
- Receiver informs the sender about all the PDUs that have been received successfully.
- Sender retransmits only the PDUs that have not been Acked.
- Implemented using two TCP options.
SACK –Permitted Option
- First option: enabling option(2 bytes) sent in a SYN
- Indicates SACK option can be used once connection established
- ---Receiver may return SACK’s
- ----Sender can process SACK’s
SACK Rules
- SACK does not change the meaning of ACK field.
- SACK cannot be sent unless SACK permitted option has been received.
- If SACKs are sent, they should be included in all TCP-PDUs when out-of-order data has been buffered.
- First SACK must ack most recently received out-of-order PDU.
SACK Rules Receiver
- Receiver returns as many distinct SACKs as possible.
- SACK option is filled out by repeating most recently reported SACK blocks.
- There may be some data in receiver’s queue which should be SACKed but is not.
SACK Rules Sender
- Records the SACK for future reference.
- Maintains a retransmission queue containing unacknowledged PDUs.
- Turns SACK bit on when sender receives a SACK.
- Skips SACK PDUs during retransmission.
- Retransmits the PDUs not SACKed so far and less than the highest SACKed PDU.
- Turns off SACK bit after retransmission time out.
Reneging
- Reneging is a case when the receiver SACK some data and later discards that data. Such discarding is discouraged, but permitted if the receiver runs out of the buffer space.
If Reneging occurs
- The first SACK should reflect the newest PDU even if the PDU is going to be discarded.
- Except for the newest PDU, all SACK blocks must not Ack any data which is no longer held by receiver.
Consequences of Reneging
- Sender must maintain normal TCP timeouts. A PDU cannot be considered acknowledged until its ACK by cumulative acknowledgement.
- PDU’s cannot be removed from the transmit buffer until ACK by the cumulative acknowledgement.
Duplicate SACK (DSACK)Extension to SACK
- When D-SACK is used, the first block of the SACK option should specify the duplicate PDU.
- D-SACK block is used to report duplicate contiguous sequence of data received by the receiver in the most recent packet.
- Each duplicate is reported at most once.
- Allows the sender TCP to determine when a retransmission is not necessary.
D-SACK TCP Rules
- If D-SACK block reports duplicate PDU from (possibly larger) block of data in the receiver buffer above the cumulative acknowledgement, the second SACK block (the first non D-SACK block) should specify this block.
- As only, the first SACK block is considered as D-SACK block, if multiple sequences are duplicated, only the first is contained in the D-SACK block.
D-SACK TCP & Retransmissions
- D-SACK allows TCP to determine when retransmission is not necessary and thereby undo congestion control measures.
- D-SACK allows TCP to determine if the network is duplicating packets.
- D-SACK does not allow a sender to determine if both the original and retransmitted PDU are received, or the original is lost and the retransmitted PDU is duplicated by the network.
SACK & D-SACK Interaction
- No difference between SACK & D-SACK, except that first SACK block is used to report a duplicate PDU in D-SACK.
- No separate negotiation/options for D-SACK.
- D-SACK is compatible with current implementations of SACK option in TCP.
参考:
- ftp://ftp.rfc-editor.org/in-notes/rfc2018.txt
- ftp://ftp.rfc-editor.org/in-notes/rfc2883.txt
- Professor Amer’s Slide
- http://www.cse.nd.edu/~surendar/teach/spr03/cse598N/Lectures/Lecture13.pdf
以上可以在内容来自https://www.eecis.udel.edu/~amer/856/sack.04f.ppt
引入D-SACK的目的是使TCP进行更好的流控,具体来说有以下几个好处:
1. 让发送方知道,是发送的包丢了,还是返回的ACK包丢了;
2. 网络上是否出现了包失序;
3. 数据包是否被网络上的路由器复制并转发了
4. 是不是自己的timeout太小了,导致重传
通过D-SACK这种方法,发送方可以更仔细判断出当前网络的传输情况,可以发现数据段被网络复制、错误重传、ACK丢失引起的重传、重传超时等异常的网络状。
D-SACK使用了SACK的第一个段来做标志,如何判断D-SACK:
1. 如果SACK的第一个段的范围被ACK所覆盖,那么就是D-SACK
2. 如果SACK的第一个段的范围被SACK的第二个段覆盖,那么就是D-SACK
D-SACK的规则如下:
1. 第一个block将包含重复收到的报文段的序号 2. 跟在D-SACK之后的SACK将按照SACK的方式工作 3. 如果有多个被重复接收的报文段,则D-SACK只包含其中第一个
http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!!
但行好事 莫问前程
--身高体重180的胖子
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2020-11-16 内核 空指针 panic