2016.3.23 数据链路层

数据链路,顾名思义,数据链路就是链路来传输数据,也就是物理链路+逻辑链路(协议,或者说规程)来传输数据,物理硬件对应着网络适配器。

在网络结构中,数据链路层位于网络的倒数第二层,也就是在物理层上面一层,负责比较简单的转发,主要有两种模式,点对点和广播。点对点使用ppp协议,广播使用csma/cd模式。

数据链路层比较傻,只会局部的转发,而且是通过mac地址,所以头脑简单,不过转发比较发达。做的工作无非就是上面有任务包装一下,下面有事情上传以下,保证自己不出错就好。所以是哪个主要的问题就是封装成帧,透明传输和差错检测

封装成帧就是上面有任务说,小数据链路子啊,你来给我传这么个消息下去,于是,小数据链路就加上开头结尾什么的soh(start of header)还有eot(end of transmission)就传出去了,加上开头结尾就防止了这个消息被人家理解不能,不知道什么时候说完没。

透明传输就是不用在乎传的是什么,老佛爷传输,才不管总管怎么说呢!于是数据链路的目的就是尽可能的使得说的话不会和开头结尾冲突啊,但是这么一些消息你怎么知道呢?其实就是加个转义字符啦!

差错检测,其实主要有两部分,第一种是消息内部某比特传输错误了,这个其实加个校验就成,第二个就是传输的数据没错,但是丢包啦,重复啦,失序啦这些问题。首先第一个错误,防止中间的比特出错,那么就使用crc这个方法来加个余数,然后传输的东西就成了原始数据加上一个检验,是不是感觉可靠多了啊,原理类似于下载文件的md5等,就是为了一个验证。如果不能匹配,那就丢掉好啦。第二个错误,就是防止丢包、重复、失序等问题,那就编号,确认,重传这个机制,不过来来回回交互太多,太慢,所以在网络情况不太好的时候用这种方法还成,现在我们的网络都这么可靠了,一般也就不靠数据链路层干这个了,如果有错误的,不管了,交给上层。让tcp去解决。

好啦,这下就完美啦!上层的ip数据报包装一下,加个fcs校验,再加个头尾,然后就丢出去,收到的帧拆开看看对不对,然后再丢给上层。

下面就说一说和点对点协议ppp相关的内容,在很久很久以前有一个高级数据链路控制hdlc但是因为太复杂了,因此有一个简单得多的ppp协议。这个协议干啥的呢?比如说我们个人电脑连接到购买了服务的isp上,那么我们首先要建立连接,比如说我们要说好,连上物理线路,我要发包啦,数据链路层负责我电脑的消息能够传递到isp上,然后剩下的如果这个包继续传输的话,还要约定ip等内容,配置网络层相关参数,这样才能够使得我的电脑能够自由的上网。而这一切的一切都是要通过ppp协议开始。

我们在宽带上网的时候总会有个pppoe的配置,就是point
to point over Ethernet的缩写。这个协议将会使得千家万户开始连接互联网。这个协议公布于1999年。

假设我们要来制定协议,那么我要提出什么要求呢?首先,要简单,就是一个底层的传输,也不用太多思考,就是发就好了,所以简单就好,能检查错误,丢弃出错的帧。再有就是之前所说的封装成帧,对上层要透明,要支持很多的网络协议,要支持多种物理的链路,还要能够有协商的东西,比如说我们发消息的时候用一种帧来表示,开始配置网络的时候要用另一种方式来表示。类似于电脑启动时候的bootloader和启动之后的操作系统使得。总之要有环境,然后才干正事儿。

所以ppp协议有这么三个部分。第一个部分是正常的传输ip数据报,第二部分是来配置链路相关参数的lcp,第三部分是配置网络的ncp这其实符合我们最开始的设想,首先我们要链接的时候,先要本层相关的东西配置好,这就要用到lcp,配置好了之后,相邻的两个节点就已经畅通了,那么就要开始配置能不能在互联网上遨游了,这时候就要更高层次的网络层的配置,通过ncp来表示。都好了之后,我的电脑到isp的链路好了,我的电脑在以太网上的ip地址也有了,我就能去玩耍了,这时候发送的消息就是正常的ip数据报的消息了。

所以这个协议的三种不同的组成部分刚好对应了真实的建立连接的过程。

既然ppp协议的这个帧能够做这么三件事儿,那么具体怎么来实现呢?

首先要有头有尾,这样才能够区分是不是,所以有个flag来标记,而且非常对称,0111 1110,这样来表示开始和结束。在开始的部分还有就是表示这个数据报是什么类型的,是lcp还是ncp还是包含ip数据报,这其实是在开头的协议子段来决定的,在尾部还有一部分就是fcs。

所以五个有用的部分,flag protocol data fcs flag当然,在head中还有两部分没有什么大用,分别是address和control。

在传输的时候有这么几点需要考虑,首先就是传输是同步还是异步,如果是同步,那么就是一个比特一个比特的传输,如果是异步,那么就是一个字节一个字节的传输,再这样的传输的时候就带来一个问题,我的其中有些报文中的内容可能和我的最后的开始和结束的flag重复了怎么办,这样可能导致我错误的分段了。那么在传输的时候呢,如果是异步的,我们就可以像是转义字符似的来对于我们的数据流进行处理,这样似的任何可能的“嫌疑字节”都被特殊标记出来,不会被误认,这个方法叫做字节填充。如果是同步的一个比特一个比特的传输,那么就把如果有连续的5个1,就在第五个1后面加一个0,比如11111->111110,接收的时候如果遇到了五个1,自动去掉后面的一定有的一个0就好,这样就避免了在数据中存在6个1的情况,使得我的数据肯定不会有flag在其中,这叫做零比特填充,对于这种填充的方式是通过硬件来实现的,所以不会有什么效率上的问题。

当我打算建立链接的时候,我首先在物理上进行连接,然后通过lcp配置相关报文的参数,最后通过ncp配置网络参数。

在配置lcp中,首先要确定双方的鉴别协议,就是我想链接你,但是不行啊,你不让,不是谁都能链接的啊,所以要商量一下协议,通过了,好,继续谈接下来的ncp的事情,不通过那就没戏了。

在通过了鉴别之后,就是可以来进行网络层的设置了,比如说通过ncp中的ipcp协议来配置ip相关的数据。

不用这个链路的时候按照ncp,lcp最后是物理链接的顺序逐渐断开就好。

时间: 2024-10-14 00:11:23

2016.3.23 数据链路层的相关文章

2016.10.23大型在职研究生招生说明会

气温骤降,金秋已值,一年一度的十月攻坚战开始了.伴随着在职研究生新政的颁布,北京地区各大院校在职研究生的新简章轮番更新,给很多准备报考在职研究生的学员带来了各种混乱以及忐忑. 正巧,2016年秋季大型在职研究生招生说明会即将在北京国家图书馆召开.不管你对在职研究生有多少疑问,这次会议都会给你一个完美的解释. 10月23日北京地区大型在职研究生招生说明会有必要去吗?去了以后真的能解决所有疑惑吗? 其实啊,我们在9月17日已经成功举办了一次北京大型在职研究生说明会,通过9.17说明会的完美收官总结一

OneZero第三次站立会议(2016.3.23)

会议时间:2016年3月23日 13:00~13:15 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论并修改. 会议内容:以下为会议插图 1.界面原型方面,夏在统计界面中添加了“圆饼图”界面,在主界面添加了“摇一摇”按钮并添加了摇一摇界面.如下图: 2.冉已经确定开发环境.如第一张图所示.随后便会让所有成员拷贝,安装,配置.冉写出了开发环境的安装配置文档,十分之赞. 3.需求图,张已经修改完毕.接下来是需求列表的整理,张正在进行中. 会议体会:团队交流流畅.当一个成

2016/11/23 学习总结

今天学了JDK中的常用类 Date和Calendar以前就用过,但今天再看还是跟第一次用一样.果然这些工具就要常用才行呢-- 老师让用MarkdownPad来作笔记,支持html,很溜啊,我是不是应该再过一遍HTML啊,全忘了... 摘抄了一些笔记-- 11/23学习笔记: JDK常用类 1. System类 7. DateFormate抽象类与SimpleDateFormate类 2. Runtime类 8. Calendar抽象类与GregorianCalenlar类 3. String类

2016.9.23小程序---数据库

学生表:t_student编号s_id 整形 主键 自增姓名:s_name 字符串 不允许重复 性别:s_sex 字符串 默认值 男 年龄:s_age 整形 班级: s_class 字符串 建表 并添加数据,数据不能少于10条,并完成以下题目 1.把刘基的名字修改为刘伯温2.唐伯虎年龄20,性别男,班级为T130,添加到表中 3.查询出所有姓名包括伯的所有的人员的信息4,查询年龄在10-20之间的所有人员的信息5,查询前5条年龄在10-20之间的所有人员的信息6,将年龄在10-20之间的所有人员

2016/09/23

1.  Configparser # configparser用于处理特定格式的文件,其本质上是利用open来操作文件. import configparser config = configparser.ConfigParser() config.read('f1',encoding='utf-8') # 获取所有节点 ret_1 = config.sections() print(ret_1) # 获取指定节点下所有的键值对 ret_2 = config.items('section1')

2016.4.23 浙江省赛题解

Apples and Ideas Time Limit: 2 Seconds      Memory Limit: 65536 KB "If you have an apple and I have an apple and we exchange these apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these

2016.6.23 计算机网络复习要点第三章之扩展的以太网

**扩展的以太网在网络层看来仍然是一个网络: 1.在物理层把以太网扩展: **以太网上的主机之间的距离不能太远(例如,10BASE-T以太网的两个主机之间的距离不超过200米),否则主机信号经过铜线的传输就会衰减到使CSMA/CD协议无法正常) **现在扩展主机和集线器之间的距离的一种简单的方法就是使用光纤和一对光纤调制解调器: **光纤调制解调器的作用就是进行电信号和光信号的转换,由于光纤带来的时延很小并且带宽很高,因此使用这种方法可以很容易的使主机和几公里以外的集线器相连接: **多级结构的

2016.5.23 Mybatis 框架(二) 原生态jdbc程序 问题总结

jdbc程序 1. 创建JAVA工程 加入jar包 数据库驱动包(mysql) 其实只需要上边的驱动包,因为用的是 Mysql ,一般版本不是问题 ,本机是mysql 5.6 下边的是oracle 驱动包 2. 创建 jdbcTest工程 1 package cn.itcast.mybatis.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedState

2016/9/23总结电脑内容

1.通用搜索引擎面临着索引规模.更新速度.个性化需求等多方面挑战 2.如果网页 p 中包含超链接 l, 则 p 称为链接 l 的父网页:如果超链接 l 指向网页 t, 则网页 t 称为子网页,又称为目标网页. 3.主题网络爬虫的基本思路就是按照事先给出的主题, 分析超链接和已经下载的网页内容, 预测下一个待抓取的 URL 以及当前网页的主题相关度, 保证尽可能多地爬行. 下载与主题相关的网页, 尽可能少地下载无关网页 4.主题网络爬虫,主题定制爬行策略和相关算法 研究进展分析总结:①基于文字内容