• 数据链路层的七七八八


    主要物理传输介质:线路/网卡/二层交换机(网桥)

    以太网

    封装好的以太网帧由网卡添加前导码和FCS ->
    由对端网卡接收后去掉前导码并使用CRC校验,如果帧损坏则丢弃,如果没有损坏则交给软件驱动处理 ->
    以太网驱动接收物理层传输过来的包读入内存 ->
    查看源mac和目的mac,如果是发给自己的则根据type字段的值交给传输层继续处理,如果不是则根据不同的拓扑设计会选择丢掉或转发。

    MAC地址

    在同一数据链路的MAC地址必须唯一,相当于身份证号,对于物理网卡MAC地址会被厂商烧到ROM中。

    帧格式

    以太网帧格式不同标准之间略有差距,例如使用较多的Ethernet II、IEEE802.3、VLAN帧体。

    • Ethernet II 应用最广,从个人电脑上抓包看到的基本都是这类帧体
    • IEEE802.3 可以做到对数据链路层更细节的控制
    • VLAN 可以在逻辑上划分不同的网段

    Preamble:在以太网帧前端有大小8 bytes的前导码,能够确保发送端与接收端时钟同步,兼容不同速率的NIC。前导码最后一个byte末尾为11,称为SFD(Start Frame Delimiter),表示后面发送的是以太网帧。
    MTU:以太网帧的最大传输单元(MTU)默认为1500,即承载的最大IP数据报文的最大长度为1500 bytes,超过了就要分片传输。1500 + 6(dst mac addr)+ 6(src mac addr)+ 2(type)+4(FCS)= 1518 bytes,所以以太网传输的最大的数据帧为1518 bytes。(MTU可以在系统做设置,在做mellanox适配时,ROCE模式可以通过调大MTU来提升性能)

    Ethernet II

    抓包软件看不到前导码和FCS,因为是从硬件会去掉前导码和FCS,将以太网帧交给驱动才是我们抓包到的内容

    以电脑到路由器的一个包为例,可以看到目的端是华为路由器,源端是我的macbook pro M2 MAX顶配版(狗头),类型表明以太网上一层的协议类型,wireshark已经给出了解析,type:0x0800为IPv4,接下来的事情就交给处理IP的程序去做了。

    IEEE802.3

    Ethernet II的type字段在此表示以太网帧的长度,此外多了LLC和SNAP字段,上层协议type包含在SNAP字段中

    IEEE802.3多了逻辑链路控制层(LLC)和SNAP,LLC部分各字段作用:

    • DSAP(Destination Service Access Point): 使用多协议栈时,告诉接收端在哪个协议栈缓冲区放置该信息
    • SSAP(Source Service Access Point ):发送源,如果设置为AA则表明是SNAP帧
    • CTRL(Control Byte):表明是LLC

    SNAP各字段作用:

    • 厂商(Vendor Code):厂家信息,通常设置为全0
    • 类型(Local Code):包含标识上层协议类型的code,该字段保证了对Ethernet II的兼容

    VLAN

    VLAN在企业中经常用到,用于在不改变物理线路的情况下逻辑上划分网段,虽然如此,但是VLAN逻辑层面控制和物理布线最好有明确整齐的规划,否则会一团糟。

    土黄色部分为VLAN帧相对于Ethernet II多出的部分,各字段作用如下:

    • TPID(Tag Protocol IDentifier):0x8100标识是否为VLAN帧(IEEE 802.1q tagged frame)
    • Priority:帧的优先级,3bit分为0~7个等级,值越大优先级越高
    • CFI(Canonical Format Indicator):主要用于令牌环网络和以太网之间的兼容,以太网交换机该字段设置为0

    交换机自学

    交换机通过查找转发表和数据链路层每个帧的目标MAC地址决定从哪个网口将数据帧发送出去,如果转发表上没有目标MAC地址,则除了接收该帧的端口,其他端口全部转发该帧,主机收到帧后会判断是否发给自己,如果不是则丢弃。
    构造转发表实际上是接收到帧时,将交换机端口和该帧的源MAC地址关联。后续的帧如果目标MAC地址存在于表上,则直接从关联的这个端口将包发送出去。

    ARP(Address Resolution Protocol)

    ARP是根据IP地址找MAC地址的协议,如果数据包中含有源MAC地址和目的MAC地址,则交换机通过查转发表将包从关联端口发送出去,如果此数据包中只有目标IP地址而没有目标MAC地址,就需要广播发送ARP请求,同网段收到包的主机如果不是发给自己丢弃,如果是发给自己则需要进行单播发送ARP应答,告诉请求者我的IP地址和我的MAC地址。

    抓包看看ARP的请求包,通过广播发送出去,上层协议使用0x0806(ARP)。ARP的target MAC address全0,还可以看到硬件类型为1(以太网),协议类型为0x800(IPv4),操作为1(请求)

    再看看ARP的应答包,单播的方式进行应答,附加了MAC地址

    RARP

    RARP(Reverse Address Resolution Protocol)是从MAC地址定位IP地址的一种协议,使用小型嵌入式设备,无法从DHCP获取IP地址,可以向RARP Server注册设备的MAC地址和IP地址,在设备启动后会发送RARP请求,RARP Server收到请求后会发出RARP应答,告诉该设备的IP地址。

    环路问题

    当两个交换机将两个局域网连起来的时候就很容易出现环路,因为ARP请求通过广播的形式发出,这样两个局域网都可以收到广播消息,两台交换机都能从两个局域网收到包,也都能向两个局域网发送包,当同一个包从局域网一和局域网二同时发送到交换机时,就破坏了交换机的自学机制,根本无法判断主机到底在哪里,于是就开始了无限的广播,这种现象就是环路问题。
    解决环路问题的方法主流的有

    1. 生成树协议:通过优先级向量将各交换机节点组成生成树(Spanning Tree Protocol),网络包根据树的路径传输,避免环路。
    2. 源路由法:记录发出数据的源地址是通过哪个交换机传输的,如果出现了环路,不会重复转发。

    学习自:
    《趣谈网络协议》刘超
    《图解TCP/IP》
    《图解HTTP》
    《网络是怎样连接的》
    https://www.firewall.cx/networking/ethernet/ieee-8023-snap-frame.html

  • 相关阅读:
    i7 1255u和i5 1135G7哪个好
    某度旋转验证码
    保险业SAP转型:奠定坚实的基础
    记录uniapp 高度铺满全屏的小技巧(不用去设置position: fixed定位)
    2022年全球市场干湿两用电动剃须刀总体规模、主要生产商、主要地区、产品和应用细分研究报告
    2023高教社杯 国赛数学建模C题思路 - 蔬菜类商品的自动定价与补货决策
    mac安装并使用wireshark
    聚焦采购全方位风险管理,全面提升工程企业采购效率与效益
    【LeetCode-中等题】106. 从中序与后序遍历序列构造二叉树
    ElementUI validate 验证结果错误的问题解决过程
  • 原文地址:https://www.cnblogs.com/tongh/p/17778369.html