T C P提供一种面向连接的、可靠的字节流服务
在一个T C P连接中仅有两方进行彼此通信
广播和多播不能用于T C P
T C P提供可靠性的方式
• 应用数据被分割成T C P认为最适合发送的数据块
• 当T C P发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
• 当T C P收到发自T C P连接另一端的数据时,它将发送一个确认。
• 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。
• TCP将保持它首部和数据的检验和
• 既然TCP报文段作为IP据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要, TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
• 既然IP数据报会发生重复, TCP 的接收端必须丢弃重复的数据。
• TCP还能提供流量控制
TCP的编号与确认
• 按字节编号
• 确认是对收到的数据的最高序号的确认,表示期望下次收到的第一个字节的序号。
• 由于TCP能够提供全双工通信,因此,可以采用捎带确认以提高传输效率。
窗口字段 —— 占 2 字节,用来控制对方发送的数据量,TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限,也称为通知窗口。
TCP连接的建立与终止
一、建立连接
TCP 使用三次握手建立连接
在连接建立过程中要解决三个问题:
• 要使每一方能够确知对方的存在
• 要允许双方协商一些参数,如:MTU、Wmax、QoS等
• 能对运输实体的资源进行分配,如:缓存大小、连接表中的项目等。
采用Client/Server方式工作
二、释放连接
复位报文段
• 到不存在的端口的连接请求
• 异常终止一个连接
• 检测半打开连接
TCP的成块数据流
• TCP 采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节。
• 在 TCP 报文段首部的窗口字段写入的数值就是当前给对方设置的发送窗口数值的上限。
• 发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小)。
TCP 的可变滑动窗口
利用可变窗口大小进行流量控制
发送数据时,既要考虑到接收端能力,又要使网络不发生拥塞,发送窗口应满足:
• 通知窗口
接收端根据接收能力许诺的窗口值
• 拥塞窗口
发送端根据网络拥塞情况得出的窗口值,是指发送方一次可传送的字节数。
• 发送窗口
=Min[通知窗口,拥塞窗口]
TCP拥塞控制策略
主要有四种方法:慢启动、拥塞避免、快重传、快恢复。
“慢启动”是指每出现一次超时,拥塞窗口都降低到l,使报文段慢慢注人到网络中。
“加速递减”是指每出现一次超时,就将门限窗口值减半。若超时频繁出现,则门限窗口减小的速率是很快的。
“拥塞避免”是指当拥塞窗口增大到门限窗口值时,就将拥塞窗口指数增长速度降低为线性增长,避免网络再次出现拥塞。
“快重传算法”是指发送端只要一连收到三个重复的ACK即可断定有分组丢失了,就应该立即重传丢失的报文段而不必继续等待为该报文段设置的重传计时器超时,不取消重传计时器。
“ 快恢复算法”是指当发送方连续收到三个重复的报文段确认时,就把慢开始门限值缩小一半,并执行拥塞避免算法-线性增加拥塞窗口。
慢开始算法只是在TCP连接建立时和网络出现超时时使用。
TCP的超时与重传
对每个连接,T C P管理4个不同的定时器:
• 重传定时器 发出数据后启用
• 坚持定时器 使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。
• 保活定时器 可检测到一个空闲连接的另一端何时崩溃或重启。
• 2MSL定时器 测量一个连接处于TIME_WAIT状态的时间。
TCP的重传机制
• 重传机制是 TCP 中最重要和最复杂的问题之一
• TCP每发送一个报文段,就设置一次计时器T,超时未收到确认就重传。
• T太小,使得大量报文段重传,给网络增加许多不应有的负担;T太大,使网络的传输效率降低。
• 传输层的重传定时器(超时计时器)的重传时间T究竟应设置多大?最好稍大于往返时延,关键:测量往返时延
自适应算法
往返时间的测量相当复杂
• 每测量到一个新的往返时延样本,就按下式重新计算
一次平均往返时延 RTT
• 平均往返时延
• RTT = a ´ RTT旧 + (1 - a) ´ RTT新
0 £ a < 1。
参数 a 的选择
• 若 a 很接近于 1,表示新算出的平均往返时延 RTT 和原来的值相比变化不大,而新的往返时延样本的影响不大(RTT 值更新较慢)。
• 若选择 a 接近于零,则表示加权计算的平均往返时延 RTT 受新的往返时延样本的影响较大(RTT 值更新较快)。
• 典型的 a 值为 7/8。
超时重传时间 RTO (RetransmissionTime-Out)
• 计时器的 RTO 应略大于上面得出的 RTT,即:
RTO = b ´ RTT b 大于 1
• 若取 b 很接近于1 ,发送端可及时地重传丢失的报文段,因此效率得到提高。
• 但若报文段并未丢失而仅仅是增加了一点时延,那么过早地重传反而会加重网络的负担。
• 因此 TCP 原先的标准推荐将 b 值取为 2。