在上一周的计网学习了network和Internet的总论。在这一周开始的未来几讲将集中在链路层link layer,并且会有相应的计网lab完成。在这一讲中,我们主要关注链路层提供的服务。

课程资料地址:https://cs.nju.edu.cn/lwz/networks/CH2-Direct Link Networks-1.pdf

链路层简介

来学习链路层之前,我们先来学一些术语:

  • layer-2:即data link layer,一种简化的称呼。
  • node:节点,包括hostsrouters
  • links:链路,连接相邻节点的通信信道(communication channel)。link的种类有point-to-pointmultiple accesswireless link(WIFI)
  • frame:链路层帧,layer-2的数据包称呼,为datagram的封装(datagram即网络层数据报)。

网络层负责的是任意两台主机之间的通信服务,链路层则是负责端到端的通信服务。

链路层实现位置

链路层由harwaresoftwarefirmware联合实现,具体设备在hostrouter(switch)里面。链路层的实现主体部分是在network adaptor中(网络适配器,有时称为网络接口卡,即网卡),network adaptor的例子有NIC、Ethernet Card、 802.11 Card等。

首先我们来看实现链路层硬件部分的网络适配器。位于网络适配器核心的是链路层控制器(一个芯片,实现了framing,link access, error detection等服务)。

在发送端,控制器取得了上层网络层发下来的数据报后,根据协议对其封装,设置差错检测比特,并将帧传进链路。

在接收端,控制器接收整个帧,对其进行差错检测,抽取出网络层数据报(向上传是软件负责)。

上图即链路层的实现位置:网络适配器硬件和运行在CPU上的软件。

链路层的软件组件实现了高速链路层功能,如组装链路层的寻址信息和负责激活控制器硬件。链路层软件在接收端负责的工作有响应控制器中断处理差错条件以及将adaptor抽出的数据报向网络层传递

所以,链路层可是协议栈中硬件与软件交接的地方

链路层提供的服务

概括

服务 功能 备注
framing 将网络层数据报封装成链路层帧,由链路层协议决定帧的格式结构 不同种通信(有线和无线)加的头部信息都不一样
link access 通过MAC协议来规定帧在链路上的传输规则,尤其协调多节点的传输 协调多址接入的媒介(coordinate);使用MAC来确定局部地址;Half-duplex and full-duplex 即半双工和全双工,收发同时进行
reliable delivery 保证无差错经链路层移动每个网络层数据报 易于产生高差错率的链路会实现服务,如无线传输,反之光纤这样的可靠传输就很少实现这个服务;还有流控机制
error detection && correction 差错检测服务给帧提供差错检测字段,让接收方可以检测帧中的比特差错;差错纠正则可以准确定位差错位置并进行纠正。 用来处理因噪声和信号衰减所造成的错误;发送信号用以重传或者把帧丢弃;这个服务实现不是必须的,但因为容易实现所以大多数都实现了

Framing 成帧

framing比较好理解,就是发送端将网络层传下来的数据报进行封装,加上一些信息例如像差错检测比特,流控(flow control)字段等;接收端就接收完整个帧后,根据封装信息进行差错检测,流控设置等操作,再抽出数据报传到网络层。

Link access 链路接入

链路接入有两种方式:point-to-point点对点链路接入 和 broadcast广播链路接入。

点到点链路接入是一种专用接入(只有单个发送方和单个接收方),它广泛用于长距离缆线连接,以及大部分的以太网技术。

广播链路接入能够让多个发送方和接收方共享相同的单一的广播信道,如传统的以太网和WLAN。这种接入方式会产生一个多路访问问题(Multiple access problem)

因为所有的节点都能传输帧,所以多个节点同时传输帧时,信道上的所有节点同时收到多个帧。此时就会在接收处发生帧的碰撞(即collisions)。这就导致碰撞的帧都丢失了,而且在碰撞时间间隔内信道也被浪费了。

这就需要协调多个节点对一个共享广播信道的访问。解决这个问题我们提出了MAC协议。它可以划分为三种类型:

  • Channel partitioning信道划分协议。物理媒介角度上切片,均匀频率。
  • Taking turns轮流协议。时间角度上切,频率不均匀。
  • Random access随机接入协议。前面两种可能造成信道的浪费,这类协议允许冲突存在,并为冲突提供解决机制。

我们在这讲先不详细介绍,不然很难一下子消化。留到后面MAC的时候再写写。

Reliable delivery 可靠交付

对于这个服务的实现我们采用流控机制flow control)。它可以确保我们的接收方不会被发送的帧给淹没,即预防接收方的buffer产生溢出。实现这个机制我们主要有两种协议:

1.Stop and Wait

这可以说是最早的链路层协议。它的实现很简单,对大的数据包传输的效率很不错(因为返回ACK信息的耗时和传输数据包的耗时相比不值一提),但ACK(“确定收到”信息)返回耗时对小包来说是耗不起的。它的过程就是你来我往一下一下,如下:

2.Sliding Window

我们直译是滑动窗口。相比于stop&wait协议的一次一包,滑动窗口协议每次传输都是一次发一批。

在这个协议中,有几个要点:

  • 帧上有一个k位的字段,k的范围是0-8,用来做帧的序号2^k(0-255);
  • 接收方有一个buffer,即window,它的大小为win个帧,win <= 2^k;
  • 发送端可以在没收到ACK的时候最多发送win个帧。
  • ACK后面的数字表示:发送端你可以发n号帧了;

我们来看看滑动窗口是怎么操作的:


然后滑动窗口对数据丢失的处理又细分为两种协议:

  • GO-BACK-N回退N协议。绝大多数硬件采用了这种实现(因为它的算法非常符合硬件,移位操作)
  • Selective Reject选择重传协议。少用,接收方需保有较大的足够的buffer。

我们可以来看这两篇文章:

[What is a Sliding Window Protocol in Computer Network ](https://www.tutorialspoint.com/what-is-a-sliding-window-protocol-in-computer-network#:~:text=A sliding window is also known as windowing.,Layer (OSI model) or Transmission Control Protocol (TCP).)

数据链路层-Data Link Layer:拆分比特流的成帧方法/滑动窗口协议/回退N协议/选择重传协议

Error detection and correction 差错检测和纠正

我们在链路层中实现的差错检测为比特级差错检测。一般在framing过程中我们把EDC字段加到数据报的末尾,它的检测逻辑如下:

可以说EDC越大,它给予的检测效果就越可靠。我们有两种主要的方法:

Parity Checking

奇偶检验。这差不多是最简单的检测方法,如果采用的是单个奇偶校验位,位的值取决于数据中1的数目是否为奇数/偶素。而二维奇偶检测的鲁棒性比一维的更高,它将数据划分为行列分布,并且按照行列来设置校验位,这可以让接收方根据行列位置进行对差错bit的修正。

Cyclic Redundancy Check

即CRC,循环冗余检测编码。详细操作如下:


这一讲就先写这么多,不然回看的时候没法消化……(第一讲写得太烂了)

计网学习笔记二 Link Layer Service的更多相关文章

  1. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  2. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  3. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

  4. Typescript 学习笔记二:数据类型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  5. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  6. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  7. Linux学习笔记(二) 文件管理

    了解 Linux 系统基本的文件管理命令可以帮助我们更好的使用 Linux 系统,以下介绍几个常用的文件管理命令 1.pwd pwd 是 Print Working Directory 的简写,用于显 ...

  8. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

  9. amazeui学习笔记二(进阶开发3)--HTML/CSS规范Rules

    amazeui学习笔记二(进阶开发3)--HTML/CSS规范Rules 一.总结 1.am:以 am 为命名空间 2.模块状态: {命名空间}-{模块名}-{状态描述} 3.子模块: {命名空间}- ...

  10. amazeui学习笔记二(进阶开发2)--Web组件简介Web Component

    amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...

随机推荐

  1. Jmeter 之 If 逻辑控制器

    在Jmeter 中如要在某种场景中才执行特殊请求,此时可用If 逻辑控制器来实现. If 逻辑控制器顾名思义当符合某个条件时则执行,添加路径:测试计划->线程组->逻辑控制器->if ...

  2. 基于.NetCore开发博客项目 StarBlog - (25) 图片接口与文件上传

    前言 上传文件的接口设计有两种风格,一种是整个项目只设置一个接口用来上传,然后其他需要用到文件的地方,都只存一个引用ID:另一种是每个需要文件的地方单独管理各自的文件.这俩各有优劣吧,本项目中选择的是 ...

  3. 解决scapy库下找不到IP,TCP模板的问题

    scapy版本: 问题描述: 我看到书中导入TCP,IP模块是通过from scapy.all import TCP,IP 上机实验发现找不到这个模块,通过大量查找发现此模块在最新版本中转移到其他包里 ...

  4. GeoLayout: Geometry Driven Room Layout Estimation Based on Depth Maps of Planes

    1. 论文简介 论文题目:GeoLayout: Geometry Driven Room Layout Estimation Based on Depth Maps of Planes Paper地址 ...

  5. 后端流传输excel文件到前端

    场景 公司有个需求,请求接口返回一个对应的excel数据 方法 1.可以使用后端生成excel后,返回一个下载地址 2.可以把数据吐给前端,前端使用对应的插件转换成excel数据 3.使用流式传输 优 ...

  6. DVWA靶场实战(四)——File Inclusion

    DVWA靶场实战(四) 四.File Inclusion: 1.漏洞原理: 随着网站的业务的需求,程序开发人员一般希望代码更加灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通 ...

  7. 01-Tcl基本知识

    1 Tcl基本知识 1.1 Tcl是什么? Tcl全称是Tool Command Language,是一种基于字符串的命令语言. Tcl是一种解释性语言,类似于其他脚本语言一样,直接对每条语句顺次解释 ...

  8. VUEX state 的使用学习二

    转载请注明出处: state 提供唯一的数据资源,所有的共享的数据都要统一放到store 中的state中进行存储; 状态state用于存储所有组件的数据. 管理数据 // 初始化vuex对象 con ...

  9. 记一下Go类型转换问题

    数值类型间可以相互转换 int<->int64,uint8<->float32,uint64<->float64 字符类型转换也可以 string<-> ...

  10. Unity_UIWidgets - 组件Container

    Unity_UIWidgets - 组件Container Container 构造 效果 结语 QQ 今日无推荐 Unity_UIWidgets - 组件Container 上周给大家讲完了Scaf ...