(013)TCP/IP协议-数据交互

一、引言

当TCP连接建立上了,现在就需要通讯了。但是在不同的场景下,我们关心的地方不一样。如对于交互型的应用,我们关心实时性;对于视频文件传输等,我们更多的关心速度。交互数据流成块数据流将可以解决这些问题。在一些关于TCP通信量的研究中,交互数据流与成块数据流的比例是1:9。

二、交互数据流

1.交互式例子

我们通过Rlogin命令(程序)来了解交互式输入,如图是一次按键的交互结果:


图1.一次按键交互

一次按键就会产生4个数据包。

  • 1.客户端到服务器的按键数据包。
  • 2.服务器到客户端的按键确认数据包。
  • 3.服务器到客户端的按键回显数据包。
  • 4.客户端到服务器的按键回显确认数据包。

在这里特意用Rlogin作为例子,因为它每次总是从客户发送一个字节到服务器。事实上,Telnet允许客户发送一行到服务器,通过使用这个选项可以减少网络的负载。

2.经过时延的确认数据包

在上面的例子中,每发送一次按键信息,都会产生4个数据包。事实上2数据包与3数据包可以合并在一起发送的。这样会减少不少数据包。通常TCP在接收到数据时并不立即发送ACK;相反,它推迟发送,以便将ACK与需要沿该方向发送的数据一起发送(有时称这种现象为数据捎带ACK)。绝大多数实现采用的时延为 200ms,也就是说,TCP将以最大200ms的时延等待是否有数据一起发送。

3.Nagle算法

像这种交互数据流,每一次都发送一个字节(一个数据包)到服务器,在网上会产生很多微小的分组,在局域网中,这些分组通常不会引起麻烦,但是在广域网上,这些分组可能增加拥塞出现的可能。Nagle算法的出现就是为了解决这些问题。
  Nagle算法要求一个TCP连接上最多有一个没有被确认的未完成分租,在该分组的确认到达之前不能发送其他分组。在等待确认数据包的时候,它会把需要发送的几个小分组合并在一起,在确认到达后,发送出去。
  该算法的优点是它是自适应的:确认到达越快,数据就发送得越快。在希望减少小分组的低速网络上,会发送更少的分组。

三、成块数据流

1.正常块数据流例子

图2.从svr4 传输8192个字节到bsdi

定义A为主机svr4.1056,B为主机bsdi.7777。做如下说明:

  • 1-3:A发起主动连接,交换mss(最大数据包长度),以及window窗口大小。
  • 4-6:A连续3次发送数据包,通告己方窗口大小。
  • 7:B回应4,5的数据包接收,时延了的ack包,所以两个合并在一起。
  • 8:B回应6的数据包接收,通过己方剩余窗口大小。该窗口大小小于初始值,说明还有部分数据没有被TCP接收。
  • 9:A发送一个数据包。
  • 10:B对9的响应。
  • 11-13:A连续3次发送数据包,通告己方窗口大小。
  • 14:B对11,12的响应。
  • 15:A发送一个数据包。
  • 16:B对13,15的响应。
  • 17-20:四次握手关闭连接。

2.滑动窗口

一次正常的数据包交互是你发送一个数据包给我,我发送一个确认数据包给你,如此反复循环。虽然这样也可以传输数据。但是这样不是很傻嘛,类似于程序的同步执行或单进程执行。数据的传输效率很低的。能不能像程序多开几个进程加快执行速度一样一次多发几个数据包,加快传输速度。这就是滑动窗口。


图3.TCP滑动窗口

当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或减少了窗口的大小。

  • 窗口合拢:称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。
  • 窗口张开:当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了 T C P的接收缓存时。
  • 窗口收缩:当右边沿向左移动时,我们称之为窗口收缩。RFC强烈建议不要使用这种方式。但TCP必须能够在某一端产生这种情况时进行处理。

整个数据传输的如同蜗牛的直线行走(蠕动)。

有个问题:假如后发送的数据包先到达,咋发送确认信号呢?找到答案再来写

3.PUSH标志

在之前的TCP概述中,看到头部中有个标识PUSH,他的作用是,发送方使用该标志通知接收方将所收到的数据全部提交给接收进程。这里的数据包括与PUSH一起传送的数据以及接收方TCP已经为接收进程收到的其他数据。

4.慢启动

发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。当发送方和接收方处于同一个局域网时,这种方式是可以的。但是如果在发送方和接收方之间存在多个路由器和速率较慢的链路时,就有可能出现一些问题。一些中间路由器必须缓存分组,并有可能耗尽存储器的空间。
  TCP需要支持一种被称为“慢启动 (slow start)”的算法。该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。
慢启动为发送方的TCP增加了另一个窗口:拥塞窗口 (congestion window),记为cwnd。

  • 与另一个网络的主机建立 T C P连接时,拥塞窗口被初始化为 1个报文段。
  • 每收到一个ACK,拥塞窗口就增加一个报文段。
  • 发送方取拥塞窗口与接收方滑动窗口中的最小值作为发送上限。
  • 发送方开始时发送一个报文段,然后等待 A C K。当收到该A C K时,拥塞窗口从1增加为2,即可以发送两个报文段。当收到这两个报文段的 A C K时,拥塞窗口就增加为 4。这是一种指数增加的关系。
  • 在某些点上可能达到了互联网的容量,于是中间路由器开始丢弃分组。这就通知发送方它的拥塞窗口开得过大。

都看到这里了,要不要扫二维码关注一下微信公众号林湾村龙猫

微信公众号rudy_tan_home

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

推荐阅读更多精彩内容