`
kofsky
  • 浏览: 196760 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论
阅读更多

最近在做一些网络通讯方面的程序,对通讯机制的可靠性控制,流量控制方面破为恼火。
于是又看了看TCP方面的内容,希望能从中获得些启发。尽管这些很久前学过,而且学了不止一次,但以前的理解都比较浮浅,而且实际的协议实践很少,所以,理解并不深刻,感觉。现在再看看,希望能有些新的理解与想法。
下面的是内容主要来自一位老师的课堂PPT与<用TCP/IP进行网际互联,第一卷,原理、协议与结构>一书,两者整理而得。仅为学习。

1 TCP目的:弥补UDP协议的不足,屏蔽与网络有关的故障和错误,为网络进程提供可靠通讯

2 特点

全双工通讯、Piggybacking(捎带方式)
面向数据流、无结构数据流
虚电路连接:面向连接、三次握手
流量控制、差错控制、拥塞控制
滑动窗口

提供的服务:
 流式数据服务
    1) 发送和接受,TCP都使用缓存
    2) 应用进程发送的数据首先保留在TCP发送缓存中,当数据量达到一个报文段大小时,TCP就向外发送数据。
    3) 应用进程的多个发送请求,可能对应一个TCP数据发送;
    4) 可以使用PUSH机制使应用进程的每个发送请求都对应一个TCP数据发送;
    5) TCP收到保文后存放在接收缓存中,等待应用进程读取;
    6) 一个TCP发送可以对应多个TCP读操作;多个TCP发送可以对应一个读操作。
 全双工服务
      1) 数据可以同时双向传输
      2) 确认信息可以通过数据段报文捎带。
 可靠服务
      1) 采用确认机制确保数据发送成功
      2) 采用给报文编号消除重复报文


3 TCP报文说明


序    号:已发送数据的最大序号(A发送给接收方B)
确认号:已接收的数据的最小序号+1(B发送给A)
特殊比特:
(1)   URG : 紧急比特,带外数据
       URG=1;紧急指针起作用,该指针指明紧急数据在数据流中的结束位置
(2)   ACK : 确认比特
        ACK=1;确认号有意义;否则无意义
(3)   PSH  : 立即发送比特
        PSH=1;报文采用PUSH技术传送
(4)   RST  : 复位比特
        RST=1;重建连接
(5)   SYN :  同步比特
        SYN=1且ACK=0;则该报文是一个连接请求。对方若同意建立连接,则返回报文的SYN、ACK均置1
(6)   FIN   :  终止比特
        请求释放运输连接

校验和:
采用和UDP相同的伪首部机制来计算校验和
UDP的校验和是可选的;TCP的校验和是必须的;
TCP校验和的作用与UDP是一样的。

TCP选项最多40个字节

4 TCP提供可靠通信的机理
问题
      底层协议不可靠、高层协议如何可靠
      产生的问题:报文丢失、出错、延迟、失序
(2) 解决办法
      1)报文出错:差错控制
      2)报文丢失、出错:确认、重传
      3)报文延迟:报文丢失假象:重传
                                消除重复报文(报文编号)
      4)报文失序:依序接受
      5)收发同步、协调:流控机制,滑动窗口   


5 流量控制
作用
        由于发送速率可能大于接收速率、接收缓冲区不是足够大不能缓存所有接收到的报文、接收端的应用进程未能及时从接收缓冲区读取数据等原因,TCP接收端的接收缓冲区很快就会充满;从而造成不能接收后续的数据,发送端此时发送数据也是不必要的,因此需要流控。
        流控主要解决TCP发送端和接收端间的速率匹配;即如何根据接收端的当前接收能力来调整发送端的发送速率。

(2) 解决机制
    可变滑动窗口机制
发送端滑动窗口的含义
(5) TCP 滑动窗口的特点
      1) 源端不一定要把滑动窗口中的数据全部发送出去
        2) 源端滑动窗口大小可由接收端控制,可增大、减少
        3) 接收端在任何时候均可发送确认,以捎带其希望的窗口大小
(6) TCP滑动窗口实例
  1) 若A、B两个主机上的应用进程通过TCP通信; 一方向对方传送5k数据
   2) A端应用进程作为发送端、B端应用进程作为接收端;
      连接建立时,对应该连接的A端TCP的发送缓冲区为8K;
                  对应该连接的B的接收缓冲区为4K;
      连接建立时,B端TCP通告A端TCP,其窗口大小为4K
   3) A端TCP发送完4K数据后,等待确认;
   4) B端TCP收到4K数据后,通告A端TCP其窗口大小为0;
   5) A端收到确认通告后,不发送数据(窗口不滑动、调整);
   6) B端应用进程取走1.5K数据后,发确认通告,且窗口大小为1.5K
   7) A端窗口窗口向前滑动4K,且把窗口大小调整为1.5K;
      并发送剩下的1K数据;
糊涂窗口综合症
什么是糊涂窗口综合症?
            当发送端应用进程产生数据很慢、或者接收端应用进程处理数据接收缓冲区数据很慢,或者二者兼而有之;就会使应用进程间传送的报文段很小,特别是有效载荷很小。
               极端情况下,有效载荷可能只有1个字节;而传输开销有40字节(20字节的IP头+20字节的TCP头)
               这种现象就叫糊涂窗口综合症

6 糊涂窗口综合症类别
      两大类
        发送端引起的糊涂窗口综合症,象Telnet应用;
        接收端引起的糊涂窗口综合症

(1) 窗口通告
接收端使用确认数据段的 WINDOW 字段来对发送端告知目前有多少可用的缓冲区。
(2) 问题:糊涂窗口综合症 (silly window syndrome)
每一确认只告知少量的可用空间,且每一数据段携带很小的数据量。
(3) 举例说明
若接收端的接收缓冲区已满,窗口通告 WINDOW = 0。
若接收端进程从缓冲区取走1个字节,则窗口通告
     WINDOW = 1。
则发送端可能会传送拥有一个字节的数据段。
传送小数据段会浪费不必要的网络带宽和不必要的计算开销。

接收端糊涂窗口综合症-解决办法
接收端有2种的方法:

(1) 延迟通告 (Delayed Advertisement)---Clark法
TCP对到达的数据报立即做出确认。
在送出一个窗口大小为0通告之后,至少需要等待缓冲区的可用空间达到其全部的 50% 或是达到最大尺寸的数据段 (maximum sized segment,MSS)再发通告。
(2) 推迟确认 (Delayed Acknowledgement)
标准建议使用「推迟确认」
TCP 推迟传送确认消息,直到窗口大小达到一定的量才通告窗口的可用量。
优点:降低数据量、 提高吞吐率
缺点: 不必要的重传、 造成估算往返时间的的混淆
 解决办法
推迟确认的时限 (500ms).
至少每隔一个数据段就应该确认。

发送端糊涂窗口综合症-解决办法
1) 目标
避免传送小数据段
(2) 组块技术 (Clumping)
发送端TCP在数据段发送之前必须延迟,直到聚集了足够的数据。
问题:
TCP应该等待多久才能发送数据?
若太久 ? 高延迟
若太短 ? 小数据段、低效率
解决办法:
1) 固定延迟
不能区分传送按键和传送数据这两种情况?
非最佳化
2) Nagle演算法: 自适应的延迟
算法:
    1) 发送端TCP将从应用进程接收到的第一数据块立即发送,不管其大小,哪怕只有一个字节
   2) 发送端输出第一数据后开始收集数据,并等待确认;
   3) 在确认未达到时,
            若收集数据达到窗口的一半或达到一个MSS段,立即发送
    3  确认到达,把缓冲区中的数据组成一个TCP段,然后发送

        很小的计算开销
       不需对不同的连接维持不同的计时器
       生成数据时不需检查时钟
       可适应任意的网络延迟、最大数据段尺寸、和应用进程的组合情况。


7、TCP确认与重传机制
累计确认
      确认针对数据流中的数据,不是报文段
优点
       1)无二义性;
       2)确认丢失不一定会引起重传
(3) 实例:A向B发送数据
    1)设发送端窗口为{1201,2000};分2报文段传送;
    2)第一个报文段{1201,1600},第二个报文段{1601,2000};
      B首先发回确认{1601},再发回确认{2001}
    3)若A在定时器未到之前只收到确认{2001},而{1601}丢失,则A不会重传{1201,1600}报文段;       

超时与重传
TCP环境
      报文往返时间不定、有很大差别
        A、B在一个局域网络,往返时间很小
        A、C在一个互联网内,往返时间很大
       因此,A很难确定一个固定的、与B、C通信都适用的定时器时间
(2) TCP超时重传机制
      自适应重传算法
      定时器是与连接相关的

定时器时间是由报文段的平均往返时间确定的
        TimeOut=B*RTT(Round Trip Time)

RTT的确定
        某个报文段的 RTT=收到确认的时间-发送的时间
        平均RTT=a*Old_RTT+(1-a)*New_RTT
         a接近于1的含义:时间不敏感型
         a接近于0的含义:实间敏感型

累计确认造成RTT在重传机制下是很不精确的
RTT的Karn补偿方法
基本出发点
      1) 不用重传报文,不用估算其RTT
      2) 当然就不用重传报文的RTT来修正定时器的Timeout值
(2) 发生重传时,增加Timeout
      New_Timeout=r*Old_Timeout
(3) Timeout不会无限增加,受上限约束
(4) 无重传时,重新估算Timeout值

TCP的四种定时器
重传定时器: 用于报文丢失
        丢失报文重传需要等待的时间  
 
保活定时器:用于确保TCP连接有效
        例如:客户进程和服务器建立了一个连接,客户传输了一些数据后,长时间静默;服务器如何知道客户进程还处于工作状态?
        解决办法:
        1) 服务器为每个连接设置一个保活定时器(2小时);
        2) 若收到客户报文,就将定时器复位;
        3) 一旦定时器时间到,还没收到客户报文,就发探测报文,若多次探测(10)后没有结果,就断开连接
(3) 坚持定时器:用于流控中的零窗口大小通告
    问题:若接收端向发送端通告了零窗口大小,则发送端就会一直等待接收端的非零窗口通告;
     此时,若接收端的非零窗口通告丢失,则发送端就一直等待,接收端也一直等待发送端发送新的数据;
     这样,系统就会死锁。
     解决办法:
       1) 发送端收到非零通告后,就启动坚持定时器;
       2) 在定时器未到时,就收到非零通告,则关闭该定时器;   
     3) 若定时器已到,还没有收到非零通告,就发探测报文;
       4) 若发送端未收到对探测报文的相应,就将坚持定时器的值加倍且复位;重复多次,直至出错或收到响应。

(4) 时间等待定时器:用于连接中止
     具体见TCP连接的关闭过程;
     1) TCP关闭一个连接时,并不马上认为这个连接关闭了;而是使之处于一种过渡状态;该定时器用于表明该过渡状态的时间长短;
     2)在定时器到时,收到预期报文,就真正关闭该连接;
        否则,重新进行连接关闭;多次后,强行关闭连接;

8、TCP拥塞控制
拥塞 (Congestion)
拥塞是因为报文在一个或多个路由器发生过栽而导致严重延迟
一旦发生拥塞,延迟显著增加,路由器开始将报文缓存起来,直到它有能力将其发送出去。
最坏情况下,到达拥塞路由器的报文持续增加到超过器存储能力,此时路由器就丢弃 (discard)报文。
拥塞发生时的表现
      报文传送时延增加、使得定时器超时
(2) 在拥塞情况下,定时器超时重传会加重拥塞
      直至网络瘫痪
(3) TCP拥塞处理策略
      1)假设报文丢弃大多数都是拥塞引起的
      2)加速递减机制:发生拥塞时的抑制机制:指数递减-〉1
     3)慢启动:拥塞解除时的恢复机制:指数增加
     4)拥塞避免:避免慢起动窗口增长过大的机制
            恢复:指数增加-〉线性增加

发送窗口=min(通知窗口,拥塞窗口)
通知窗口:接收方可接收数据量的大小
拥塞窗口:最大值=通知窗口
加速递减策略:发生报文丢失时的策略
      拥塞窗口成倍减少、按2的倍数减少
(5) 慢起动策略:拥塞恢复时的策略
       拥塞窗口成倍增加,按2的倍数增加

分享到:
评论

相关推荐

    TCP/IP协议与网络编程技术

    本书就是为了满足读者在这方面知识的需求而编写的一本TCP/IP协议与基于TCP/IP编程方面的书籍。 本书有以下几个方面的特点: (1)内容的组织上按照协议原理与协议编程分为上、下篇。上篇主要介绍TCP/IP协议簇中的...

    TCP/IP协议详解之卷一:协议

    “我早就知道这《TCP/IP协议详解之卷一:协议》很好,但它比我之前了解的还要好。...这《TCP/IP协议详解之卷一:协议》绝对是每一位网络程序员以及任何对TCP/IP运行方式感兴趣的技术人员的必备读物。”

    TCP/IP协议详解

    这部分简要介绍一下TCP/IP的内部结构,为讨论与...确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。

    TCP-IP详解.卷1.协议

    《TCP/IP详解卷1:协议》是网络构建原型——4.4BSD的建造者的倾力之作,《TCP/IP解析》中的第1卷,主要讲述TCP/IP协议方面的内容。与其他的TCP/IP书藉的最大不同在于,本书不仅仅讲述了RFCS的标准协议,而且结合大量...

    TCP/IP详解 卷1 协议 中文版 作者:W. Richard Stevens

    TCP/IP详解 TCP/IP两部经典著作之一。 这里是卷一。

    TCP+IP详解卷1 :协议(原书第2版)

    《计算机科学丛书·TCP/IP详解卷1:协议》是网络构建原型——4.4BSD的建造者的倾力之作,《TCP/IP解析》中的第1卷,主要讲述TCP/IP协议方面的内容。与其他的TCP/IP书藉的很大不同在于,本书不仅仅讲述了RFCS的标准...

    tcp_ip协议详解

    TCP/IP协议详解 ...确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。 TCP/IP整体构架概述

    论文研究-基于Winpcap的TCP/IP网络协议分析软件研究与设计 .pdf

    基于Winpcap的TCP/IP网络协议分析软件研究与设计,余华平,徐鹏鹏,TCP/IP网络协议分析是网络安全管理的基础之一。文章首先分析了TCP/IP协议在Windows中的实现技术和基于Winpcap的网络数据包捕获方法,然后�

    TCP/IP权威教程(第七版)

    TCP/IP协议簇已经成为当今网络通信的标准之一。我们不仅在娱乐和信息方面用到了TCP/IP协议和Internet,而且通过执行事务、买卖产品和向顾客传送服务来实施商务工作。我们还在继续扩展使用TCP/IP的应用集,从而...

    TCP/IP详解(卷一)

    本书是网络构建原型——4.4BSD的建造者的倾力之作,《TCP/IP解析》中的第1卷,主要讲述TCP/IP协议方面的内容。与其他的TCP/IP书藉的最大不同在于,本书不仅仅讲述了RFCS的标准协议,而且结合大量实例讲述了TCP/IP...

    TCP-IP详解卷1:协议

    《TCP/IP详解卷1:协议》是网络构建原型——4.4BSD的建造者的倾力之作,《TCP/IP解析》中的第1卷,主要讲述TCP/IP协议方面的内容。与其他的TCP/IP书藉的最大不同在于,本书不仅仅讲述了RFCS的标准协议,而且结合大量...

    TCP/IP详解卷1

    这部分简要介绍一下TCP/IP的内部结构,为讨论与...确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。

    嵌入式系统/ARM技术中的嵌入式系统中TCP/IP协议的精简与实现

    如何实现TCP/IP协议是嵌入式网络系统的关键技术之一,在嵌入式系统中应用TCP/IP协议的关键是,如何设计出精简、高效的TCP/IP协议子集,以此来减少对系统资源的占用。 目前使用广泛的TCP/IP协议栈有LWIP(Light Weight...

    TCP/IP详解 卷二:实现

    这部分简要介绍一下TCP/IP的内部结构,为讨论与...确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。

    《TCP-IP详解卷一:协议》

    《TCP/IP详解 卷1:协议》是网络构建原型——4.4BSD的建造者的倾力之作,《TCP/IP解析》中的第 1卷,主要讲述TCP/IP协议方面的内容。与其他的TCP/IP书藉的最大不同在于,本书不 仅仅讲述了RFCS的标准协议,而且结合...

    Microchip TCPIP协议栈

    司自己免费提供的TCP/IP协议栈。 Microchip TCP/IP 协议栈是一套程序,它服务于标准 的、基于TCP/IP的应用程序(HTTP 服务器或邮件客 户机等),或者使用在定制的、基于TCP/IP的应用程序 中。为了更好地说明这一点...

    TCP/IP协议,网络协议标准

    tcp/ip协议时目前使用最为广泛、不依赖于特定硬件平台的网络协议之一,是internet采用的标准协议

    TCP/IP详解 1,2,3卷

    《TCP/IP详解卷1:协议》是网络构建原型——4.4BSD的建造者的倾力之作,《TCP/IP解析》中的第1卷,主要讲述TCP/IP协议方面的内容。与其他的TCP/IP书藉的最大不同在于,本书不仅仅讲述了RFCS的标准协议,而且结合大量...

    TCP/IP 详解 1-3卷

    这部分简要介绍一下TCP/IP的内部结构,为讨论与...确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。

    TCP/IP详解系列第二卷之部分一

    本书完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15 000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机实现与路由器实现的差别...

Global site tag (gtag.js) - Google Analytics