tcp协议 串联

TCP协议入门级基础知识梳理。

image.png

一. 流程图简述

TCP协议是可靠的传输协议。为了实现可靠传输,所以采用连接管理应答确认
连接管理主要是建连时的三次握手和释放连接的四次挥手
为了实现应答确认,采用了序列号。传输过程中,如果丢包了,就要超时重传。由于每次发送数据时都要等待上一条数据的ACK到达,传输速度较慢,于是引入了滑动窗口机制。滑动窗口采用ACK累计确认,这时候如果发生丢包,就会进行快速重传
采用滑动窗口机制,虽然发送速度快了,但是可靠传输不太能保证了。发送数据太快,就可能造成接收方来不及接收和网络拥堵。于是就有了流量控制(由接收方控制)和拥塞控制(由网络健康状况控制)。
这时候如果想让数据传输再快一点,就可以采用延时应答捎带应答

二. 连接管理

1. 三次握手协议
① client --> server:syn包,请求建立连接
② server --> client:server收到①的syn包后,申请缓存资源。同时发送[ack+syn]包
③ client --> server:client收到②的包,申请缓存资源,建立连接。

1.如果将server --> client的ack+syn分开发送,三次握手就变成四次握手。
2.建立连接后,client突然故障了,怎么办?
TCP设有一个保活计时器。server每收到一次client的请求后都会复位这个计时器。通常设置2h。若2h内没有收到client端的任何数据,server就会每个75s发送一个探测报文。若连续发送10个探测报文都没有反应,则server认为client出现故障,然后就关闭连接。

更深一步:为什么tcp协议三次握手

2. 四次挥手协议
image.png
① client --> server:client结束报文发送,向server发送fin包,进入fin_wait_1状态。
② server --> client:server收到①的fin包,发送ack报文,进入close_wait状态。此时处于[半关闭]状态,即client没有再发送数据,但若server发送数据,client依然要接收。
③ client接到ack后,进入fin_wait_2状态,此时依然需要接收server发送的数据。
④ server --> client:server将最后的数据发送完毕,就向client发送连接释放报文fin包,进入last_ack状态,等待client的最后确认。由于此时仍是[半关闭]状态,因此可能又发送了一些数据。
⑤ client--> server:client接收到fin包后,发出ack确认,进入time_wait状态。
⑥ server收到最后的ack后,立即进入close状态,释放连接。
⑦ client等待 2*MSL(最长报文寿命),进入close状态,释放连接。

2*MSL的作用:
1> 重传最后一个ack报文(如果server没有收到ack报文,会重传fin包)。
2> 2*MSL可以使网际路由上的残留报文彻底消失,以免端口被重复利用时,这些残留报文可能会干扰新的连接。(残留报文:因为各种原因导致数据报文走的时间太长,重传报文都收到了,原始报文还在路上)

三. 确认应答

序列号:① 应答;② 将接收到的数据根据序列号进行排序,并去掉重复序列号的数据。
序列号是tcp可靠传输的保证之一。
tcp数据包中的序列号不是以报文段来进行编号的,而是将连接生存周期内传输的所有数据作为一个字节流,序列号就是整个字节流中每个字节的编号。

1.应答机制

1. ACK确认
tcp传输数据的过程中,每次接收方收到数据后,都会发送ACK报文进行确认。ACK报文中带有对应的确认序列号,告诉发送方接收到了哪些数据,下一次的数据从哪里发。
2.ACK累计确认
在滑动窗口机制中,接收端并不需要每收到一个分组就返回一个应答,可以连续收到分组之后统一返回一个应答。这样可以节省流量。
tcp头部的ack字段就是用来累计确认,表示已确认的字节序列号+1,也表示期望发送端发生的下一个分组的起始字节号。
3.延时应答
接收方在收到数据后,并不会立即回复ack,而是延迟一定时间。目的如下:
1.ack是可以合并的。如果连续收到两个tcp包,只需回复最终的ack,可以降低网络流量。
2.如果接收方有数据要发送,那么就可以在发送数据的tcp数据包里,带上ack信息。避免大量的ack以一个单独的tcp包发送,可以降低网络流量。
4.捎带应答
接收端在给发送端发送数据时,捎带着向发送端去确认应答。应答的内容是接收端已经收到发送端之前发送的数据。

2. 超时重传

发送端在发送一个数据时会同时开启一个定时器,若是在这个时间段内没有收到刚才发送数据的ack报文,则对该报文进行重传。
超时重传的问题:
1.增加端到端的时延:当一个报文段丢失,会等待一定的超时周期才进行重传
2.引起不必要的重传:当一个报文丢失,在等待超时的过程中,其后的报文已经被接收端成功接收,但得不到确认,发送端会认为丢失了,引起不必要的重传,浪费资源和时间。

3. 快速重传

冗余ACK(dup ack):tcp采用累计确认机制,当接收端收到比期望序号大的报文段时,便会重复发送最近一次确认的报文段的确认信号。
快速重传:发送端收到三次dup ack,不用等到超时,直接重传。

4. 滑动窗口

概念:类似窗口,用来告诉发送端可以发送数据的大小,或者说窗口标记了接收端缓存区的大小
知识点:
1.接收端将自己可以接收的缓冲区大小放到tcp首部中的“窗口大小”字段,通过ack来通知发送端
2.窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,即就是说不需要接收端的应答,可以一次连续的发送数据
3.操作系统内核为了维护滑动窗口,需要开辟发送缓冲区,来记录当前还有那些数据没有应答,只有确认应答过的数据,才能从缓冲区删掉。如果发送缓存区太大,就会有空间开销。
4.接收端发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知发送端。发送端收到通知后,就会减慢发送速度。
5.如果接收端缓存区满了,就会将窗口大小设置为0。发送端不再发送数据,但会定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。
6.滑动窗口中的数据类型:① 已发送但未收到确认;② 可以发送但未发送

5. 流量控制

概念:防止发送端发的太快,耗尽接收端的资源,从而使接收端来不及处理。
接收端抑制发送端的依据:接收端缓冲区的大小。
流量控制的目标是接收端,怕接收端来不及处理。
流量控制的机制是丢包。

6. 拥塞控制

概念:防止发送方发的太快,使得网络来不及处理,从而导致网络拥塞。
拥塞控制的目标是网络,怕网络拥堵。
拥塞控制的机制:定时器超时和收到三个dup ack。
拥塞控制的表现:丢包和时延变长。

为什么会有拥塞控制?
流量控制虽然可以高效可靠的传送大量数据,但如果在刚开始阶段就发送大量数据,可能会导致网络拥堵,因为网络上的计算机太多。

7. 流量控制和拥塞控制的对比

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

推荐阅读更多精彩内容

  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是...
    srtianxia阅读 2,403评论 0 2
  • 昨天下班在地铁上看到一篇关于TCP总结的博文,觉得非常好,这里借鉴过来,由于原文里有一些关于TCP协议部分晦涩难懂...
    不知名的程序员阅读 12,597评论 3 12
  • 传输层-TCP, TCP头部结构 ,TCP序列号和确认号详解 TCP主要解决下面的三个问题 1.数据的可靠传输...
    抓兔子的猫阅读 4,514评论 1 46
  • 一、TCP的可靠性 TCP向应用层提供与UDP完全不同的服务。它提供一种面向连接的、可靠的字节流服务。TCP通过下...
    ZMRWEGo阅读 1,307评论 0 0