`
吃货吃货
  • 浏览: 31981 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

TCP深入解析(二)

阅读更多

TCP深入解析(二)

——TCP差错恢复方法

在上篇TCP的博客中我们就提及过这个问题,那么就是关于数据传输协议怎么处理丢失、损坏及延时过大的分组,而在流水线技术中的两种基本差错恢复方法就是:回退N步(GBN)和选择重传(SR)。

首先当然是截取至百度百科的相关定义:

只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。

发送窗口和接收窗口的大小都等于 1时,就是停止等待协议

发送窗口大于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协议的混合体。

  • 大小: 174.3 KB
12
4
分享到:
评论

相关推荐

    深入解析TCP、HTTP、Socket、Socket连接池.rar

    深入解析TCP、HTTP、Socket、Socket连接池.rar

    深入解析IPV6 高清版 绝对可以看(3-1)

    深入解析IPV6 高清版 绝对可以看 深入解析IPV6 高清版 绝对可以看

    深入解析Windows操作系统中文.part2.rar

    深入解析WINDOWS操作系统(第4版) ISBN:9787121039690 本书是著名的操作系统内核专家Mark Russinovich和David Solomon撰写的Windows操作系统原理的最新版著作,全面和深入地阐述了Windows操作系统的整体结构以及...

    TCP/IP高效编程(Effective TCP/IP Programming)

    《tcp/ip高效编程:改善网络程序的44个技巧》是tcp/ip 领域的经典著作,对tcp/ip 网络编程中存在的各种问题进行了全面解析,旨在帮助读者深入透彻地理解tcp/ip 网络编程。本书组织方式比较特别,正文部分包括4 章,将...

    ACE技术内幕:深入解析ACE架构设计与实现原理

    《ace技术内幕:深入解析ace架构设计与实现原理》从构架模式、编程示例和源代码3个维度系统地对经典网络框架ace(adaptivemunicationenvironment)的架构设计和实现原理进行了深入分析,它能解决4个方面的问题:,...

    Linux下TCP/IP服务器实现源码解析(含源码)

    对于菜鸟接触linux,网络是由浅入深的步步提高深化的源码解析笔记! 其中不乏老鸟也需要深入的技术! (内附赠送linux内核分析图和linux文件解析表) 希望大家互相交流 共同进步!! 拜交好友!

    TCP为什么需要进行三次握手深入解析

    本文将详细介绍TCP为什么需要进行三次握手,需要深入了解的朋友可以参考下

    TCPIP详解--共三卷

    TCP/IP详解 卷1:协议 译者序 前言 第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 ...

    深入理解nginx模块开发与架构解析第二版

    帮助读者了解一般Nginx模块的用法,然后重点介绍了女口何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发—个功能复杂的模块所需要了解的各种知识,并对内存池的实现细节及TCP协议进行了详细介绍;...

    TCP协议中,Socket编程的通信原理深度解析

    本文档分析了TCP协议中利用Socket编程所使用的一些重要函数,并深入分析了Socket通信所使用的一些技术。

    深入理解Nginx模块开发与架构解析第2版PDF

    帮助读者了解一般Nginx模块的用法,然后重点介绍了女口何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发—个功能复杂的模块所需要了解的各种知识,并对内存池的实现细节及TCP协议进行了详细介绍;...

    深入理解Nginx模块开发与架构解析第2版pfd版带书签

    但如果希望通过阅读本书的第二、第三两部分,来学习Nginx的模块开发和架构设计 技巧时,则必须了解C语言的基本语法。在阅读本书第三部分时,需要读者对TCP有一个基 本的了解,同时对Linux操作系统也应该有简单的了解...

    TCPIP高效编程:改善网络程序的44个技巧 PDF中文版带书签-目录

    《TCP/IP高效编程:改善网络程序的44个技巧》是TCP/IP 领域历久弥新的经典著作,网络编程人员必备,对TCP/IP 网络编程中存在的各种问题进行了全面解析,旨在帮助读者深入透彻地理解TCP/IP 网络编程。本书组织方式比较...

    TCP-IP详解

    是本通俗易懂的内核入门书籍。虽不是大牛写的,但对内核代码做了较深入的解析,值得一读

    深入理解Nginx模块开发与架构解析(第2版).zip

    帮助读者了解一般Nginx模块的用法,然后重点介绍了女口何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发—个功能复杂的模块所需要了解的各种知识,并对内存池的实现细节及TCP协议进行了详细介绍;...

    深入理解Nginx模块开发与架构解析第2版LinuxUnix技术丛书-4.pdf

    帮助读者了解一般Nginx模块的用法,然后重点介绍了如何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发一个功能复杂的模块所需要了解的各种知识,并对内存池的实现细节及TCP协议进行了详细介绍;...

    深入理解Android网络编程技术详解与最佳实践(带书签目录高清完整版).陈文.郭依正.pdf

    不仅系统讲解了Android网络编程的各项核心技术和功能模块,通过多个案例解读了Android网络编程的方法和技巧,而且从源码角度深入解析了Android核心网络处理方法和关键应用的实现原理,包含大量最佳实践。  全书共11...

    深入理解Nginx:模块开发与架构解析 陶辉

    本书适合以下读者阅读。❑对Nginx及如何将它搭建成一个高性能的Web服务器感兴趣的读者。...❑希望了解Nginx的架构设计,学习怎样...❑希望利用Nginx提供的框架,设计出任何基于TCP的、无阻塞的、易于扩展的服务器的读者。

    入侵检测方法探索vc.rar

    本文深入研究了TCP/IP协议组中的TCP,IP,UDP协议,数据包地分析,入侵检测方法,NIDS入侵规则的建立,DNS服务器的建立,TCP连接的跟踪。利用VC++开发工具实现数据实时抓包,对数据包实时分析,根据端口,协议,IP...

    Linux高性能服务器编程

    4.6 HTTP通信 4.6.1 HTTP请求 4.6.2 HTTP应答 4.7 实例总结 第二篇 深入解析高性能服务器编程第5章 Linux网络编程基础API 5.1 socket地址API 5.1.1 主机字节序和网络字节序 5.1.2 通用socket地址 5.1.3 ...

Global site tag (gtag.js) - Google Analytics