目录
1.认识以太网
数据链路层:用于两个设备(同一种数据链路节点(同一局域网))之间进行传递
- "以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
- 例如以太网中的网线必须使用双绞线; 传输速率有 10M, 100M, 1000M 等;
- 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN 等;
2.以太网帧格式
以太网的帧格式如下所示:
- 源地址和目的地址是指网卡的硬件地址(也叫 MAC 地址), 长度是6字节( 48 位),是在网卡出厂时固化的;
- 帧协议类型字段有三种值,分别对应 IP、 ARP、 RARP;
- 帧末尾是 CRC 校验码。
6位目标地址,源地址,mac地址就是6字节
1.如何解包?
定长报头:前10字节和后4字节去掉,剩下的就是数据了。
2.如何分用?
类型字段:表示上层是什么协议,这样就能很好的把数据交给上层
3.模拟一次局域网通信(交换机)
下面就是一个局域网,有各种主机,每个主机都有自己的mac地址。在发送数据的时候,(src会带上自己的mac地址,dst是目的机的mac地址,data:发送的数据)会将发送的通过数据网络协议栈变成数据帧,然后通过局域网发送到局域网中,局域网的主机都能收到,主机会通过mac地址判断是不是自己的消息,如果是自己的消息,就会接收处理消息,最终以同样的方式发送回去。这就采用mac地址在局域网中进行通信了。
- 以太网中, 任何时刻, 只允许一台机器向网络中发送数据
- 如果有多台同时发送, 会发生数据干扰, 我们称之为数据碰撞
- 所有发送数据的主机要进行碰撞检测和碰撞避免
如果多个主机在局域网中,是不可避免的。 任何时刻, 只允许一台机器向网络中发送数据,那么在系统观念当中,局域网其实是一种临界资源!如果发送碰撞了就进行检查,重发,以维持这个通信
- 没有交换机的情况下, 一个以太网就是一个碰撞域
- 局域网通信的过程中, 主机对收到的报文确认是否是发给自己的, 是通过目标mac 地址判定
如果存在交换机的话,比如第一次发送数据,A向F进行发送,由于交换机是存在两个端口的,那么i0端口就会记录A的mac地址,此时交换机就知道A在i0一侧,但他此时不知道F在哪侧,交换机会把消息转发到i1侧的主机,若此时每台主机都进行了发送消息,那么交换机就会知道每台主机的位置。若此时A向E发送了消息,F向C发送了消息,那么交换机不会把交给E的消息给i1一侧了,交给F的消息也不会被转发给i0一侧了,这样就避免了两台主机的数据碰撞了,因为他们两个的数据在不同的区域内,所以交换机的作用就是划分碰撞域,以提高网络性能和可靠性
4.认识 MAC 地址
• MAC 地址用来识别数据链路层中相连的节点;
• 长度为 48 位, 及 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
• 在网卡出厂时就确定了, 不能修改. mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址对比理解 MAC 地址和 IP 地址
• IP 地址描述的是路途总体的 起点 和 终点;
• MAC 地址描述的是路途上的每一个区间的起点和终点;
5.认识MTU
MTU 相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制
• 以太网帧中的数据长度规定最小 46 字节,最大 1500 字节,ARP 数据包的长度不够 46 字节,要在后面补填充位;
• 最大值 1500 称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
• 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的 MTU了,则需要对数据包进行分片(fragmentation);
• 不同的数据链路层标准的 MTU 是不同的;
MTU 对 IP 协议的影响
由于数据链路层 MTU 的限制, 对于较大的 IP 数据包要进行分包
• 将较大的 IP 包分成多个小包, 并给每个小包打上标签;
• 每个小包 IP 协议头的 16 位标识(id) 都是相同的;
• 每个小包的 IP 协议头的 3 位标志字段中, 第 2 位置为 0, 表示允许分片, 第 3 位来表示结束标记(当前是否是最后一个小包, 是的话置为 1, 否则置为 0);
• 到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;
• 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是 IP 层不会负责重新传输数据;MTU 对 UDP 协议的影响
• 一旦 UDP 携带的数据超过 1472(1500 - 20(IP 首部) - 8(UDP 首部)), 那么就会
在网络层分成多个 IP 数据报.
• 这多个 IP 数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就
意味着, 如果 UDP 数据报在网络层被分片, 整个数据被丢失的概率就大大增加了MTU 对于 TCP 协议的影响
• TCP 的一个数据报也不能无限大, 还是受制于 MTU. TCP 的单个数据报的最大消息长度, 称为 MSS(Max Segment Size);
• TCP 在建立连接的过程中, 通信双方会进行 MSS 协商.
• 最理想的情况下, MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度
仍然是受制于数据链路层的 MTU).
• 双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值.
• 然后双方得知对方的 MSS 值之后, 选择较小的作为最终 MSS.
• MSS 的值就是在 TCP 首部的 40 字节变长选项中(kind=2);
6.ARP协议
虽然我们在这里介绍 ARP 协议, 但是需要强调, ARP 不是一个单纯的数据链路层的协
议, 而是一个介于数据链路层和网络层之间的协议ARP 协议的作用及原理
报文要交付给下一跳结点,必须知道下一跳结点的mac地址,因为要封装mac帧;我们可能只知道目标主机的IP地址,并不清楚目标主机的mac地址。因此我们有将IP地址转成mac地址的作用--ARP协议。
- 在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址;
- 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
- 因此在通讯前必须获得目的主机的硬件地址;
主机A是路由器,主机B是该局域网内的一台普通主机
- 源主机发出 ARP 请求,询问“IP 地址是 192.168.0.1 的主机的硬件地址是多少”并将这个请求广播到本地网段(以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示广播);(将数据帧封装好)
- 目的主机接收到广播的 ARP 请求,发现其中的 IP 地址与本机相符,则发送一个ARP 应答数据包给源主机,将自己的硬件地址填写在应答包中;(这是在arp层进行处理的,而不是在mac帧层进行处理的,收到的主机要先看是arp应答还是arp请求再去对比IP地址),等收到主机B的应答后,主机A就知道了主机B的mac地址。主机A既知道主机B的IP地址,又知道主机B的mac地址,此时就能把封装的mac帧交给主机B了,实现正常的通信
- 每台主机都维护一个 ARP 缓存表,可以用 arp -a 命令查看。 缓存表中的表项有过期时间(一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效,下次还要发 ARP 请求来获得目的主机的硬件地址。
ARP 数据报的格式
- 注意到源 MAC 地址、 目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
- 硬件类型指链路层网络类型,1 为以太网;
- 协议类型指要转换的地址类型,0x0800 为 IP 地址;
- 硬件地址长度对于以太网地址为 6 字节;
- 协议地址长度对于和 IP 地址为 4 字节;
- op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答。