Home 数据链路层
Post
Cancel

数据链路层

拓扑类型

  1. 点对点网络
    • PPP ppp-frame
    • 两类帧
    • Link Control Protocol
      • 建立和配置连接
    • Network Control Protocol
      • 每个支持的网络层协议都有一个 eg:IP数据包在PPP协议的IPCP里发 - 星型拓扑
    • 一个switch在中间转发所有流量,每条路径上点对点不会冲突
    • 如果switch上出现拥塞,switch可能发假的冲突信号抑制过多流量

(TODO:两个设备还是会冲突吧)

  1. 广播网络
    • Medium Access Control:解决碰撞,公平高效地分享介质
    • Aloha
    • Carrier Sense Multiple Access/Collision Detection (CSMA/CD)
      • 用于Ethernet
      • 可以冲突,冲突了退避
      • 工作过程:信号在介质上传播的最长时间是a
        • 如果介质占用,等到介质空闲
        • 如果介质空闲,立即开始发送
        • 开始发送,开始发送后监听介质2a时间,看是否冲突
          • 最多a时间后发生冲突,最多a时间听到冲突
          • 假设A在介质一端,B在介质另一端,A发送信号后接近a时间B发送,A需要接近2a时间收到冲突信号
        • 如果检测到冲突,发送冲突信号,停止发送,进入指数退避
          • 等待时间槽为2a
          • 冲突第i次,从\(0~2^i - 1\)中随机一个数,等待这么多个2a长时间再尝试发送
            • i >= 10时随机数保持 0~2^10 - 1
          • 连续冲突16次放弃发送
            • Carrier Sense Multiple Access/Collision Avoidance (CSMA/CA)
    • IEEE 802.11 Wlan:无线一些情况下无法检测冲突,因此要避免冲突 hidden-exposed-terminal
      • Hidden terminal:(a)中Host A无法知道Host C正在通信,导致冲突
      • Exposed terminal:(b)中Host C以为信道忙,等着不通信,其实这个时候可以和D通信
    • 两种模式 wlan-modes
      • Infrastructure mode:固定AP,大家都和路由器通信。换ap有专门的hand off方法
      • ad-hoc mode:host可以组网,转发数据
    • 工作过程 csma-ca
      • Distributed Coordination Function (DCF) Inter-Frame Space (DIFS)
        • 发送之前随机等待一段时间,如果信道一直空闲开始发送
        • 如果要发送时信道占用
          • 等到发送完毕
          • 等DIFS
          • 之后等退避时间。退避过程中如果信道占用暂停计时,等到计时完毕尝试发送
      • Request to Send / Clear to Send:解决hidden terminal问题
        • 发送前发RTS,带上需要占用信道的时间
        • 目标空闲回CTS,所有能和目标通信的host都会收到CTS,这段时间就算介质空闲也是占用的
      • 传输完成后回复ack

MAC地址

不同的数据链路层协议不同。Ethernet地址48位,全球唯一

  • 前24位:vendor component,每个生产商一个
    • 第八位标记multicast
  • 后24位:group identifier,每个设备不同

ARP

Address Resulution Protocol

  • 网络层地址转成数据链路层地址
  • 不同的网络/数据链路层用不同的地址,ARP有不同的组合
  • L2协议,ARP帧永远不会过路由器
    • Proxy ARP是路由器在另一个冲突域代发的

ARP Table

每条记录通常20min过期。每当设备收到ARP帧,会首先将其中的IP<->MAC对应关系写到ARP Cache里。

内容

  • IP
  • MAC
  • Flag
    • permanent:手动配置的记录不会过期
    • pub:host会回复找这条MAC的IP
    • incomplete:发了request没回复

帧格式

arp-format

长度:28 Bytes(IP V4 <–> MAC,不同协议长度不同)。发的时候如果放在Ethernet帧中,最短要求46 Bytes,有18 Bytes的pad

  • Hardware Type:数据链路层地址类型
  • Protocol Type:网络层地址类型。比如IP 0x0800
  • Hardware length:数据链路层地址长度
  • Protocol length:网络层地址长度
  • Operation:操作类型。1 ARP Request,2 ARP Reply,3 RARP Request,4 RARP Reply。
  • Sender hardware address:发送者数据链路层地址
  • Sender protocol address:发送者网络层地址
  • Target hardware address:目标数据链路层地址
  • Target protocol address:目标网络层地址

(TODO:跟着google doc更新)

过程

L3下来的数据包需要L2转发时

  • 查ARP Table看有没有这个IP对应的MAC
  • 如果没有广播一个ARP Request,SHA和SPA写自己的MAC和IP,TPA写目标IP,THA在Request中会被忽略
  • 目标设备收到一个TPA == 自己IP的ARP Request,单播一个ARP Reply到发送的设备,把自己的MAC写到THA中,之后把Target和Souce对换

Proxy ARP

proxy-arp

  • 两个host实际是在不同的冲突域,但是IP/子网掩码配置让他们觉得自己是一个网段,会发ARP。
  • Proxy ARP是路由器代替主机回ARP请求,THA是目标host IP,TPA是路由器端口IP。
  • 可以向外部屏蔽局域网细节,可以用于NAT
  • 路由器在收到包之后会用L3的信息转发,一个端口可以代理多个host

Gratuitous ARP

Sender和Target信息都是Sender信息的广播ARP帧

可以用于

  • 向局域网广播自己MAC地址的变化
  • 新加入网络时检查自己的IP是否已经被占用

MTU

数据链路层中每个帧中最大的Payload长度,不算自己的协议头和尾

  • Ethernet,PPP:1500 Bytes
  • FDDI:4352 Bytes
  • PPP(低延迟):296 BYtes
  • Ethernet Jumbo Frame:9000 Bytes

Path MTU Discovery:找到路径上所有二层连接里最小的的MTU

  • 设置IP Flag中的Don’t Fragment
  • 发一个大数据包,等ICMP Unrechable
  • Payload里有MTU of next-hop

Destination Unreachable - Fragmentation required, and DF flag set

icmp unrechable

Bridge

bridge

IEEE 802.1d 网桥

  • 从一个冲突域向另一个冲突域转发数据包。进出协议相同时帧完全不会被修改
  • 如果两个冲突域协议不同,网桥可以做翻译

优点

  • 大规模局域网可以在bridge之间拉p2p骨干,之后bridge连多个设备,增加局域网距离
  • 扩大局域网规模
  • 分割冲突域,减少冲突
  • 更安全,设备只能看到自己冲突域的信息

数据转发

Filtering table:记MAC所在的端口

  • 目标MAC
  • 设备所在端口
  • TTL:默认300s

address-learning

地址学习:收到一个数据包就记录下发送者MAC和收到的端口

转发:查Filtering table

  • 找到了MAC:转发到所在端口
  • 找不到:转发到收数据包端口外的所有端口

生成树协议

broadcast-storm

环的危害

  • 广播风暴:一个环中所有网桥都不知道往哪转的数据包会被一直转发,占用大量带宽
    • 不一定是广播,只要所有网桥都不知道往哪发就会flood,造成风暴
  • Filtering table震荡:对于Bridge 1和Bridge 2,Host 1一直是一会在LAN A一会在LAN B,正常的数据包可能也会转到错误的地方并丢失

解决:去除拓扑中的环 -> 生成树协议

stp-topo

关键概念

  • Port ID:2 Bytes,1 Byte 优先级 + 1 Byte 端口号
  • Bridge ID:8 Bytes,2 Bytes 优先级 + 6 Bytes MAC -> 网桥中端口号最小的端口MAC
  • Root Bridge:拓扑中Bridge ID最小的网桥
  • Root Port:每个非根网桥到根网桥代价最小的端口,代价相同选Port ID小的
    • 代价可以是跳数,带宽。。。
  • Root Path Cost:根端口到根网桥的代价
  • Designated Port:一个LAN上到根网桥代价最小的端口
    • 两个网桥有代价相同的端口,选BID小的
    • 一个网桥两个端口代价相同,选PID小的
  • Designated Bridge:一个LAN Designated Port所在的网桥

建树

  • 找BID最小的网桥
  • 找每个网桥到根网桥代价最低的端口
    • 代价相同选PID小的
  • 找每个LAN所有端口里到根网桥代价最小的
    • 两个网桥代价相同选BID小的
    • 两个端口代价相同选PID小的
  • 所有的根端口和指定端口转发数据,其他所有端口block,只发BPDU这种控制信息

收敛

  • 所有网桥往出发BPDU,当自己是根网桥
  • 比较收到的所有BPDU,如果有更小的把人家当根网桥,继续发BPDU,每个端口发出的BPDU是不完全一样的
    • 发BPDU
      • 收到更小的根网桥
      • 拓扑发生改变
  • 一个端口可以听一个LAN里所有端口的BPDU,自己是不是指定端口就有B数了
  • 一个网桥综合所有端口收到的BPDU选自己的根端口
  • 除了根端口和指定端口,block所有其他的

注意

  • 根网桥不一定全是指定端口,可能一个LAN上有两个端口,要block一个

bpdu-format

All Rights Reserved.

Atom编辑器配置

网络层