`
totoxian
  • 浏览: 1074588 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

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又是诸多实现建议的混合体。

分享到:
评论

相关推荐

    tcp_ack_check.rar_opnet tcp_tcp协议ack机制在opnet中实现

    通过以上描述,我们可以看出TCP的ACK机制在保证网络通信的可靠性中起着核心作用,而在OPNET这样的高级网络建模工具中实现这一机制则需要深入理解TCP协议的工作原理和OPNET的模拟框架。通过编写和调试`tcp_ack_check....

    TCP协议的模拟实现--源代码

    TCP(Transmission Control Protocol)协议是互联网上应用最广泛的一种网络协议,它为两台计算机之间的数据传输提供了可靠性和顺序保证。TCP协议通过一系列复杂的机制确保了数据的正确传输,包括三次握手建立连接、...

    linux-1.2.13 网络协议栈源码

    Linux 1.2.13 网络协议栈源码是学习TCP/IP协议栈实现的一个经典入口。这个版本的Linux内核虽然较旧,但因其简洁性和完整性,非常适合初学者深入理解网络通信的核心原理。在Linux内核中,网络协议栈是负责处理网络...

    Linux内核TCP-IP协议栈分析.rar

    在Linux内核中,每一层都有相应的模块负责处理相关的协议和功能。 1. **应用层**:这一层包含了众多的应用程序协议,如HTTP、FTP、SMTP等。在Linux内核中,这些协议通常由用户空间的服务程序实现,而内核则提供了...

    Linux内核 tcp ip协议栈源码分析

    TCP协议的实现主要在`tcp.c`和`tcp_input.c`等文件中。TCP的状态机,包括SYN、ACK、FIN、RST等标志的处理,都在这里完成。TCP连接的建立、维护和断开,包括三次握手和四次挥手,都是通过这些源码实现的。同时,TCP...

    ack-2.14-single-file

    **ack-2.14-single-file 知识点详解** `ack` 是一款高效、可配置的源代码搜索工具,特别适用于程序员和开发者。它基于 Perl 编写,旨在替代 `grep`,尤其是在处理大量代码时能提供更快的搜索速度和更友好的结果展示...

    Linux 4.4.0 内核源码分析 TCP实现

    分析工作开始之前需要对Linux内核进行准备,了解用户层的TCP工作原理是基础,这包括对RFC文档的阅读,如RFC793定义了传输控制协议的基本规则,RFC1323介绍了TCP的高性能扩展,RFC2018讨论了TCP的选择性确认(SACK)...

    TCP协议应用编程-聊天程序.pdf

    《TCP协议应用编程-聊天程序》的实验旨在教授如何利用TCP协议进行网络通信,并通过Windows环境下的WinSock编程接口实现多台计算机之间的实时聊天。TCP协议是网络传输层的重要组成部分,它提供了一种面向连接、可靠的...

    Tcp协议栈实现要点

    2. **TCP层**:实现TCP协议的核心逻辑,包括建立连接、数据传输和断开连接等。 3. **IP及传输接口层**:这部分主要处理网络底层的数据接口,包括IP层和链路层。其中,IP层相对较简单,主要负责数据包的转发和路由...

    USR-TCP232-Test-V1.3.rar

    5. **连接断开与关闭**:工具还能模拟TCP连接的关闭过程,测试FIN和ACK标志的使用,以及四次挥手的完整流程,确保连接的正确关闭。 6. **性能监控**:高级的TCP测试工具可能提供网络性能指标,如延迟、带宽利用率、...

    bic-tcp协议

    TCP是互联网上最广泛使用的传输层协议,其拥塞控制算法是保证网络稳定性和数据传输可靠性的重要机制。然而,传统的TCP算法如慢启动(Slow Start)、拥塞避免(Congestion Avoidance)和快速重传(Fast Retransmit)...

    《Linux内核源码剖析 TCP IP实现(上册) 樊东东 莫澜 pdf扫描版.

    《Linux内核源码剖析 TCP/IP实现》是樊东东和莫澜合著的一本深入解析Linux内核网络协议栈的书籍,主要关注TCP/IP协议的实现细节。这本书上册的内容,将引领读者深入理解Linux操作系统如何处理网络通信,特别是TCP/IP...

    ACK3116-DCU-11_USB_driver_ V1.8

    总结来说,ACK3116-DCU-11_USB_driver_V1.8是一款强大的驱动程序,它解决了串口设备与USB接口兼容性的问题,为串口设备的现代化应用提供了便利。无论是在日常办公还是专业工程中,它都扮演着不可或缺的角色,极大地...

    Linux协议栈实现分析

    常见的数据链路层协议有以太网协议和PPP(点对点协议)。 在Linux协议栈中,这四个层次的实现主要分布在以下内核模块: - `net/core`: 包含基本的网络功能,如网络设备驱动接口和数据包处理函数。 - `net/ipv4`: ...

    linux TCP/IP协议源码

    在Linux系统中,这些层次由不同的模块实现,如socket接口对应应用层,TCP和UDP协议处理传输层,IP协议处理网络层,而ARP和以太网驱动则属于数据链路层。 2. **TCP(传输控制协议)** TCP是面向连接的、可靠的传输...

    linux内核TCP协议栈部分,下册

    总的来说,《Linux内核源码剖析—TCP/IP实现 下册》是一本深入探讨TCP协议栈技术的书籍,对于提升对网络协议理解、优化网络性能和解决问题的能力有着极大的帮助。通过学习,我们可以更深入地理解TCP协议在实际工作中...

    TCP协议分析实验报告

    4. **学会协议分析软件发送自定义数据包的方法**:熟悉使用协议分析工具(如Wireshark、Iris等)来发送和分析自定义TCP数据包。 #### 实验原理 1. **TCP协议概述**:TCP是一种面向连接的服务,提供可靠的字节流...

    OPNET仿真软件中FAST TCP协议的实现

    在OPNET仿真软件中实现FAST TCP协议,涉及到了TCP序列号比较机制以及TCP状态变量初始化等关键知识点。本文将深入探讨这些概念,并解释其在TCP协议中的作用。 ### 序列号比较机制 TCP(传输控制协议)在数据传输...

    TCP协议分析网络实验报告

    ### TCP协议分析网络实验报告知识点总结 #### 一、实验背景及目的 本实验报告针对TCP协议进行深入分析,旨在帮助学生理解TCP协议的工作原理及其在网络通信中的作用。实验通过实际操作的方式,让学生掌握如何使用...

Global site tag (gtag.js) - Google Analytics