网络--TCP/IP(五)TCP 协议详解

上节中说过TCP是面向有连接的协议,具有丢包重发和流量控制的功能,这是他区别与UDP的最大特点。
这节我们就将这两个功能:丢包重发流量控制

一、数据包重发

1. 数据发送

  1. 丢包重发的前提是发送方能够知道接收方是否成功的接收了消息。所以,在TCP协议中接收方会给发送方返回一个通知,也叫做确认应答(ACK),这表示接收方已经接收到了数据包。
    根据之前对TCP首部的分析得知,ACK确认应答包中的Ack(确认应答号)应该与发送方下次发送的数据包的序列号(Seq)相等。因此Ack可以理解为:“发送方,下次你从这个位置开始发送,之前的我都收到了。”
ACK确认应答
  1. 数据包和应答包都有可能丢失,如果发送方在一段时间内没有收到ACK,就会重发数据:

未收到ACK时重发数据

即使网络正常,由于网络延迟等因素,接收方也有可能收到重复的数据包。因此接收方需要通过TCP首部中的序列号(Seq)来判断这个数据包是否曾经接受过,如果已经接收过,则丢弃这个数据包。

2. 重传超时时间(RTO)

如果发送方等待一段时间以后还没有收到ACK确认应答,就会启动超时重传。这个等待的时间就被称为重传超时时间(RTO,Retransmission Timeout)。
首先,RTO不是固定的,它是动态变化的时候,这个时间总是略大于连接往返时间(Round Trip Time)。这个很好理解:“如果数据发送给对方,再返回回来需要10秒,那我登12秒,超过了12秒,我估计是不会回来了”。
RTT是动态变化的,因为谁也不知道网络下一刻是否拥堵。而当前的RTO需要根据未来的RTT估算获得。RTO不能估算太大,否则会等待过长时间:也不能估算太小,否则会因网速突然变慢,而将不该重传的数据进行重传。
RTO有自己的计算公式,保证即使RTT波动较大,它的变化也不会太剧烈。具体的可以自行查阅相关资料。

3. TCP窗口

按照之前的理论,在数据包发送之后,直至ACK确认之前,发送端都无法再发送数据,这而且包的往返时间越长,网络的利用率和通信性能就越低。
为了解决这个问题,TCP使用了“窗口”这个概念。窗口具有大小,它表示无需等待确认应答就可以继续发送数据包的最大数量。可以理解成接收端所能提供的缓冲区大小。比如窗口大小为4000时,数据发送示意图如下:

窗口大小为4
  1. 不等确认就发送连续的数据包会不会有问题呢?
    我们最大TCP首部中的确认应答号表示接收方已经收到的数据的最后位置。因此接收方成功接收了1~1000的数据后,会发送一个确认应答号=1001的ACK包。假设1001-2000的数据包丢失了,由于窗口长度比较大,发送方还会继续发送2001-3000数据包,接收端并不会返回这个数据包的确认,因为它最后收到的数据还是1-1000的数据包,所以接收端返回的ACK包的确认应答码还是1001。这表示:发数据的,先别发了,你发的1001字节开始的数据还没来呢。”可以预见到,发送端以后每次发送的数据包的ACK包中的确认应答号都是1001,当连续三次收到确认之后,发送方会知道“这个包的数据对方还没有收到,需要重传”。
    因此引入窗口这个概念后,被发送的数据不能立刻丢弃,需要缓存起来以备将来的重发。
  2. 如果是确认包丢失了呢?
    这就是窗口最擅长处理的问题了。假设接收方发送的ACK确认包,第一个确认应答号是1001,第二个确认应答号是4001,那么我们完全相信中间两个包是被成功接收的。因为如果接收方没有接收到数据包,接收方的ACK包中的确认应答号是不会增加的
某些数据包丢失不重传

这种情况下,如果不使用窗口,发送方就需要重传第二、三个数据包了。因此使用窗口实际上可以理解为“空间换时间”。

二、流量控制

1. 窗口大小

如果窗口过大,会导致接收方的缓存区溢出,这时候数据就会被丢弃了,就会导致无意义的重传。因此,窗口大小是一个可以改变的值,它由接收端主机控制,附加在TCP首部的“窗口大小”字段中

2. 慢启动

在连接建立的初期,如果窗口比较大,发送方可能会突然发送大量的数据,导致网络瘫痪。因此,在通信的一开始,TCP会通过慢启动算法,得出窗口的大小,对发送数据量进行控制。
慢启动是一种TCP拥塞控制机制
慢启动算法的基本思想是当TCP开始在一个网络中传输数据或发现数据丢失并开始重发时,首先慢慢的对网路实际容量进行试探,避免由于发送了过量的数据而导致阻塞
慢启动的过程如下:

慢启动过程
  1. 通信一开始,发送方的拥塞窗口大小设置为1。然后每收到一个ACK应答包,拥塞窗口的数量就翻倍
  2. 由于指数增长,很快就会出现应答包超时。此时设置一个慢启动阀值为拥塞窗口的一半,拥塞窗口重新设置为1。
  3. 继续,每收到一个ACK应打包,拥塞窗口翻倍。直到到达之前设置的阀值,拥塞窗口不在翻倍,而是线性的加1。
  4. 随着窗口不断增加,可能会收到三次重复确认应答,进入“快速重发阶段”。这时候再将慢启动阀值设置为窗口数的一半,再将拥塞窗口设置为阀值大小。
  5. 拥塞窗口线性加1增加,直至下次出现三次重复确认应答或超时。

流量控制,是通过发送方和接收方共同控制的。刚刚我们说了接收方会把自己能够承受的最大窗口卸载在TCP首部中的,那么在发送方,也存在流量控制,它叫拥塞窗口。所以TCP协议中的窗口是发送方拥塞窗口和接收端能承受的窗口中的较小值。

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

推荐阅读更多精彩内容

  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,034评论 6 174
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 前言 开始这篇文章之前,我非常的紧张,因为要写好这个TCP协议说实话并不简单。作为TCP/IP协议簇最为核心的部分...
    Noskthing阅读 2,266评论 1 17
  • TCP/IP协议 作者:xinyuans 本文为参考TCP/IP详解卷一,某些知识点加上了作者自己的理解,如有错误...
    xinyuans阅读 782评论 0 1
  • 传输层-TCP, TCP头部结构 ,TCP序列号和确认号详解 TCP主要解决下面的三个问题 1.数据的可靠传输...
    抓兔子的猫阅读 4,498评论 1 46