UDP、可靠性传输及TCP

UDP

UDP报文段结构

长度字段:在UDP报文段中的字节数(首部加数据)

检验和:接收方检查报文段中是否出现了差错,计算时,除了UDP报文段还包括IP首部的一些字段。发送方的UDP对报文段中的所有16比特字的和进行反码运算,遇到溢出即被回卷。

如何计算检验和:

假定有3个16比特的字:

检验和的计算

将结果反码运算得到最终结果,即为检验和。接收方将包括检验和的4个16比特字加在一起,若没差错则全为1。

为什么UDP首先提供了检验和:

1)不能保证源和目的之间的所有链路都提供差错检测。

2)但它对差错恢复无能为力,只能丢弃或交给应用程序并警告。


可靠数据传输原理

为上层实体提供的服务抽象:数据可以通过一条可靠的信道传输,所有数据按照发送顺序进行交付。底层信道将不会对分组重排序。

可靠数据传输:服务模型与服务实现

构造可靠数据传输协议(reliable data transfer protocol)

1)经完全可靠信道

所有分组从发送方流向接收方,接收端无需提供任何反馈信息给发送方

2)经具有比特差错信道

基于重传机制的rdtp称为自动重传请求协议(Automatic Repeat request,ARQ)

ARQ协议中还需另外三种协议功能处理比特差错:

差错检测(检验和)、接收方反馈(ACK和NAK)、重传

当发送方处于等待ACK或NAK的状态时,它不能从上层获得更多的数据。发送方将不会发送一块新数据,除非发送方确信接收方已正确接收当前分组。

如果一个ACK或NAK分组受损,发送方无法知道接收方是否正确接收了上一块发送的数据。

处理受损ACK和NAK

在数据分组中添加一新字段,让发送方对其数据分组编号,即将发送数据分组的序号(sequence number)放在该字段

3)经具有比特差错的丢包信道

怎样检测丢包以及发生丢包后该做什么?让发送方负责检测和恢复丢包工作:

至少等待这样长时间确定丢包:发送方与接收方之间的一个往返时延加上接收方处理一个分组所需的时间。发送方选择一个时间值,以判定可能发生了丢包。

发送方重传:一个数据分组丢失、一个ACK丢失或者该分组或ACK过度延时。

实现基于时间的重传机制,需要一个倒计数定时器,在一个给定的时间量过期后,可中断发送方。

发送方需要做到:

每次发送一个分组(包括第一次分组和重传分组)时,便启动一个定时器

响应定时器中断

终止定时器


解决流水线的差错恢复

1、GBN(滑动窗口协议)

那些已经被发送但还未确认的分组的许可序号范围被看成是一个在序号范围内长度为N的窗口。

GBN发送方必须响应三种类型的事件:上层的调用、收到一个ACK、超时事件。

基于事件的编程

协议栈中实现该协议可能是以各种过程形式出现,每个过程实现了在响应各种可能出现的事件时要采取的动作。

这些过程要么被协议栈中的其他过程调用,要么作为一次中断结果。

在发送方,这些事件包括:来自上层实体的调用、定时器中断、报文到达时来自下层的调用。

GBN发送方的扩展有限状态机(FSM)描述
GBN接收方的扩展有限状态机(FSM)描述

2、选择重传协议

1)GBN协议潜在地允许发送方用多个分组“填充流水线”,避免了停等协议的信道利用率问题。

2)单个分组的差错会引起CBN重传大量分组。

通过让发送方仅重传那些它怀疑在接收方出错(即丢失或受损)的分组而避免了不必要的重传。

SR发送方的事件与动作
SR接收方的事件与动作

对于哪些分组已经被正确接收,哪些没有,发送方和接收方并不总能看到相同的结果,意味着发送方和接收方的窗口并不总是一致。

窗口的长度必须小于或等于序号空间大小的一半。

在高速网络的TCP扩展中,最长的分组寿命被假定为大约3分钟,避免分组序号重用。

可靠数据传输机制及其用途的总结


TCP

1、TCP连接

1)中间路由器对TCP连接完全视而不见,它们看到的是数据报,而不是连接。

2)TCP连接提供的是全双工服务,也总是点对点的。

2、TCP报文段结构(数据字段的最大长度为1460字节)


TCP报文段

3、序号和确认号

TCP把数据看成一个无结构的、有序的字节流。

序号是建立在传送的字节流之上,而不是建立在传送的报文段的序列之上。

一个报文段的序号是该报文段首字节的字节流编号。

4、估计往返时间

报文段的样本RTT:从某报文段被发出(即交给IP)到对该报文段的确认被收到之间的时间量。

在任意时刻,仅为一个已发送的但目前尚未被确认的报文段估计SampleRTT,为了估计一个典型的RTT,采取某种对SampleRTT取平均的方法。一旦获得一个新的SampleRTT时,更新EstimatedRTT:

EstimatedRTT =(1-a)* EstimatedRTT + a * SampleRTT(a的参考值为0.125)

5、测量RTT的变化

RTT的偏差DevRTT,用于估算SampleRTT一般会偏离EstimatedRTT的程度:

DevRTT =(1-b)* DevRTT + b * | SampleRTT– EstimatedRTT |

该值是一个SampleRTT与EstimatedRTT之间差值的指数加权移动平均(EWMA)

6、设置和管理重传超时间隔

应大于等于EstimatedRTT,所以设为EstimatedRTT加上一定余量。

当SampleRTT值波动较大时,余量大些;波动较小时,余量小些。

TimeoutInterval = EstimatedRTT + 4 * DevRTT

推荐的初始TimeoutInterval值为1秒,当出现超时后,值加倍,以免即将被确认的后继报文段过早出现超时。

可靠数据传输:简化的TCP发送方

7、超时间隔加倍

每当超时事件发生时,TCP重传具有最小序号的还未被确认的报文段。每次重传将下一次的超时间隔设为先前值的两倍,而不是用从EstimatedRTT和DevRTT推算出的值。

每当定时器在另两个事件(收到上层应用的数据和收到ACK)中的任意一个启动时,TimeoutInterval由最近的EstimatedRTT和DevRTT值推算得出。

8、快速重传

超时触发重传存在的问题之一是超时周期可能相对较长,增加了端到端时延。

发送当通常可在超时事件发生之前通过冗余ACK检测丢包。

如果TCP发送方接收到对相同数据的3个冗余ACK,说明跟在这个已被确认过3次的报文段之后的报文段已经丢失。此时,立即执行快速重传,即在该报文段的定时器过期之前重传丢失的报文段。

ACK收到事件的代码表示

TCP是一个GBN协议还是一个SR协议?

TCP确认是累积式的,正确接收但失序的报文段是不会被接收方逐个确认的。

TCP发送方仅需维持已发送但未被确认的字节的最小序号。

这种意义下,TCP更像一个GBN协议。

区别:TCP实现会将正确接收但失序的报文段缓存,当某个分组丢失,TCP至多重传这一个分组,甚至不会重传。

选择确认允许TCP接收方有选择的确认失序报文段,而不是累积的确认,当其与选择重传机制结合时,TCP又像SR协议。

因此,TCP的差错恢复机制为二者的结合体。


流量控制

TCP为应用程序提供了流量控制服务(flow-control service),以消除发送方使接收方缓存溢出的可能性。

流量控制是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读取速率相匹配。

TCP通过让发送方维护一个称为接收窗口的变量来提供流量控制,接收窗口用于给发送方一个指示——该接收方还有多少可用的缓存空间。

TCP拥塞控制

方法:让每一个发送方根据所感知到的网络拥塞程度来限制其能像连接发送流量的速率。

1)一个TCP发送方如何限制它向其连接发送流量的速率呢?

TCP连接的每一端都是由一个接收缓存、发送缓存和几个变量组成。

发送方跟踪一个额外的变量,即拥塞窗口,表示为cwnd。

在一个发送方中未被确认的数据量不会超过cwnd与rwnd中的最小值。

2)一个TCP发送方如何感知从它到目的地之间的路径上存在拥塞呢?

发送方的丢包事件(要么超时或收到3个冗余ACK)

给定调节cwnd值以控制发送速率的机制,TCP发送方怎样确定它应当发送的速率呢?

一个丢失的报文段表意味着拥塞,因此当丢失报文段时应当降低TCP发送方的速率。

一个确认报文段指示该网络正在向接收方交付发送方的报文段,当对先前未确认报文段的确认到达时,增加发送方的速率。

带宽探测。

3)当发送方感知到端到端的拥塞时,采用何种算法来改变其发送速率呢?

TCP拥塞控制的有限状态机(FSM)描述
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容