最近在做一些网络通讯方面的程序,对通讯机制的可靠性控制,流量控制方面破为恼火。
于是又看了看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的倍数增加
分享到:
相关推荐
网际协议(IP)是tcp/ip协议的核心协议之一,负责将数据从源主机传输到目的主机。在这个实验中,学生将学习IP协议的工作原理,并了解其在tcp/ip协议中的作用。 实验四 Internet 控制报文协议 ICMP Internet控制报文...
应用层是TCP/IP协议族的最高层,涉及了一系列的应用协议,如HTTP和HTTPS,这些协议定义了应用程序如何在传输层之上发送和接收数据。HTTP(超文本传输协议)是用于从服务器传输超文本到本地浏览器的传输协议。HTTPS是...
在当今网络通信领域中,TCP/IP协议是最基础也是最重要的协议之一。TCP/IP协议是互联网通信的基础,它规定了设备之间进行通信的规则。"图解TCP/IP协议"这一主题将详细介绍TCP/IP协议的工作过程,其中涉及了建立连接、...
本书就是为了满足读者在这方面知识的需求而编写的一本TCP/IP协议与基于TCP/IP编程方面的书籍。 本书有以下几个方面的特点: (1)内容的组织上按照协议原理与协议编程分为上、下篇。上篇主要介绍TCP/IP协议簇中的...
这一卷主要讲解了TCP/IP协议的基础理论和工作原理。它详细阐述了网络接口层(如以太网)、互联网层(包括IP协议、ICMP协议、ARP协议和RARP协议)、传输层(重点讨论TCP和UDP协议)以及应用层的各种协议(如FTP、...
TCP/IP协议是互联网的核心协议,它定义了网络设备如何交换数据以及如何寻址。这个协议族包括多个层次,每个层次负责不同的通信职责,从物理层的比特传输到应用层的数据交换,都由TCP/IP协议来规范。让我们深入探讨...
TCP/IP协议作为互联网通信的基础架构之一,其重要性不言而喻。通过提供可靠的、灵活的、开放的通信框架,TCP/IP协议支持全球范围内的数据通信和信息共享。随着技术的不断进步和网络环境的日益复杂化,TCP/IP协议将...
#### 一、TCP/IP协议简介 TCP/IP(Transmission Control Protocol/Internet Protocol)是一组用于实现互联网通信的标准协议集。它不仅定义了数据在网络中的传输方式,还规定了如何控制数据包的发送与接收。TCP/IP...
TCP/IP协议作为最常用的标准网络通信协议之一,在嵌入式系统中的应用非常广泛。然而,传统的TCP/IP协议栈设计更加侧重于数据传输的可靠性和流量控制,这在一定程度上牺牲了实时性。对于那些对实时性有较高要求的应用...
IP协议在TCP之上,负责数据的路由和传输。它将数据分解成较小的数据包,称为IP数据报,每个数据报包含源和目的地址,以便在网络中正确传递。IP协议不保证数据的顺序或可靠性,这些任务由TCP协议处理。 TCP/IP模型的...
TCP/IP协议体系是现代互联网技术的核心基础之一,其分层的设计理念确保了系统的灵活性和可扩展性。通过深入理解TCP/IP协议的各个层面及其工作机制,可以帮助我们更好地设计和优化网络系统,解决复杂的网络问题。
### 使用TCP/IP协议栈指纹进行远程操作系统辨识 #### 概述 本文旨在探讨通过查询目标主机的TCP/IP协议栈来获取有价值的信息的一种方法:即使用TCP/IP协议栈指纹技术进行远程操作系统辨识。该技术不仅可以帮助我们...
《TCP/IP三卷合集》是网络通信领域的一部经典之作,由W.Richard Stevens撰写,涵盖了TCP/IP协议族的各个方面。这本书分为三个部分,分别深入探讨了TCP/IP协议的基础、实现以及高级应用。 第一卷《TCP/IP详解卷一:...
《TCP/IP协议详解 卷二 实现 part2》是计算机网络领域的经典之作,它深入剖析了TCP/IP协议栈的实现细节,为读者提供了全面而深入的理解。本卷主要聚焦于网络层、传输层以及应用层协议的实际操作和交互,帮助读者在...
该书深入浅出地讲解了TCP/IP协议族,是网络工程师和相关技术人员必备的参考资料之一。TCP/IP协议族是现代互联网通信的基础,它包括了一系列用于网络数据传输的协议,这些协议共同协作,确保了数据可以跨越多个网络,...
“我早就知道这《TCP/IP协议详解之卷一:协议》很好,但它比我之前了解的还要好。...这《TCP/IP协议详解之卷一:协议》绝对是每一位网络程序员以及任何对TCP/IP运行方式感兴趣的技术人员的必备读物。”
TCP/IP协议族是互联网通信的基础,它定义了网络设备如何互相连接、通信和交换数据。这个协议族由多个层次的协议组成,包括应用层、传输层、网络层和链路层,每一层都有其特定的功能和协议。在这个“Tcp/Ip协议族讲解...
TCP/IP(Transmission Control Protocol/Internet Protocol)协议是互联网的核心协议之一,它定义了数据在网络中的传输方式。本卷作为TCP/IP协议的详细介绍第一部分,预计会涵盖协议的基本概念、原理以及在网络通信...