TCP10问

1.TCP建立连接时需要几次握手, 断开连接需要几次握手?

TCP建立连接需要三次握手, 断开连接要四次握手。现有客户端A发送数据到服务端B:

  • 在建立连接时客户端首先发送SYN包请求建立连接。
  • 当服务器收到SYN包后发送ACK+SYN包针对受到的SYN包应答。
  • 客户端受到服务端的ACK应答后发送ACK包,针对SYN的确认应答。此时三次握手建立连接。

当客户端要断开连接时共四次握手:

  • 客户端发送FIN包请求断开连接。
  • 服务器受到客户端消息, 发送ACK包应答。
  • 服务端发送FIN包请求断开连接。
  • 客户端发送ACK应该服务器的断开请求。

2.客户端每发送一个包, 服务器都要返回确认应答吗

当客户端每次发送数据包时, 服务器端不一定发送确认应答, 当引入滑动窗口概念后,为了减少网络消耗。服务器可以每接受到两个请求包再做一次应答(延迟应答), 也可以接受完包后,将处理完的数据一起作为返回数据(稍代应答)。

3.TCP 发送/接受数据的大小

TCP在三次握手建立连接时就会确定发送数据包的大小MSS(Maximun Segment Size)。在建立连接时, TCP请求/确认包的首部会写入MSS信息。此时会选择一个较小的MISS作为每次发送数据的最大长度。 当TCP发送大量数据的时候, 会将数据分割成不超过MSS的数据分批发送。

4.TCP如何将大量数据切片处理后发送/重发

首先TCP包的首部中有两个字段序列号(Destination Port), 确认应答号(Acknowledgement Number)。客户端对发送的数据在首部的序列号中写入数据段的编号, 服务器收到数据段后查询序列号跟数据的长度,并计算出下次应该接受的序列号并写入确认应答号作为确认应答发送出去。TCP根据序列号根和确认应答号将大量数据切片发送。

5.TCP窗口有什么用

TCP通过窗口提高发送确认应答速度。TCP传输以一个段为单位,每发送一次进行一次确认应答。包的往返时间越长通信性能越低。为了解决这个问题TCP引入的窗口的概念, 此时TCP并不是等到接受到确认应答后才发送数据。 而是一次性发送多个数据段(发送数据段的多少取决于窗口的大小), 主机在未收到确认回复之前是要保存已经发送过的数据, 为的是重新发送。

TCP_窗口_发送.png

6. 在使用窗口时, 服务器没有收到某一个数据段, 或者主机没有收到服务器的确认消息怎么办

窗口在一定程度上比较大时, 即使有少部分的确认应答丢失时, 也不会进行数据重发。可以通过下一个确认应答确认。

窗口丢失确认应答.png

上图中, 窗口丢失了1001的确认应答。虽然客户端没有收到相应的确认应答。 但是当收到2001的确认应答(提示服务器, 我想收到从2001开始的数据)时,就会以为服务器收到了1001的数据段。

当一段报文丢失导致服务器没有收到, 那么服务器就会发送报文提示客户端(服务器要接收从xxxx开始的报文)。如果客户端连续收到相同的请求时, 则会发送相应的数据报文。

窗口报文丢失重发.png

7.窗口大小的值是由谁决定的

窗口的大小是由接受端主机决定的, TCP首部中专门有一个字段来通知窗口的大小。接受主机将自己的缓冲区大小放入这个字段中通知给发送端(根据缓冲区的大小, 随时设置窗口大小发送给发送段从而控制发送量)。发送端会根据接受主机提示, 对数据的发送量进行控制。

根据缓冲区大小控制窗口.png

8.刚开始通信的时候, 窗口的大小是如何确定的**

由于两台主机间的网络可能很复杂,通过广域网时,中间的路由器转发能力可能是瓶颈。也就是说,如果一方简单的按照另一方主机三次握手时通告的滑动窗口大小来发送数据的话,可能会使得网络上的转发路由器性能雪上加霜,最终丢失更多的分组。在通信一开始就会通过叫做慢启动的算法得一个值, 对发送数量进行控制。这个值就是所谓的阻塞窗口, 阻塞窗口的大小不会超过滑动窗口。

9.MSS会改变了吗?

MSS就是为了避免IP层分片,在建立握手时告知对方期望接收的MSS值并不一定靠得住。因为这个值是预估的,TCP连接上的两台主机若处于不同的网络中,那么,连接上可能有许多中间网络,这些网络分别具有不同的数据链路层,这样,TCP连接上有许多个MTU。特别是,若中间途径的MTU小于两台主机所在的网络MTU时,选定的MSS仍然太大了,会导致中间路由器出现IP层的分片。所以这个时候需要重新计算MSS大小。

怎样避免中间网络可能出现的分片呢?
通过IP头部的DF标志位,这个标志位是告诉IP报文所途经的所有IP层代码:不要对这个报文分片。如果一个IP报文太大必须要分片,则直接返回一个ICMP错误,说明必须要分片了,且待分片路由器网络接受的MTU值。这样,连接上的发送方主机就可以重新确定MSS。

10. Nagle算法有什么用?

Nagle算法主要是提高网络利用率。如果发送端有数据,但是发送端数据很小的话则进行延迟发送的一种机制。各种做法可能造成网络延迟。

  • 延迟确认应答
    如果接受端受到消息后立即应答的话, 那么可能会返回一个小的窗口值(刚接收完缓冲区比较满)。而是选择过一段时间应应答。事实上也不需要每次接受都需要应答。据大多数采用接收两个数据段返回一次应答。
  • 稍带应答
    TCP包中既能发送数据也能发送应答的一种机制。不过捎带应答需要服务器处理完数据并将处理完回执的数据返回为止。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357

推荐阅读更多精彩内容

  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,057评论 0 8
  • 18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本章将...
    张芳涛阅读 3,384评论 0 13
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,071评论 6 174
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,957评论 1 13
  • 24.1 引言 TCP已经在从1200 b/s的拨号SLIP链路到以太数据链路上运行了许多年。在80年代和90年代...
    张芳涛阅读 1,490评论 0 3