网络基础知识
{Back to Index}

Table of Contents

1 物理层

1.1 带冲突检测的载波侦听多路复用

clip-image0015.jpg

Figure 1: CSMA/CD

主机在发送数据前先检查网络是不是空闲,如果空闲则发送数据,如果数据发送时产生冲突,则等一会儿(backoff)再发,所以在网络中不允许多路信号同时发送。

1.2 集线器

集线器 (Hub) 本质上是多端口的中继器。它不记忆数据是从哪个 MAC 地址发出,哪个 MAC 地址在哪个端口(以广播的方式发送数据)。

Hub 既不能隔断冲突域,也不能隔断广播域。

1.2.1 冲突域

一个主机发送报文,另一个主机也发送报文,产生冲突,则两个主机在一个冲突域。

1.2.2 广播域

一个主机发送广播,另一个主机收到,则两个主机在一个广播域。

2 链路层

2.1 以太网桥

网桥的目的是为了分割网络冲突域,使网络冲突限制在最小的范围内,本质上属于低配版的交换机(通常只有 2 个接口)。

网桥可以隔断冲突域,但不能隔断广播域。

  • 以太网桥监听数据帧中源 MAC 地址,学习 MAC ,建立 MAC 与端口的映射关系
  • 对于未知 MAC 地址,网桥将转发到除接收该帧的端口之外的所有端口
  • 当网桥接到一个数据帧时,如果该帧的目的位于接收端口所在网段上,它就过滤掉该数据帧; 如果目的 MAC 地址在位于另外一个端口,网桥就将该帧转发到该端口
  • 当网桥接到广播帧时候,它立即转发到除接收端口之外的所有其他端口

bridge-principle.png

Figure 2: 网桥原理

2.2 交换机

交换机 每个接口对应一个冲突域。

795254-20191114192529482-1004666228.png

Figure 3: Hub 和 Switch 的冲突域

交换机同样无法隔断广播域, 隔断广播域需要使用路由器。

网卡可以与连接的媒介进行 协商 ,来决定是否按照全双工(交换机)或半双工(集线器)通信:

root@ip-172-31-7-183:~# ethtool ens3
Settings for ens3:
        Supported ports: [ ]
        Supported link modes: -> 支持的通信方式
            10000baseT/Full -> 10000M,双绞线(Tx),全双工(Full)
        Supported pause frame use: No
        Supports auto-negotiation: No
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No -> 是否启用自动协商
        Speed: 10000Mb/s -> 当前速度状态
        Duplex: Full -> 当前双工状态
        Port: Other
        PHYAD: 0
        Transceiver: Unknown!
        Auto-negotiation: off
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

2.2.1 VLAN

VLAN 的目的地就是为了在交换机上实现广播域的隔断。

不同 VLAN 进行通信 需要经过路由器

vlan.png

Figure 4: VLAN 之间通信需要通过路由器

2.2.1.1 TRUNK

如果使用上图所示的结构来搭建网络,会造成交换机上的端口大量浪费(需要额外端口与路由器相连),这时候就需要用到 TRUNK 。
TRUNK 不属于任何 VLAN ,但是可以走多个 VLAN 的数据。

数据通过 TRUNK 时,会按照 802.1Q 标准, 在数据链路层的帧中 添加 vlan id 信息。 1

2656px-Ethernet_802.1Q_Insert.svg.png

Figure 5: IEEE 802.1Q

TRUNK 通常用于交换机之间的级联,和在单臂路由架构中,路由器和交换机之间的连接。

3 网络层

3.1 IP 地址

3.1.1 特殊地址

3.1.1.1 0.0.0.0

表示一个集合:所有未知的主机。

当系统启动时,会向外发送 ARP 广播,询问某个 IP 有没有设备在使用,这时会使用 0.0.0.0 这个地址。2 , 3

pracnet.net-arp-probe-announcement.png

Figure 6: ARP with sender IP 0.0.0.0

3.1.1.2 255.255.255.255

同一网段内(同一广播域)的所有主机。

3.1.1.3 127.0.0.1 ~ 127.255.255.254

本地回环地址。

只要和本地回环地址在同一网段内的地址均能 ping 通:

root@ip-172-31-6-29:~# ip a show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
root@ip-172-31-6-29:~# ip a add 1.2.3.4/16 dev lo -> 给 lo 添加地址
root@ip-172-31-6-29:~# ip a show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 1.2.3.4/16 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
root@ip-172-31-6-29:~# ping -c 1 1.2.5.6
PING 1.2.5.6 (1.2.5.6) 56(84) bytes of data.
64 bytes from 1.2.5.6: icmp_seq=1 ttl=64 time=0.045 ms -> 只要是在 1.2.0.0/16 网段内的都能 ping 通

--- 1.2.5.6 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.045/0.045/0.045/0.000 ms

root@ip-172-31-6-29:~# ping -c 1 1.3.5.6
PING 1.3.5.6 (1.3.5.6) 56(84) bytes of data.

--- 1.3.5.6 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms -> 非 1.2.0.0/16 网段的地址不能 ping 通

3.1.1.4 224.0.0.0 ~ 239.255.255.255

组播地址, 224.0.0.1 特指所有主机, 224.0.0.2 特指所有路由器, 224.0.0.2 特指 OSPF 路由器。

这类地址多用于一些特定的设备和程序。

3.1.1.5 169.254.x.x 4

如果 Windows 主机使用 DHCP 自动分配 IP ,而又无法获得 IP ,系统会为主机设置这样的地址。

3.2 路由器

只要是涉及跨网段的通信,就需要用到路由器。 网关是路由器的一种, 主机和网关必须在一个网段内

路由器主要作用如下:

  • 分隔广播域
  • 选择路由表中到达目标最好的路径
  • 维护和检查路由信息
  • 连接广域网

3.2.1 路由分类

  • 主机路由

    例如: ip route add 192.168.1.2/32 dev eth0

  • 网络路由

    例如: ip route add 192.168.1.0/24 dev eth0

  • 默认路由

    例如: ip route add default via 172.31.0.1 dev eth1

3.2.2 动态路由协议

  • RIP

    通过计算路径上经过的路由器个数来决定使用哪条路由,是最简单的路由协议,用的不多。

  • OSPF

    通过计算路径上经过的时间来决定使用哪条路由,多用于城际网络。

  • BGP

    主要用于互联网。

3.2.3 单臂路由

通常路由器会有好几个接口,单臂路由器只有一个接口,但该接口上会有多个 IP 地址:

single-hand.png

Figure 7: 单臂路由

Footnotes:

Author: Hao Ruan (ruanhao1116@gmail.com)

Created: 2020-03-16 Mon 20:42

Updated: 2021-08-17 Tue 11:23

Emacs 27.1 (Org mode 9.3)