主要的三个问题(点对点的数据传输)
封装成帧
- 数据从应用层到数据链路层之间的数据传输分别为
- 应用层数据单元–>应用层数据单元+传输层首部–>应用层数据单元+传输层首部+网络层首部
- 最后在数据链路层加上帧头和帧尾,封装成帧
- 例如
- 帧头帧尾的作用就是确定帧的边界,会在对应的字节中出现一个字节的标志
- 也不是所有的帧都会在添加帧边界
- 如以太网V2的MAC网就不存在帧边界,但是在帧传输到物理层的时候,物理层会在帧前面加上一个前导码,来确认是一个完整的帧 ,还规定了帧发送的间隔为95比特时间
- 透明传输:指的是数据链路层对来自上层交付的传输数据没有任何限制,仿佛就是数据链路层不存在一样
- 在确定帧的时候要添加帧边界,当数据中出现帧边界时会怎么办?
- 解决方法就是,在数据链路层接收到上层的数据时会将数据进行遍历,当出现与帧帧边界符一样的字符时在其前面加上一个确定字节,然后传递给物理层,这样在接收方接收到字节码时,发现一个确定字节说明后面一个字节的帧边界是具体的数据而不是真正的帧边界
- 也可以面向比特的物理链路进行比特填充法实现透明传输
- 如在五个连续的一后面添加一个比特0,最后在读取的时候将该0去除即可
- 为了提高帧的传输速率,要尽可能的提升帧的长度,减少帧头帧尾的长度
- 但是考虑到各种误差的影响,每一种数据链路层协议都规定了最大的帧数据部分长度,即最大传输单元MTU
差错检测
-
比特差错:比特在通信线路上的传输可能是不理想的 ,即在传输过程中会出现1变成0,或者0变成1的现象
- 误码率BER:在一定时间内,传输错误的比特数占全部传输比特数的比率
-
循环冗余校验CRC
- 接收双方规定好一个多项式
- 然后再要传输数据后面加上多项式最高次数个0,作为被除数
- 多项式对应的系数组成的比特位作为除数
- 两者进行相除,得到最后的余数
- 余数位数要和多项式的最高次次数相同,不够在前面补上0
- 这个组成的余数作为检错码FCS封装到帧的帧尾中
- 当字节码加上检错码传输到接收端的时候,再与当初规定好的除数进行相除,当余数为零的时候表明在传输过程中没有出现误码,否者有误码
-
例如
在上述的MAC帧中就有4字节的检错码FCS封装在帧尾中 -
也可以采用奇偶校验:
- 即在传输时规定是奇校验还是偶校验,在传输数据的后面加上一位比特1,在传输到接收端的时候在进行规定好的校验方式,当出现校验方式不准确时就为出现了误码。
- 当误码出现偶数次时,就校验就无法判断是否为真的出现了误码
- 即在传输时规定是奇校验还是偶校验,在传输数据的后面加上一位比特1,在传输到接收端的时候在进行规定好的校验方式,当出现校验方式不准确时就为出现了误码。
可靠传输
-
当接收端检测到传输过来的帧当中存在误码,就会将该帧进行丢弃,在传输过程中出现的错误不止有误码,还有分组失序,分组丢失,分组重复等。
-
解决方法:
- 停止-等待协议SW:发送方发送数据到接收方,当接收方接收到数据并且确认不存在错误时,向发送方发送一个确认的回应,这样发送方才能将这条数据从缓存中删除,当接收方确认这个数据是错误的时候就向发送方发送错误的回应,这样发送方再次从缓存中提取该次发送的数据将其再次进行转发到接收端
- 当出现了数据的丢失,接收方就不可能对发送方发送确认回应,这样就会在一直等待的过程中,所以在发送方在发送的同时启动一个超时计时器,当超过该时间的时候就会触发超时转发的操作。重传时间可以设置为两端之间的数据平均往返时间
- 当接收端在确认接收到正确的数据时,向发送段发送确认的数据丢失,则发送端会触发重传机制,这样接收端就会接收到两个数据一样的数据,就会照成数据重复的现象,为了解决这个问题,我们可以在数据发送的时候将数据进行编号处理,当出现两个编号一致的数据时就将其丢弃,这样就防止了数据的重复
- 接收端发送的回应也可能出现重复的现象,即在接收端在回应时候发送端就已经进行超时重发了,这样在第一次回应到达后,发送端会发送下一条数据,当重发的数据到达接收端的时候,接收端又发乐正确的回应,这样发送端是否还要发送一遍第二个数据呢?这就需要对接收端的回应也进行编号,这样就可以避免上述的现象出现
- 但是这样就会降低传输速率,我们可以使用流水线传输,不需要接收到接收端的回应,发送端一次性发送多条数据,然后接收端在将响应一个个返回回去
- 停止-等待协议SW:发送方发送数据到接收方,当接收方接收到数据并且确认不存在错误时,向发送方发送一个确认的回应,这样发送方才能将这条数据从缓存中删除,当接收方确认这个数据是错误的时候就向发送方发送错误的回应,这样发送方再次从缓存中提取该次发送的数据将其再次进行转发到接收端
-
回退N帧协议GBN :建立在流水线传输的基础之上,采用3比特来将分组进行编号,即序号0-7,当序号增加到7时,下一个序号又从0开始,发送方要维持一个发送窗口,当分组在发送窗口内的可以被连续发送,不必等到接收到接收方的确认分组。发送窗口的尺寸1-7。(构成比特分组的比特数可以改变,即也可以使用4比特来进行分组编号,则发送窗口的尺寸为1-15即1-2^n-1),当窗口的尺寸取为1,则就是停止等待协议。接收窗口的尺寸只能为1。当发送的数据分组大于窗口最大尺寸是时 ,即分成8条数据进行发送,当接收方正确接收这8条数据,返回正确的响应时,该回应在传输过程中发生了误码,发送端无法接收到回应,就会触发超时重传机制,这样接收端已经接收了8条数据,这重传的数据接收端无法确认是否是新的数据还是重传的数据,就会照成数据的重复。
- 过程就是发送发发送窗口大小的数据到接收方,接收方接收到正确的数据将其回应进行返回,当发送方接收到了回应窗口就会向前进行滑动一格。直到滑动到了一个新的窗口时就会重新发送一次窗口大小的数据。
- 也不需要每接收一个数据就返回一次响应,即可以累计发送,即接收了前两个发送一次,接收后两个发送一次,即使前两个发送的那个响应在传输中丢失了,后两个发送的那个也可以到达发送端,从而发送端可以向前滑动分组窗口。
- 出现错误时,接收方会丢弃整个分组,然后再将其上一次成功接收数据的回应再次返回到发送端,这样发送端在受到很多个相同的回应时就知道是这次传输的数据发生了错误,就会触发重传机制,当响应在返回时也出现了误码,这会触发超时重发机制。
*
-
选择重传协议SR:为了更高的提高效率,接收方的窗口不能只接收一个数据,要大于一,这样在接收了正确的数据就放到对应的位置之上,然后回应到发送端,不对的数据要求发送端重新发送数据。这样做接收端就不能实现累计回应,必须每一次接收到正确的数据就要返回回应。
- 这三种方式不仅限于数据链路层,应该适用于整个计算机网络
-
当传输协议为不可靠协议时,丢弃就丢弃了不会做其他措施
-
当传输协议为可靠协议时,就需要其他措施来确保接收端能够接收到正确帧的副本
-
尽管误码是无法避免的,只要做到发送方发送什么接收方能接收什么就属于可靠传输
使用广播链路进行数据传输
- 在帧头中有大部分的字节都是用来存储地址的
- 例如
- 他就有12个字节是用来存储地址的