一、数据传输

概述

封装成帧:应用层提供“协议数据单元”,运输层、网络层提供协议首部,数据链路层添加帧头帧尾,最终在物理层传播。

差错检测:接收方通过帧尾的检错码和检错算法进行检错

可靠传输:实现对方发送什么自己就能接受什么

封装成帧

1)数据链路层为上层传入的协议数据单元添加帧头和帧尾,包含重要的控制信息

2)帧头和帧尾可以用来“帧定界”

3)透明传输:对上层的协议数据单元内容没有限制,能够适应各种数据。例如数据中出现和帧头或帧尾相同的部分,通过添加转移字符避免接收方误判

最大传送单元MTU:帧的数据部分的长度上限

差错检测

奇偶校验:

在待发送数据后添加1位奇偶校验位,表示整个数据(包含奇偶校验位)中“1”的个数是否为奇数

缺点:当发生错误位数为偶数个时,无法检验出错误

循环冗余校验:

1)收发双方约定好一个生成多项式

2)发送方基于待发送的数据和生成多项式计算出差错检测码,将其添加到待传输数据的后面一起传输

3)接收方通过生成多项式来计算收到的数据是否产生了误码

生成多项式必须包含最低次项,也就是1

检错码只能检测是否有差错,但不能定位错误,因此无法纠错

要想纠正传输中的差错,可以使用纠错码,但开销比较大,在计算机网络中较少使用

可靠传输

概述

数据链路层向上层提供的服务类型

不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做

可靠传输服务: 想办法实现发送端发送什么,接收端就收到什么

1)有线链路的误码率较低,不要求数据链路层向上提供可靠传输服务;无线链路易受干扰,误码率较高,要求数据链路层必须向上层提供可靠传输服务
2)除比特差错外,其他层的传输差错还包括分组丢失,分组失序、分组重复
3)除数据链路层,其他各层均可选择实现可靠传输

可靠传输实现机制

停止-等待协议SW

原理:

1)停止-等待:除了起始与结束外,通信双方只有接受对方消息后才会发送消息,发送消息后进入等待状态

2)回复:接收方检测是否有误码,无错误回复“ACK”,反之回复“NAK”令发送方重传

3)超时重传:发送方长时间未收到回复会触发“超时重传”,时间一般略大于“从发送方到接收方的平均往返时间”

4)编号:为避免丢失、延迟等问题造成混乱,需要为发送方的数据与接收方的数据编号。因为停止-等待协议的停等特性,所以编号只需要一位,01交替即可

信道利用率:

1)$ T_D $:发送数据分组所消耗的发送时延

2)$ RTT $:收发双方之间的往返时间

3)$ T_A $:接收方发送确认分组所消耗的发送时延

公式:信道利用率$ U=\frac{T_D}{T_D+RTT+T_A} $

回退N帧协议GBN

对停止-等待协议进行改进,增大了发送窗口,使得能够一次发送更多数据,当出错时也要重发多组数据

窗口尺寸:

发送窗口尺寸$ W_T:1<W_T<2^n-1 $,n 是构成分组序号的位数。当$ W_T=1 $时,即为停止-等待协议。$ W_T $过大时,发送方重传数据,接收方无法区分新旧数据分组

接收窗口尺寸$ W_R:W_R=1 $,接收方只能按需接受数据分组

传输过程:

1)发送方可以一次发送多个在发送窗口内的数据

2)接收方接收到序号对应接受窗口内的数据,才会移动接受窗口一个位置

3)接收方不一定要对数据分组逐个发送确认,而是可以在几个数据分组后,对按序到达的最后一个数据分组发送确认。ACKn 表示序号为 n 及以前的所有数据分组都已正确接收

4)发送方只有收到已发送数据的确认后才能移动发送窗口

5)接收方对于有误码的数据会丢弃,后续接受数据序号也会错误,接收方会被不断发送之前的确认信息

6)当发送方收到重复的确认时,会在超时重传之前提前重传。这一位置之后传输正确的部分也会一起重传,所以叫”回退 N 帧协议“

选择重传协议SR

对回退 N 帧协议改进,增大了接收窗口,使得能够接收更多数据,重发时只重发出错的部分

窗口尺寸:

发送窗口尺寸$ W_T:1<W_T\le2^{n-1} $,n 是构成分组序号的位数。当$ W_T=1 $时,即为停止-等待协议。$ W_T $过大时,发送方重传数据,接收方无法区分新旧数据分组

接收窗口尺寸$ W_R: $。当$ W_T=1 $时,即为回退 N 帧协议

传输过程:

1)发送方可以在未收到确认分组的情况下,将发送窗口内的数据全部发送

2)接收方将接收的无误码的数据放入接收窗口,并逐一发送 ACK。当窗口将滑过未接受数据的编号时会停止滑动,等待接收数据

3)发送方接收确认后会进行记录避免超时重传。当窗口将滑过未接受确认的编号时会停止滑动,等待超时重传

点对点 PPP 协议

帧格式

1)标志字段(Flag):PPP的帧定界符,取值 0x7E

2)地址字段(Address):预留,无作用,取值 0xFF

3)控制字段(Control):预留,无作用,取值 0x03

4)协议字段(Protocol):指明帧的数据部分使用哪个协议

取值 0x0021 :使用 IP 数据报

取值 0xC021 :使用 LCP 数据报

取值 0x8021 :使用 NCP 数据报

5)帧检验序列字段(Frame Check Sequence):用于CRC校验

实现透明传输

面向字节的异步链路——插入转移字符的字节填充法

发送方处理:

1)原数据中,每个“7E”中间插入“D5”,转换成“7D,5E”

2)原数据中,每个“7D”后接“5D”,转换成“7D,5D”

3)原数据中,每个ASCII码控制字符(数值小于0x20的字符)前插一个“7D”同时自增“0x20”

接收方处理:

1)进行反变换恢复数据

面向比特的同步链路——插入比特0的比特填充法

发送方处理:只要发现5个连续的‘1’,立刻插入1个‘0’

接收方处理:只要发现5个连续的‘1’,立刻删除1个‘0’

实现差错检测

接收方每收到一个 PPP 帧就进行CRC检验。若错误,则直接丢弃帧

使用 PPP 的数据链路层向上不提供可靠传输服务

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇