DataLinkLayer(数据链路层)
The Reference Model(参考模型)
layer | name |
---|---|
5 | Application layer |
4 | TransPort layer |
3 | NetWork layer |
2 | data link layer |
1 | physical layer |
Main Functionality(主要功能)
- 提供网络层的接口
- 通过单向连接传输数据帧
- 处理传输过程中发生的错误
- 控制数据流,防止快速的发送方淹没慢速的接受方
Data Link Layer Design Issues(数据链路层的设计问题)
Frames(帧)
1.数据链路层从网路层接受接受数据包
2.数据链路层会在将其发送到物理层之前,将这些数据包封装成包
每一帧包括一个帧头、一个帧尾、和一个有效荷载域(用于存放分组)
Relationship between packets and frames(包和帧的关系)
1.一个来自网络层数据包变成数据链路层中的有效荷载域
2.数据链路层通过给这个包加上帧头和帧尾,把这个包放到对应的帧中
Placement of the data link protocol(数据链路协议的位置)
1.一个WAN(广域网)子网包含了好多路由器,它们通过租用点到点的电话线连接起来。
2.某一帧到达一个路由器的时候,硬件会首先检查它是否有错误,然后将该帧传递给数据链路层软件
3.数据链路层软件检查这一帧,看是否有自己期望的帧,如果有,就把包含有效载荷域中的分组交给路由软件,接着路由软件选择正确的输出线路,并且把分组向下传递给数据链路层软件,然后数据链路层软件把它发送出去,进过两个路由器的数据流情况如图。
4.路由代码总是希望所有的工作都能正确的完成,也就是说,在每一条点到点线路上建立起可靠、有序的连接。它并不希望老是陷入到分组丢失的境地。如图总虚线框所示,数据链路层使得不可靠的通信看起来更加完美,至少比原来更好,另一方面,尽管我们在每一个路由器中显示了多份数据链路层软件的版本,但是实际上,只有一份数据链路层软件,它负责处理所有的线路,每条线路有不同的表和数据结构。
Possible Services(为网络层提供的服务)
可能提供的服务
1.无确认的无连接服务
帧在无连接的情况下被传送或者在错误恢复的情况下被传送
例如: 以太网
无确认的无连接服务是指源机器向目标机器发送独立的帧,目标机器并不对这些帧进行确认,事先并不建立逻辑连接,事后也不释放逻辑连接,若由于线路上有噪声导致某一帧丢失,则数据链路层不会检测这种丢帧现象,也不会恢复,当错误率很低的时候,这一类服务是十分合适的比如语音传递,这种实时通信中数据迟到比数据损坏更不好,绝大多数LAN(局域网)在数据链路层上都是使用的无确认的无连接服务。
2.有确认的无连接服务
在必要的情况下,帧在重传的情况下被传送
例如:802.11
为了提供可靠性,引入了有确认的无连接服务,当提供这种服务的时候,仍然没有使用逻辑连接,但是所发送的每一帧都需要单独确认,这样,发送发就知道每一帧是否已经正确的到达,如果有一帧在指定的时间内没有到达的话,则发送方将再次发送该帧,这类服务尤其适合不可靠的新道,比如无线系统。
3.有确认的面向连接的服务
在帧被传送之前,连接就已经建立起来了
这种服务是源机器和目标机器在传输之前首先建立一个连接,该连接上发送的每一帧都会被编号,数据链路层保证每一帧被真正接受到,而且它保证每一帧只被接受一次,并且所有的帧按正确的顺序接收,相反,在无连接服务中,如果报文丢失了,则一个分组可能会发送多次,因而也会接受多次。于此相反,面向连接服务相当于为网络层进程提供了一个可靠的位流。
Framing Methods(成帧方法)
Byte Count(字节计数法)
这种成帧方法利用头部一个域来指定帧中的字节数。当目标端的数据链路层看到这个字符值的时候,它世道后面跟着多少字符,也就是知道该帧的结束在哪里。
但是这种方法的问题是,你前面错了的话,你后面都错,所以现在用的少了。
Flag bytes with byte stuffing(含字节填充的分界符法)
这种成帧方法考虑了错误之后同步的问题,它的做法是让每一帧都用一些特殊的字节作为开始和结束,在过去,起始和结束字节是不同的,但是现在绝大多数的协议倾向于使用相同的字节,作为标志字节
但是这种方法也有一种很严重的问题,当标志字节的位模式出现在数据中,这个问题很容易发生,这种位模式往往会干扰帧的分界。解决这种问题的办法是,发送方在这种偶尔出现的每个标志字符前面插入一个特殊的转义字节ESC,接受端的数据链路层在将数据送给网络层之前会删除掉这种转义字节。这种技术叫做字节填充技术
但是如果转义字符也在数据中间怎么办?答案是同样用转义字节来填充
Flag bits with bit stuffing(含位填充的分界标志法)
每一帧的开始和结束都有一个特殊的位模式,01111110实际上就是一个标志字节,当发送方的数据链路层碰到数据中5个连续的位1的时候,它自动在输出流中填充一个位0,这种位填充机制与字节填充机制非常的相似,在字节填充机制中,当发送方看到数据中的标志字节的时候,它就在其前面填充一个转义字符,然后传送到输出字节中。
当接收方看到5个连续输入位1,并且后面是位0,它自动去掉该0位,就好像字节填充过程对于两方计算机中的网络完全透明一样,位填充的过程也对网络层完全透明。如果用户数据包含了标志模式01111110,则该标志当做011111010来传输,但是存储在接收方内存中的是0111110.
在为填充机制中,通过标志模式可以明确的识别出两帧之间的边界。因此如果接受方失去了帧同步,它只需要在输入流中扫描标志序列即可,因为标志序列只可能出现在帧边界上,永远不可能出现在数据中。
Physical layer coding violations(物理层编码违例法)
适用于物理介质上的编码方法中包含冗余信息的网络,LAN中用两个物理位来编码1位数据,通常1位是高-低电平对,0是低-高电平对,每一位数据位都有一个中间电平的越变,这使得接受方容易定位到边界上。
原文地址:https://www.cnblogs.com/mengxiaoleng/p/11632217.html