第十二章 传输控制协议TCP

12.1 引言

UDP协议能够检测接收到的数据是否有差错,但是不能纠正
纠正的意思是恢复接受道德错误数据,第二就是重新发送

主要是香农的差错校验码,和更为简单的尝试重新发送。

12.1.1 ARQ和重传

分组重新排序,分组复制,分组泯灭(丢失)

构造一个可靠的传输方式,主要要考虑:

  • 对方是否已经接受到分组
    接收方,接收到数据包后,发送ACK确认
  • 接收到的分组是否是所需要的
    判断是否重复,判断分组中的数据是否有错误。
    所以,需要对每个分组编号,然后数据报中添加校验和
  • 如何控制发送速率
    避免接收端丢弃数据

因此引出的问题时:

  • 发送方应该等待一个ACK多长时间
  • ACK丢失怎么办
    ACK本身不会被重传
  • 分组里面有错误怎么办
    直接丢失,不发送ACK,也没有ICMP
  • 发送速率如何控制

滑动窗口协议

每次发送出多少?发送速度

是这个样子的:
每个TCP分组到达目的主机以后,目的主机发送一个ACK确认。除了ACK确认不需要再返回ACK确认外,其他的TCP分组都需要这个确认。
源主机收到该ACK确认以后才继续发送一下个分组。
这样很慢。大部分源主机都在等待ACK。

在接收方接受速度太慢时,会强迫发送方速度慢下来。成为流量控制。
有两种方式:基于速率(发送方发送速率不超过该速率)
另一个就是基于窗口,也就是本协议。
接收方通知发送方使用多大的窗口,成为窗口通知。一般和ACK由同一分组携带。也就是在窗口滑动的同时,更新窗口大小。

所以采用这样一种方式,源主机突突突排队发送好几个分组,然后等待ACK。同时没有收到ACK的分组将会保存这些分组。
而收到ACK的分组副本就抛弃。然后发送下一个分组。

也就是永远有那么几个分组是被发送但是没收到ack的。这几个分组可以想象为在窗口中,前面的分组ack收到以后,窗口向后滑动一个分组,同时进入窗口的分组被发送出去。而窗口前面的都是收到ACK的分组,窗口之后的分组都是没有发送的分组。窗口之中的分组都是已发送但是还没有收到ACK的分组,同时分组的副本也被保存着。

而这种类型的协议就是滑动窗口协议。

滑动窗口协议

12.1.3

拥塞控制涉及发送方降低速度以不至于压垮发送方和接收方之间的网络。接收方发送一个窗口通告高速发送方减慢速度。称为明确发信。另一种方法是,发送方猜测接收方的速度,然后减慢发送速度。

12.1.4 重传超时时间

发送方重发一个分组之前要等待的时间总量为:发送分组所用时间+接收方处理时间+发送一个ACK所用时间+ACK返回到发送方的时间
协议估计这段时间的长短称为往返时间估计RTT,而这个值随着时间变化。

12.2 TCP

TCP提供一种面向连接的可靠地字节流服务。

字节流

不包含边界数据的连续流!

TCP提供一种字节流抽象概念给应用程序使用。这种设计方案的结果是,没有由TCP自动插人的记录标志或消息边界。一个记录标志对应着一个应用程序的写范围指示。如果应用程序在一端写人10字节,随后写人20字节,再随后写人50字节,那么在连接的另一端的应用程序是不知道每次写人的字节是多少的。例如,另一端可能会以每次20字节分四次读人这80字节或以其他一些方式读人。一端给TCP输人字节流,同样的字节流会出现在另一端。每个端点独立选择自己的读和写大小。

12.2.2 TCP中的可靠性

TCP提供了可靠性:
tcp把发送的字节流转化为一组ip可携带的分组,称为组包
这些分组包含序列号,序列号代表了每个分组中第一个字节,在整个字节流中的字节偏移。这允许分组在传送中是可变大小的,并且允许重新组包
应用程序发送出去的数据,被协议打散成tcp认为最佳的大小块来发送。

TCP维持了一个强制的校验和,涉及到头部,数据和ip头部的所有段。(也是一个伪头部)
当TCP发送一组报文的时候,设置一个重传计时器,等待对方的确认接收。而且只设置一个计时器(upd分片的时候,每个分片设置一个),当ACK到达的时候,计时器被重置。
接收端接收到数据的时候,发送ACK,TCP使用积累ACK,也就是ACK不会马上发送,回合其他后面的一起。
如果一个ACK丢失,而后续序号大的ACK被接收端接收到,那么后续的ACK可以确认前面的报文段。

TCP报文

TCP报文
  • 两个端口号,各16bit
  • 序列号 32bit
    自己发送的数据,的偏移
  • 确认号 32bit
    用来确认对方发送数据最后一个字节+1,同时也是接收端期望收到的下一个数据包的序列号
  • 头部长度 4bit
    这个长度不是以bit为单位,而是以4B为单位,也就是这个字段中的数组,表明头部的长度是几个32bit(4B)
    这个字段最大2^4-1=15,所以15*4=60字节。也就是TCP的头部最大60字节
    这个字段不是多余的,因为TCP头部会包含可选字段。
  • 保留4bit
  • CWR 拥塞窗口
    接收方发送给发送方,请求发送方降低发送速率
  • ECE
    在数据报途径的路径中,某个路由器阻塞,就会设置这个位。被接收方或者发送方看到。
  • URG 紧急
    很少使用
  • ACK
    指明这个数据包是一个ACK包。是指明这个包含ACK,也可能包含数据的。
  • PSH 推送
    接收方应尽快给应用程序传送这个数据。
    没有被很好的实现
  • RST 重置数据包
    嗯,用来终止一个连接的。
  • SYN 初始画一个连接的同步序列号
    这个位指明,这个数据报是建立连接的数据报
  • FIN
    该报文段的发送方已经结束向对方发送数据。
  • 窗口大小
    TCP流量控制由每个端使用窗口大小来通告一个窗口大小来完成。
    这个窗口是字节数,从ACK号指定,也是接收方想要接收到的那个字节开始。
    也就是ACK前面的都是连续的。
  • TCP校验和
    和CRC的校验机制一样。
  • 紧急指针
    这个字段只有URG 字段被设置时才有效。
    这个指针时一个必要时加到报文段的序列号上的偏移,可以产生紧急数据的最后一个字节的序列号
    目的是:让发送方给另一端提供特殊标志数据的方式。

选项

最常见的选项是最大段大小MSS。
连接的每个端一般在她发送的第一个报文段上指明这个选项,指明发送方在希望接收到的数据段的最大值。

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

推荐阅读更多精彩内容

  • 20.1 引言 在第15章我们看到TFTP使用了停止等待协议。数据发送方在发送下一个数据块之前需要等待接收对已发送...
    张芳涛阅读 791评论 0 2
  • 传输层-TCP, TCP头部结构 ,TCP序列号和确认号详解 TCP主要解决下面的三个问题 1.数据的可靠传输...
    抓兔子的猫阅读 4,397评论 1 46
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,019评论 0 8
  • 24.1 引言 TCP已经在从1200 b/s的拨号SLIP链路到以太数据链路上运行了许多年。在80年代和90年代...
    张芳涛阅读 1,399评论 0 3
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 12,979评论 6 174