一、认识以太网
数据链路层重点协议主要是“以太网”
比如我们平时插的网线,就叫做“以太网线”
“以太网” 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了
一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等;
例如以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等;
以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等;
1)以太网帧格式
我们这里的目的地址和源地址都是用6个字节表示的,这个比IPv4更长,长了约6w倍。
这里的地址称为“mac”地址(也叫物理地址)
mac地址做到了,每个设备都是唯一的(每个网卡都是唯一的),这是在网卡出厂的时候就写死了
可能会有人问:“这个网卡物理地址能不能改呢?”
回答:有些网卡可以改,因为有些网卡是支持手动配置的
这里的物理地址00-EO-4C-8D-46-E6
注:一台电脑上可能会有多个网卡,这些不同网卡的物理地址也是不同的
可能会有同学问:“都有IP地址了,为啥还要物理地址?”
因为当年网络层协议和数据链路层协议是独立研发出来的,ip地址和mac地址按理来说有一套就够了。
现在的现状就是当前的mac地址和IP地址同时使用,表示不同的功能。
IP地址用来表示一次传输过程中的起点和终点
mac来表示传输过程中,任意两个相邻节点之间的地址
(一个以太网数据帧,在每次转发的过程中,源mac和目的mac都会改变)
二、认识MTU
MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层,产生的限制(简单说就是这个范围取决于硬件设备)。比如上图的46~1500
以太网和硬件也是密切相关的,其他硬件设备,对应的数据链路层协议,可能又不一样,MTU可能也不相同。
数据链路层考虑的是相邻节点之间的数据传输
考虑这个细节的时候,就需要关注到交通工具是什么
不同的交通工具,能够搭载的数据量就不太同
1)MTU对IP协议的影响
如果数据报超过了MTU怎么办?
IP层能够分包
IP层的分包,其实不是分给IP的报头的64k准备的,更多的是为了适应数据链路层的MTU
分包过程:
将较大的IP包分成多个小包,并给每个小包打上标签;
每个小包IP协议头的 16位标识(id) 都是相同的;
每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记
(当前是否是最后一个小包,是的话置为1,否则置为0);
到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;
一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数据;
(IP分包具体详见笔者上一篇:网络层重点协议IP协议文章)
2)MTU对UDP协议的影响
我们之前说过UDP数据也是有长度限制的,但是UDP其实很容易触发这里的MTU,如果UDP的包达到或超过MTU的一个范围,就会导致IP分包(一个包变成多个包,丢包概率会更高)
3)MTU对TCP协议的影响
ps:让我们再回顾一下TCP协议:
TCP的一个数据报也不能无限大,还是受制于MTU。
TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size);
TCP在建立连接的过程中,通信双方会进行MSS协商。
最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度
(这个长度仍然是受制于数据链路层的MTU)。
双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。
然后双方得知对方的MSS值之后,选择较小的作为最终MSS。
MSS的值就是在TCP首部的40字节变长选项中(kind=2);
MSS:TCP中在IP不分包的情况下,最多搭载多少载荷,这个值也取决于TCP和IP的报头(报头都是报头的)、
分包的开销还是有的,MSS对TCP起到一定的提示作用,当前传输TCP的数据长度不超过MSS的时候,是属于最高效的状态。
三、ARP
ARP报文并不是用来传输数据的,只是起到一个辅助的效果。
路由器这个的设备,在转发设备的时候,首先拿到的是一个IP地址(目的IP),通过IP地址来决定接下来这个数据怎么走(从哪个端口出,发送到哪个端口)
因此就得决定,接下来封装的以太网数据帧,目的mac是什么,需要根据ARP协议,建立起IP->mac这样的映射关系——类似hash表这样的键值对结构,但是这个表不一定是在内存里,也可能是直接在硬件中存储。
当设备启动的时候,就会向局域网中,广播ARP报文,每个设备收到之后,都会给出一个应答。
应答的信息中就包含了自己的IP和mac
发起广播的一方就可以根据这些应答,建立起这个映射表了
举个例子:我想统计每个同学的邮箱
我广播一下:“同学们把自己名字和邮箱发给我”
大家收到这个广播消息,就私信给我,然后我把这些结果整理到一张表格上。
ps:关于RARP只是在偶尔的场景中偶尔用到,我们这里不多介绍了
四、一些补充
1)应用层重点协议DNS
DNS是一个应用层协议,它起到的效果就是域名解析
由于IP地址不好记,即使变成了点分十进制,仍然对人类来说不太友好,就可以使用一串英文单词来表示这个IP地址,这串英文单词就称为域名
比如www.baidu.com这就是域名
域名和IP地址之间,是一个一一对应的关系
DNS系统,最开始的时候,只是一个普通的文件,称为host文件
现在,虽然host文件已经不再使用了(想用也还是好使的),全世界域名那么多,总不能每时每刻对这个host进行更改
于是,成立了一个专门的机构,赋值维护这里的域名和IP的对应关系,比如你要申请一个域名,就需要去和这个机构进行报备
这个机构维护一组服务器,把host文件存到这个服务器里——域名解析服务器(根域名解析服务器)
你自己的电脑如果想进行域名解析,就去访问一下这个机构的服务器
那么问题就来了:全世界设备这么多,每个设备上网都要去访问这个域名解析服务器吗?域名解析服务器不会垮掉?
回答:全世界各个国家、地区、城市都有各自的网络运营商,这些网络运营商就会就近架设域名解析镜像服务器
(镜像就相当于照镜子一样,把里面的数据复刻一遍)
咱们平时上网,一般就是就近访问了我们的镜像服务器
如果有新的域名出现,或者旧的域名消亡,就让镜像服务器和根域名解析服务器定期进行同步即可
当我们的主机查询一次DNS之后,主机就会把这个查询结果缓存一定的时间(比如浏览器进行缓存),下次再访问到同一个域名的时候,就可以省略查询DNS的过程了,因为DNS域名和IP的对应关系是很少变化的。