第7章传输控制协议TCP
要求:
1. 掌握TCP的可靠性机制:确认、重传、序号;
2. 掌握TCP的流控和提高传输效率策略:滑动窗口机制;
3. 掌握TCP连接的建立与关闭协议:三次握手;
4. 掌握TCP的报文段格式;
5. 掌握TCP的拥塞控制技术;
6. 掌握TCP避免糊涂窗口综合症的技术;
7. 了解紧急数据发送和强迫数据发送。
7.1 概述
要实现可靠的数据流传输服务,
必须解决哪几个问题?
1.可靠性:
①防丢失:确认与重传;
②防重复:报文段序号;
2.传输效率、流量控制:滑动窗口机制;
3.拥塞控制:加速递减与慢启动技术;
4.建立连接:三次握手协议;
5.关闭连接:改进的三次握手协议。
可靠传输服务有哪些特点?
①面向数据流;
②虚电路连接;
③有缓冲的传输;
④无结构的数据流;
⑤全双工连接。
7.2 提供可靠性
①接收方收到
数据接收方
两个问题:
定时器时限设置多长?
2. 防重复–可捎带的累计确认技术
①为每一分组赋予序号。
②确认时也指明确认哪个分组。
③序号同时保证了分组间的正确顺序。
3. RTT与重传定时器
问题:超时重传,如何设置定时器的时限?
两个概念:
①RTT:往返时间,报文段发出到收到确认信息间的时间段。
②自适应重传算法:监视每个连接的性能,由此推算出合适的定时时限。
当连接的性能变化时,随时修改定时时限。
重传定时时限的计算方法:
①早期的方法
②改进的方法
③Karn算法和定时器补偿
(1)早期的方法
R:RTT的估计值
M:本次测量的RTT值
RT0:定时时限
修改估计值:R ←αR + (1-α)M
(0≤α<1,通常取α=0.9)
计算时限:RT0 = βR
(β早期取2,后改为4)
缺陷:在RTT变化较大的场合,说明网络某处处于拥塞状态,但上述方法对此反映不敏感,从而造成不必要的重传,进一步加重网络负担。
(2)改进的方法
R:
M:本次测量的RTT值
RT0:定时时限
Diff:差值
Dev :平均偏差的估计值
Diff ←M -R
R ←R + δ*Diff
Dev ←Dev +ρ*(|Diff| -Dev) (Dev RT0 ←R +η*Dev
δ、ρ在0—1之间,通常取:
δ= 1/23,ρ= 1/22,η= 22
(3)Karn算法和定时器补偿
确认二义性:
哪一次传输的确认无法确定。
结果:RTT样本值无法使用;
Karn算法:
思想:当超时重传发生时,不再更新
忽略重传样本。
定时器补偿:
超时重传发生,加大定时时限:
(γ通常取2,即指数避退)。
对重传分组的后续分组,定时时限不变,直到获得一个新的有效样本时再更改时限值。
7.3 传输效率和流量控制-滑动窗口机制1.一般的滑动窗口机制
的确认未到时,则暂停发送。
不能发送
3. TCP端到端流量控制-窗口大小可变技术
时机:
发送窗口,初
7.4 糊涂窗口综合症SWS
1.什么是SWS?
接收方的小窗口通告造成发送方发送一系列小的报文段,严重浪费网络带宽。
2.启发式的避免策略:
接收方:
(1)避免小窗口通告,在零窗口通告之后,只在可用缓冲区显著增加(缓冲区空间的一半或一个MSS)后才发送新的窗口通告
(2)推迟确认(最多500ms),
SWS策略所需的尺寸时,不确认。
为了使发送方正确估计RTT,至少每隔一个报文段要进行正常的确认。
发送方:
Nagle算法:
(2)当缓冲区中数据不足一个报文段,则推迟发送。
等到一个确认来到(确认触发)时,发送缓冲区中的小报文段。
问题:可能出现死锁吗?
确认丢失。
3.说明
①Nagle算法的两个优点:
自适应:确认到达得越快,数据也就发送得越快;
计算简单:不需要定时器。
②可关闭Nagle算法,应用程序接口一般提供选项TCP-NODELAY来关闭Nagle算法。
7.5 TCP拥塞控制技术
拥塞:交换节点(如路由器)数据报负载过重的现象。
回顾:IP层的拥塞控制技术:
(ICMP源站抑制报文),是一种被动机制。
TCP拥塞控制的必要性:在TCP
时延增加,这又会造成超时重传,控制不当会进一步加重拥塞。
TCP采用了一种主动控制机制。
7.6 TCP报文
紧急指针
首部长度:
序号:
确认号:希望接收的对方下一报文段序号
到的数据字节序+1)
说明:
(1)序号和确认序号在一起使得确认可捎带进行。
(2)TCP采用累计确认策略。
问题:采用累计确认,确认丢失不一迫使发送方重传,为什么?
(3) TCP采用经受时延的确认(时延一般为
缺点:发送方无法收到所有成功传输的报文段的确认信息,对往返时间样本的精确测量带来影响。
窗口:
码元比特(标识报文段的目的与内容):
选项:
选项:
窗口定义从16bit扩大到32bit。
时间戳选项:
发送方填
解决:TCP为每个连接保留一个时间戳数值。
1. TCP设置两个变量:
(1)tsrecent:每个连接的时间戳数值;
(2)lastack: 最后发送的ACK的确认序号;
2. 当包含lastack的报文段到达时,其中的时间戳被保存至tsrecent;
3. 无论何时发送确认,tsrecent将被写入时间戳回显应答字段,确认序号则被保存到lastack。
字节的两个报文段到
7.7 TCP连接的建立与关闭功能:
始序列号)协商(不能为
说明:
网点1网点2
②TCP提供了半关闭
一个DOS命令:Netstat
Active Connections
Proto Local Address Foreign Address State
TCP koukou:1056 202.196.56.240:https ESTABLISHED
Netstat–o:列出与每个端口相关的进程
Netstat–r:显示路由表
7.8 紧急数据和强迫数据发送1. 紧急数据发送和带外数据
2. 强迫数据发送
应用背景:
通常,TCP为提高网络利用率,在缓冲区中积累够一个最大报文段容量的数据后才发送。
在交互环境或实时性要求高的场合,每条命令(甚至每个字符)希望及时传送。
供推(PUSH)操作,以强迫发送当前数据流中的数据而不必等待缓冲区满。
应用方式:
发送方将PSH置“1”,以通知接收方尽快把该报文段数据交应用程序。
7.9TCP的定时器
1. 重传定时器:
设定丢失重传的时间间隔。
2. 坚持定时器
在接收方发出‘0’窗口通告后,发送方为了防止死锁发生,用一个坚持定时器周期性地向接收方发送窗口探察报文,防止“0”窗口通告后窗口恢复通告丢失后造成死锁。
3. 保活定时器(间隔:2小时)
在服务器端检测半开放的连接。
如果一个给定的连接在两个小时内没有任何动作,则服务器会向客户端发送一个探察报文段,根据响应情况进行处理。
客户机可能的四种状态:
①客户机正常工作,并从服务器可达:
定时器复位;若期间有通信,通信后2小时再复位;
②客户机崩溃:服务器连续发10个探察报文,回应超时时间间隔设置为75秒,若始终没有回应,则终止连接;
③客户机崩溃后重新启动:服务器收到
文,终止连接;
④客户机正常工作,但从服务器不可达:
7.11 TCP攻击实例
H冒充B攻击A
1. IP欺骗:
2. TCP端口扫描
TCP实现的基本规则:
①全连接扫描
扫描主机用三次握手与目的机指定端口建立正规连接。
实现方式:connect( )函数调用,若端口打开则连接成功,否则失败。
优点:实现简单
缺点:很容易被发现,目前通常被禁止
②半开扫描(SYN扫描)
(1)发SYN报文到目的主机的目标端口
(2)若目标返回SYN+ACK,则端口开放,否则回
(3)若端口开放,则发送RST给目标,从而终止连接
半开的含义:全连接尚未建立
缺点:不能用socket编程实现,优点:
③Fin扫描
(1)发送FIN报文到目标主机的目标端口
(2)若返回RST,则端口关闭,否则端口打开缺点:不能用socket编程实现,
优点:不容易被发现
3.SYN Flood (DoS、DDoS)
(1)TCP服务器的设计
并发特性:可处理多个呼入连接请求!每到达一个请求,调用一个进程处理。
Berkeley的服务器TCP实现规则:
◆设置长度固定的连接队列,其中的连接已被
受,但没有被应用接受;TCP接受连接是将其写入该队列,应用层接受该连接是将其从队列中移出。
◆应用层指明队列的最大长度
◆连接请求(SYN)到达时,若队列中还有空间,则接收这个连接并确认;
◆若无空间,不理会该请求,也不作回应。
(2)SYN Flood的原理
发送大量伪造的TCP请求,填满呼入请求队列,则服务器无法响应正常的连接请求,并且
最终被耗尽。