linux关于tcp协议ack的实现--总结和公平性问题

简介:
tcp是一个可靠连接的协议,但不要指望它是什么理论的实现,它是实践的东西,任何实践的东西背后都不是一个理论,而是一大堆理论,tcp正是单一停等,GBN(回退N)以及SR(选择重传)的结合体,单一停等是最原始的理论,但是带宽利用率太低了,后面的GBN实现了流水线式的数据发送和确认,可靠连接的根本就在于确认-ack,而GBN的ack完全是基于接收方的,接收方很简单的只发送最后一个按序到达的报文的序列号最为确认号,而发送端收到以后将重传该确认号之后的所有报文,这样实现很简单,要考虑的事情也不多,但是可能会导致大量不必要的重传动作,因此SR就报上了名来,只要接收端收到一个报文就给予确认,发送方将已经被确认的分组从重传链表删除,然后如果被确认的分组在窗口的最左边,那么向前移动发送窗口,这就解决了GBN中的一系列问题,可是新的问题就是实现起来可能更复杂了,收发双方对于ack的处理都很复杂。
     linux的tcp实现实质上是以GBN为根本,但是内置了SR算法的支持,正和RFC的建议一致,SR在RFC2018中被描述,而它是作为一个tcp选项被加入协议的,也就是说tcp的实现的骨架还是gbn,但是如果你想使用sr的特性,那么需要通过tcp头的选项来支持,linux实现了这一点,并且将发送ack,接收ack,处理sr,以及重传等动作完全分离,发送ack完全按照gbn的方式,如果需要sack的话,那么另外填写选项,对于接收ack并处理,也是按照GBN的方式,但是其间需要检查是否冗余ack积累到了一定量,接收ack是tcp_ack处理的,虽然它基于,但它丝毫不必担心gbn的大量重传问题,因为重传动作完全是tcp_ack以外的,它将根据sack相关的信息处理重传,而不是根据gbn的原则重传分组。
     正是ack保证了连接的可靠性,同时ack也左右了tcp的拥塞控制以及流量控制动作,进而使得tcp实现带宽的公平性(加增乘减),但是公平性只是针对tcp内部而言的,如果大量疯狂的udp视频传输于骨干网,由于udp没有拥塞控制,它会占去大量资源而不后退,而tcp由于丢包或者延迟已经感觉到了拥塞,于是tcp们纷纷减缓发送,于是就让给udp更大的带宽,虽然这种绥靖不是有意的,但是这个问题却是亟待解决的,目前无法在协议本身找到完美的解决方案,而只能通过诸如路由器的流控或者在linux上使用iptables配置相关策略来实现。

     因此tcp是一个诸多理论的混合体,而linux实现的tcp又是诸多实现建议的混合体。



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271787

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
11月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
434 0
Linux C/C++之TCP / UDP通信
|
11月前
|
网络协议 Linux 网络性能优化
Linux基础-socket详解、TCP/UDP
综上所述,Linux下的Socket编程是网络通信的重要组成部分,通过灵活运用TCP和UDP协议,开发者能够构建出满足不同需求的网络应用程序。掌握这些基础知识,是进行更复杂网络编程任务的基石。
408 1
|
网络协议 安全 Linux
在Linux中,tcp三次握⼿的过程及原理?
在Linux中,tcp三次握⼿的过程及原理?
|
域名解析 网络协议 Linux
在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采用udp协议?为什么要这么设计?
在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采用udp协议?为什么要这么设计?
|
网络协议 Linux
在Linux中,如何查看 http 的并发请求数与其 TCP 连接状态?
在Linux中,如何查看 http 的并发请求数与其 TCP 连接状态?
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
302 4
|
域名解析 网络协议
IP协议, TCP协议 和DNS 服务分别是干什么的?
大家好,我是阿萨。昨天讲解了网络四层协议[TCP/IP协议族分为哪4层?]今天我们学习下IP 协议, TCP 协议和DNS 协议分别是干什么的。
438 0
IP协议, TCP协议 和DNS 服务分别是干什么的?
|
网络协议
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
|
监控 网络协议 网络架构
IP协议【图解TCP/IP(笔记九)】
IP协议【图解TCP/IP(笔记九)】
360 0
|
网络协议 网络架构
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型

热门文章

最新文章