TCP深入解析(二)
——TCP差错恢复方法
在上篇TCP的博客中我们就提及过这个问题,那么就是关于数据传输协议怎么处理丢失、损坏及延时过大的分组,而在流水线技术中的两种基本差错恢复方法就是:回退N步(GBN)和选择重传(SR)。
首先当然是截取至百度百科的相关定义:
只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。
当发送窗口大于1,接收窗口等于1时,就是回退N步协议。
当发送窗口和接收窗口的大小均大于1时,就是选择重发协议。
协议中规定,对于窗口内未经确认的分组需要重传。这种分组的数量最多可以等于发送窗口的大小,即滑动窗口的大小n减去1(因为发送窗口不可能大于(n-1),起码接收窗口要大于等于1)。
对应的工作原理:
TCP协议在工作时,如果发送端的TCP协议软件每传输一个数据分组后,必须等待接收端的确认才能够发送下一个分组,由于网络传输的时延,将有大量时间被用于等待确认,导致传输效率低下。为此TCP在进行数据传输时使用了滑动窗口机制(也就是之前所说的流水线技术)。
TCP滑动窗口用来暂存两台计算机间要传送的数据分组。每台运行TCP协议的计算机有两个滑动窗口:一个用于数据发送,另一个用于数据接收。发送端待发数据分组在缓冲区排队等待送出。被滑动窗口框入的分组,是可以在未收到接收确认的情况下多送出的部分。滑动窗口左端标志X的分组,是已经被接收端确认收到的分组。随着新的确认到来,窗口不断向右滑动。
TCP协议软件依靠滑动窗口机制解决传输效率和流量控制问题。它可以在收到确认信息之前发送多个数据分组。这种机制使得网络通信处于忙碌状态,提高了整个网络的吞吐率,它还解决了端到端的通信流量控制问题,允许接收端在拥有容纳足够数据的缓冲之前对传输进行限制。在实际运行中,TCP滑动窗口的大小是可以随时调整的。收发端TCP协议软件在进行分组确认通信时,还交换滑动窗口控制信息,使得双方滑动窗口大小可以根据需要动态变化,达到在提高数据传输效率的同时,防止拥塞的发生。称窗口左边沿向右边沿靠近为窗口合拢,这种现象发生在数据被发送和确认时。
当窗口右边沿向右移动时将允许发送更多的数据,称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。
当右边沿向左移动时,称为窗口收缩。Host Requirements RFC强烈建议不要使用这种方式。但TCP必须能够在某一端产生这种情况时进行处理。如果左边沿到达右边沿,则称其为一个零窗口。
(1)发送方不必发送一个全窗口大小的数据。
(2)来自接收方的一个报文段确认数据并把窗口向右边滑动,这是因为窗口的大小是相对于确认序号的。
(3)窗口的大小可以减小,但是窗口的右边沿却不能够向左移动。
(4)接收方在发送一个ACK前不必等待窗口被填满。
回退N步(GBN)
这有个非常不错的演示视频,大家有空的时候可以看看:
http://jpkc.sdkd.net.cn/JSJWL/html/leaf_06ff19219717486aa0ac9c3983acdf4e.htm
详细:
http://blog.sina.com.cn/s/blog_4e4b91d801000cek.html
在以下情况下,GBN发送方会发生响应:
1、上层调用:即应用层向传输层发送数据报;
2、收到ACK:收到从接收方发送的一个ACK,在该协议中对序号为n的分组采取累计确认的方式,即保证接收方已正确接收到序号为n及其以前的分组;
3、超时事件。
GBN接收方的行为则更加简单,如一个序号为n的分组被正确接收到,并且有序,则向发送方发送ACK,并将数据交付给上层。在任何其他情况下,接收方将丢弃该分组。
也就是说,在GBN协议中,即使分组到达但是无序的话也将会被丢弃。使用这种协议无疑就是接收缓存简单,即接收方不需要缓存任何失序分组。
选择重传(SR)
相较于GBN协议,SR协议仅仅重传分组丢失或者是受损的。从以下一张图片可以很明显的看出来:
选择重传的接收窗口与发送窗口一样大.选择重传协议允许与接受窗口一样多的分组失序到达,并保存这些失序到达的分组,直到连续的一组分组被交付给应用层.因为发送窗口与接收窗口是相同的,所以发送出来的所有分组都可以失序到达,而且会被保留直到交付为止.但是必须强调一点,在一个可靠的协议中,接收方永远不会吧分组失序地交给应用层.在他们被交付给应用层之前,先要等待那些更早发出来的分组到达。
而在SR发送方的响应与GBN中是一样的,这里就不在重复说了,下面主要介绍以下SR接收方的主要响应事件:
1、在接收方窗口内的分组被正确接收,在此情况下,一个选择ACK将被回送给发送方,如果该分组之前没有收到过,则缓存该分组。如该分组的序号是接收方窗口的基序号,则该分组以及以前缓存的序号连续的(起始于基序号)分组交付给上层。然后,接收窗口按向前移动的编号向上交付这些分组;
2、序号在接收方窗口前的分组被接收到,在此情况下,必须产生一个ACK,即该分组是以前确认过的分组;
3、其他情况,忽略该分组。
那么在TCP的差错恢复机制中,TCP是属于哪一种呢?
虽然在TCP发送方中仅需保持已发送过但未被确认的字节的最小序号和下一个要发送的字节的序号,但是TCP会正确接收已失序的分组并缓存。因此我们可以认为TCP的差错恢复机制是GBN协议与SR协议的混合体。
相关推荐
《深入解析Windows操作系统》第六版是一本权威且深入的技术书籍,专注于揭示Windows 7和Windows Server 2008 R2操作系统的内核层面的工作原理。本书由David A. Solomon和Mark Russinovich两位专家撰写,他们对于...
TCP和UDP的解析涉及到网络编程的基本概念,包括端口号、套接字编程、网络字节序转换以及错误处理。在C#中,开发者需要理解Socket类的使用,包括bind、listen、accept、connect、send和recv等方法,以及异步编程模型...
本资源“深入解析TCP、HTTP、Socket、Socket连接池.rar”旨在帮助开发者深入理解这些核心概念,并探讨Socket连接池的使用。 TCP是一种面向连接的、可靠的传输层协议,它保证了数据的顺序传输和无损传输。TCP通过三...
### VPP TCP层代码解析 #### 1. VPP TCP三次握手建连流程 ##### 服务端流程解析 **vppcom_app_create**: 在VPP中创建应用程序的线程处理函数。此函数会执行一系列初始化步骤,包括注册工作线程、创建epoll机制,...
- 接收到服务器返回的二进制数据后,客户端将其保存为本地文件,这个过程需要正确地解析二进制数据,还原文件格式。 描述中提到,该程序可以成功传输`.dat`和`.txt`文件,但对于其他类型的文件,接收到的文件可能...
本文将深入探讨如何利用Java编程语言实现对IP和TCP协议数据包的拦截与分析,以便获取IP地址的详细信息。 首先,我们需要理解IP(Internet Protocol)和TCP(Transmission Control Protocol)的基本概念。IP协议负责...
本资料大全深入解析了Linux下TCP/IP协议栈的源码,为理解其工作原理提供了宝贵的资源。 首先,我们关注《TCPip在linux下的具体实现.doc》文档,它可能详细介绍了Linux系统如何实现TCP/IP协议的具体步骤和机制。这...
HCIA认证:深入解析OSI七层模型与TCP/IP协议簇的应用及功能
深入解析IPV6 高清版 绝对可以看 深入解析IPV6 高清版 绝对可以看
3. **数据包解析**:捕获的数据包是二进制形式,需要解析成人类可读的格式。这通常涉及到对IP、TCP和应用层协议(如HTTP、FTP等)头部的解析。 4. **过滤和显示**:根据需求,嗅探器可以过滤特定类型的包(如TCP或...
TCP三次握手是确保网络通信可靠性的重要机制。通过这个过程,两个通信节点能够确认彼此的发送和接收能力,从而建立起一个稳定的连接。理解三次握手的原理对于网络编程和故障排查至关重要。在实际应用中,开发者需要...
此外,源码还可能包含用于测试和分析的工具,例如查看TCP连接状态、捕获和解析报文段、记录网络流量等功能。这些工具对于排查网络问题、验证TCP实现的正确性以及优化网络应用性能非常有用。 总之,TCP调试助手源码...
tcptrace是一款强大的TCP端口监听工具,它能够帮助开发者和网络管理员深入理解TCP连接的状态,对WCF(Windows Communication Foundation)和SOAP(简单对象访问协议)等基于TCP的服务进行调试。本文将详细介绍tcp...
4. **源码解析**:Java源码提供了实现TCP转发的具体逻辑。通常,这包括使用Java的`ServerSocket`类创建服务器端监听,使用`Socket`类建立客户端和服务器之间的连接,以及使用输入/输出流进行数据读写。理解源码可以...
《TCP - IP协议(卷二)》是深入理解TCP/IP协议族的重要参考资料,它延续了卷一的内容,进一步探讨了TCP/IP协议的核心概念和技术。在本卷中,我们将重点解析以下几个核心知识点: 1. **IP协议**:IP是TCP/IP协议族...
在IT领域,网络通信是应用程序之间交互的重要方式,而TCP(传输控制协议)作为网络通信的基础,被广泛应用于各种系统和应用中。...对于想要深入理解和实践MFC和TCP通信的开发者来说,这是一个非常有价值的参考资料。
这些信息对于正确地构建TCP通信至关重要,因为你需要知道如何构造正确的数据包来发送到模块,以及如何解析接收到的回应。 至于"ST-MW-08S"文件,这可能是模块的驱动程序、固件更新或者是一些配置文件。这些内容可以...
本文将深入探讨《TCP/IP源码分析》一书中的关键章节内容,旨在为读者提供一份详尽的指南。 #### 二、从一个练习开始(第4页) 这一章节通过一个小练习来引入TCP/IP的基本概念。通过这个练习,读者可以了解TCP/IP...
总的来说,《TCP/IP详解》第二卷的第二部分是一份深入了解网络协议的宝贵资料,无论是对网络工程师、系统管理员还是对网络感兴趣的个人,都能从中获益匪浅。通过学习,你可以掌握构建和维护高效、可靠的网络服务所需...
本文将深入探讨如何使用C++在ROS环境下编写TCP/IP客户端和服务器端程序,确保其“绝对可用”。 首先,理解TCP/IP协议基础至关重要。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,而...