写在前面
hello~,周更小博主又来了(纯属是懒 ε=ε=ε=┏(゜ロ゜;)┛),本篇文章带领大家一起来看看传输层相关的知识。
1.可靠连接
1.1 TCP
都说tcp是面向连接的可靠的协议,那么为什么可靠呢?
tcp为什么可靠?
因为tcp保证了用户发送的数据的完整性、顺序性。你想想,如果传来的数据是乱序的,那么接受方收到的数据不就和发送方不一致嘛,哪能管这叫可靠? 乱序情况 丢失情况 重复情况
(比较抽象,画个简单的图,好丑ε=ε=ε=┏(゜ロ゜;)┛)
这问题又来了,tcp怎么保证数据的可靠呢?咳咳,我这就来解惑(认真脸)
你想想,要想发来的数据有顺序,那我要标识一下数据吧,你是你,他是他… 聪明的你一定想到了,排个序号呗。这不就分了先来后到。排完序号后,让接收方响应这个序号,那发送方就知道对方已经接受到刚才发送的数据啦,这就是ACK机制
好了,发来的数据已经有序了,那么当我们发现某个数据丢失的时候,是不是可以通过呼叫这个序号,告知发送方,再给我传一次呗。这就是ARQ(自动重传机制)
好了好了,到最后了,那收到重复的数据怎么办啊,不理不就行了。(笑)
下面让我们来看看这两种机制:
1.11 ACK
(对不起,大家,我是真的讨厌画图…,就这样了…)
文字描述下:
sender 首先发送自己的数据的序号 reciver收到,并给予响应 sender得知自己发送的数据已经接受,接着可以发送下一个数据。
1.12 ARQ
文字描述下: sender 首先发送自己的数据的序号 reciver收到,并给予响应ishi sender得知自己发送的数据已经接受,接着可以发送下一个数据。 如果某个数据在发送过程中丢失,那么sender在设定的时间内没有收到对方的响应。就要重新发送一次改数据
思考下: 当ACK丢失了怎么办?或者ACK延时了怎么办?
好了好了,了解了上面两个机制,等于踏入了TCP实现可靠传输的大门。接下来我们继续来探索Tcp。
通过上图,大家能看出来,这样发送数据效率不高,发一次等一次,体验效果也不好。如果我们连续的发送数据,先不管对方的响应。这样行不行呢,那当然是可以的~ 这其实就是流水线机制,常见的就是滑动窗口
1.13流水线机制
先看个窗口 这里我们假设窗口大小是4,也就是一次能发送4个数据(其实应该是报文段…) 那么流水线机制的工作原理是什么呢?
就是在窗口的范围内,不断发送数据,当收到一个响应的时候,窗口就想右边移动一格。这样效率不久提升上来了。
这只是简单的介绍了一下它的工作原理,实现呢,比这发杂的多…
流水线机制分为2种形式:
1.GBN(Go-Back-N)
先简单的介绍一下,GBN就是回退N的意思,其实这里主要是指重传已发却没有受到确认的N个分组。
这样讲,大家可能不是很明白,那么再补充一个概念:累积确认
累计确认:对按序到达的最后一个分组发送确认,表示到这个分组为止,所有的分组都已经接收到了。
其实这样做,也是为了提升效率,不用发一个回应一个。当然了,也不能一直推迟这不发送确认号,通常也设定了一个时间,超过这个时间,就要把自己已经收到的数据给响应下.(针对于接收方而言)
老环节,看图…(我恨画图)
移动移动 这里,博主只是简单的画了一下,实际情况可能不是图上这样的,比如ack=3,这里只是为了方便大家理解。
问题来了,当有个分组丢失了咋办? 图中pk4丢失了,那么我们的处理方法:
利用超时时间解决,一定时间内,一直收不到ACK=PK4,那么重传PK4
不知道大家注意到没,当收到pk5、pk6的时候,接收方并没有进行确认,而是直接丢弃这两个数据。那么当pk4重传的时候,pk5和pk6也要进行重传 这就是GBN的实现,当某个分组丢失的时候,需要重传改分组以及所有发送但是没有得到确认的分组
2. SR(select repeat)
SR看着这个英文,大家应该就能想到它的意思,选择重传。结合上面的GBN,大家是不是想到了什么? 每次,SR就是仅重传丢失的数据,而那么乱序到达的数据,SR机制会先缓存起来,并给予响应。
但是接收窗口是不会向前移动的,需要接收到这个丢失的数据,才会移动。
了解这些,对于接下来的tcp滑动窗口的学习会很有帮助,由于时间原因,博主暂时写到这里,后期来更新【这次一定,ε=ε=ε=┏(゜ロ゜;)┛】
如果错误,欢迎大家指针。
|