TCP超详细解析之三次握手,四次挥手,流量控制,滑动窗口)?

前面有写了TCP协议的一些介绍,只是说明了,这时一个可靠性的协议,传输具备可靠性。现在就想来专门分析一些,TCP为了保证传输可靠性,提供了什么功能?或者说是如何保证的?
(所有首发数据包的操作都是网卡操作的)

建立可靠的链接(三次握手)

首先在TCP协议进行通信之前,会建立一个连接通道,而这个通道在进行建立之前,需要进行判断,这就是三次握手的主要精髓:

三次握手协议
image.png

主机A为发送端,主机B为客户端。

第一步: 主机A会先发送一个SYN/Seq的信号给主机B,SYN是一个标志位,这是一个同步序号,当TCP建立时会设置为1,而Seq为数据包序号。这时候主机A的状态为SYN/SEND 需要等待主机B的回复,如果在一定的时间没有收到主机B的回复,则会进行重新发送。假设SYN/seq为 SYN=1,seq=200

(先说下这个seq,也叫序列号,代表要发送的数据中的每个字节代表的编号,这里我们需要知道要发送的数据有时候很大,没办法一次性发送完,所以在TCP中会分成好几次发送)

第二步: 主机B如果在网络传输中,主机A发送的数据没有丢失,主机B接收到了,这时候主机B,会解析主机A发送的Seq数据,把主机A中通过序列号,也就是Seq来判断,后面需要发送的数据从哪一个数据开始发送,这里主要是有几个作用:
1.防止SYN攻击,当主机B作为接收端,已经确认发送数据,把ACK发送给主机A确认了,但是主机A如果接收不到的话,为了保证通道能连接,会进行重发,这时候主机B发送完ACK确认应答后,会处于AYN-SEND状态,这时候可能会被恶意的去接收很多没必要的数据,浪费资源。
2.还有一点是会收到主机A发出的重复性的SYN的数据(ACK没收到的情况下)。
3.可以通过这个序列号来判断后面的数据从哪里开始读取,进行数据重新组合。保证顺序性和数据可靠性。

然后继续说,主机B收到主机A的SYN/seq数据后,会返回一个SYN/ACK/seq/ack的信号给主机A。状态变为SYN_REVD,可以接收数据,这个期间容易被SYN攻击。然后返回的信号为
SYN=1,ACK=1(代表确认连接),seq=200,ack=201(代表从201序列号下次从开始传输)

第三步: 如果主机B发回来的应答没有丢失,主机A就接收到SYN/ACK/seq/ack这个信号,这时候主机A状态变为established 已确定连接,并且根据这个信号,再次连接向主机B发送数据。

这就是三次握手。

另外我们上面讲的一些内容有涉及到,重发控制(控制进行重发),确认应答处理(主机B发送给主机A的确认应答)、重复控制(主机B重复接手后,怎么控制是否接收),都是通过SYN 标志位以及seq序列号和确认应答号进行控制的,你们可以思考下,答案都在上面。

四次挥手协议

上面讲的是关于三次握手的,接着讲需要断开连接的时候,是怎么处理的。

如图所示:

具体的步骤如下:

1.主机A发送FIN=1到主机接收端B,主机A的状态变成FIN_WAIT_1
这个时候是处于等待阶段,如果未接收到确认应答还会接着发送。
2.主机B接收到主机A发送的消息后,给主机A回复一个ACK,相当于确认接收到需要关闭连接的消息了,但是这时候因为可能还有其他任务在执行或者其他连接,主机B不会立刻连接。主机A接收到确认应答消息了,这时候不会马上关闭,会更改状态为FIN_WAIT_2,如果在一定的时间段内,主机B没有发来,可以关闭连接的信号,这时候,主机A会主动发送关闭连接的信号,关闭主机B的连接。
3.第三步,主机B在经过一些处理后,发送一个FIN给主机A,告诉他,这时候可以关闭连接了。
4.主机A接收到主机B发来的可以关闭连接信号后,发送一个ACK,表示确认关闭了。

这就是四次挥手协议。

滑动窗口去控制流量的传输

在TCP连接中,如果已经建立连接了,这个时候就会发送数据包,在发送数据包的过程中,如果接收方不能及时接收的话(A发送给B,B发送给A的时候就会网络拥堵,这里主要需要知道在TCP连接过程中,发送端和接收端是全双工的,两个都可以同同时工作(发送和接收)),着就会需要发送方进行控制以避免数据丢失,利用滑动窗口控制可以实现对发送方的流量控制。

如果每次数据传输都要进行包的确认的话,往返之间的越长,网络的吞吐量就越大,为了解决这个问题引入了窗口的概念。

一般来说,TCP传输以分段和分片的方式进行传输的,而窗口能够以更大的单位进行传输,而无需等待每一次的确认应答。但是在最后传输完成后,会在整个窗口进行确认应答。如果有丢失,还是会进行重传的。

image.png

在数据发送端以及数据接收端,都会存在一个缓冲区,当发送端给接收端发送数据时,会先把数据放在缓冲区,这个时候,发送端是无法发送数据的,必须要等到接收端接收到数据给了一个确认接收数据(ACK)以后,这个时候发送端的缓冲区才会被清空,然后会继续往前滑动,如图示。然后才能继续发送数据而接收端,同样需要等待TCP接收端缓冲区的数据被接收后,才能继续接收数据。

在这里我们会把滑动窗口的大小,认为是缓冲区的大小。
这个缓冲区的大小是可以配置的。


image.png
image.png

接收到ACK以后窗口会继续往前滑。

image.png

发送窗口

就是发送端允许连续发送的幀的序号表。发送端可以不等待应答而连续发送的最大幀数称为发送窗口的尺寸。

接收窗口

接收方允许接收的幀的序号表,凡落在 接收窗口内的幀,接收方都必须处理,落在接收窗口外的幀被丢弃。接收方每次允许接收的幀数称为接收窗口的尺寸。
在线滑动窗口演示功能
https://media.pearsoncmg.com/aw/ecs_kurose_compnetw
ork_7/cw/content/interactiveanimations/selective-repeatprotocol/
index.html
TCP
窗口的单位是字节,不是报文段,发送方的发送窗口不能超过接收方接收窗口的值。

关于发送数据的大小的概念。

在建立连接的时候,会通过三次握手的时候确定接收端能够接收的最大消息长度(MSS)。

关于流控制

就是控制让发送端根据接收端能接收的实际接受能力去控制发送数据量的大小。存放在TCP首部。有接收端去设置。不过如果接收端的缓冲区溢出的时候,窗口大小也会变成更小的值,发送给接收端。

结论:
以上所讲的一些包括三次握手,四次挥手,流量控制以及滑动窗口的协议,都是TCP协议为了保证可靠性连接所进行的一些保障。

感谢您阅读我的文章,整理不易,喜欢帮我点个赞,谢谢哈。

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

推荐阅读更多精彩内容