10

计算机网络核心笔记

 3 years ago
source link: https://kingcos.me/posts/2021/computer_network_notes/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

计算机网络核心笔记

2021.05.22 by kingcos

Preface · 序
计算机网络是学习计算机的必修课,虽然我们可能很少深入底层,但有些内容了解更多才能支撑我们走的更远。

Release Notes ↕

计算机连接

  • 计算机之间通信需要知道对方的 IP 地址,并最终通过 MAC 地址(网卡地址),输送数据到网卡,由网卡判断接收(非目标 MAC 地址将丢弃数据)。
  • 两台计算机直接连接需要交叉线(非直通线)。
  • 冲突域(Collision Domain):在同一个冲突域中,一个节点发送的帧将可以到达任意一个节点。
  • 广播域(Broadcast Domain):在同一个广播域中,一个节点可以通过广播的方式到达任意一个节点。
  • 冲突域一般来说小于或者包含在广播域中。
  • 网线直连、同轴电缆、集线器、网桥、交换机连接的设备必须在同一网段,且连接的设备处在同一广播域。

连接方式 通信模式 特点 参考模型 同轴电缆(Coaxial) 半双工通信 容易冲突(形成冲突域);安全性低 物理层 集线器(Hub) 半双工通信 容易冲突(形成冲突域);安全性低 物理层 网桥(Bridge) 半双工通信 通过内置表存储各个接口对应的 MAC 地址;隔绝冲突域 数据链路层 交换机(Switch) 全双工通信 相当于接口更多的网桥 数据链路层 路由器(Router) 全双工通信 可以在不同网段之间转发数据;隔绝广播域 网络层

Reference

MAC 地址

2.svg
  • MAC 地址,全称 Media Access Control Address,译为媒体访问控制地址。
  • MAC 地址 共 6 个字节,即 48 位,以十六进制表示;其中前三个字节为组织唯一表示符号(OUI),由 IEEE 的注册管理机构分配给厂商;后三个字节为网络接口标识符(NIC),由厂商自行分配。
  • 当 MAC 地址 48 位全为 1 时,代表广播地址,即 FF:FF:FF:FF:FF:FF

Reference

ARP 协议

  • ARP,全称 Address Resolution Protocol,译为地址解析协议,用于通过 IP 地址获取 MAC 地址。
  • RARP,全称 Reverse Address Resolution Protocol,译为逆地址解析协议,用于将 MAC 地址转换为 IP 地址,后被 BOOTP、DHCP 取代。
  • ARP 的获取结果将会缓存为 IP 地址与 MAC 地址的映射,即 ARP 缓存。
  • 通过 ARP 广播获取的 MAC 地址属于动态(Dynamic)缓存,存储时间较短(默认 2 分钟),过期将自动删除;手动设定(arp -s)的则为静态。
  • ARP 与 RARP 均位于参考模型中的网络层。
➜  ~ arp
usage: arp [-n] [-i interface] hostname
       arp [-n] [-i interface] [-l] -a
       arp -d hostname [pub] [ifscope interface]
       arp -d [-i interface] -a
       arp -s hostname ether_addr [temp] [reject] [blackhole] [pub [only]] [ifscope interface]
       arp -S hostname ether_addr [temp] [reject] [blackhole] [pub [only]] [ifscope interface]
       arp -f filename

➜  ~  arp -nla
Neighbor                Linklayer Address Expire(O) Expire(I)    Netif Refs Prbs
169.254.33.244          14:2d:27:f1:27:7b expired   1m38s          en0    2
192.168.199.1           d4:ee:7:5b:22:96  2m54s     2m54s          en0    1

详见 ICMP 一节 ping 的过程

ARP 欺骗

TODO.

Reference

ICMP 协议

  • ICMP,全称 Internet Control Miressage Protocol,译为互联网控制消息协议。
  • IPv4 中的 ICMP 被称作 ICMPv4,IPv6 中的 ICMP 则被称作 ICMPv6。
  • ICMP 常用于返回错误信息,比如 TTL 值过期、目标不可达;我们熟悉的 ping 命令本质就是使用了 ICMP 以探测主机是否可以通信。
  • ICMP 也位于参考模型中的网络层。

ping 的过程

这里我们尝试 ping 一台位于同一个 Wi-Fi 局域网下的 iPhone 的 IP。在开始 ping 之前,首先需要打开 Wireshark(m1 芯片的 Mac 也可正常使用 Intel 版本的 Wireshark)并开启抓包,并在命令行中查询 ARP 缓存是否已经记录了这台 iPhone IP 的 MAC 地址,如果已经记录了,我们可以使用 sudo arp -d 命令强制删除记录:

➜  ~ arp -nla | grep 192.168.199.138
192.168.199.138         8a:3b:15:74:f5:3f 1m50s     1m51s          en0    1

➜  ~ sudo arp -d 192.168.199.138
192.168.199.138 (192.168.199.138) deleted

➜  ~ arp -nla | grep 192.168.199.138

接下来我们使用 ping 命令,并在 3 次后停止 ping 和 Wireshark 抓包,并再次查询 ARP 缓存:

➜  ~ ping 192.168.199.138
PING 192.168.199.138 (192.168.199.138): 56 data bytes
64 bytes from 192.168.199.138: icmp_seq=0 ttl=64 time=63.348 ms
64 bytes from 192.168.199.138: icmp_seq=1 ttl=64 time=175.668 ms
64 bytes from 192.168.199.138: icmp_seq=2 ttl=64 time=8.581 ms
^C
--- 192.168.199.138 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 8.581/82.532/175.668/69.549 ms

➜  ~ arp -nla | grep 192.168.199.138
192.168.199.138         8a:3b:15:74:f5:3f 2m39s     2m39s          en0    1

整体的流程如下图:

5

我们也可以在 Wireshark 中看到这一过程(左 ARP,右 ICMP):

3.png4.png

Reference

  • IP 地址,全称 Internet Protocol Address,互联网上的每一个主机都有一个 IP 地址。
  • IP 地址分为两个版本,IPv4 与 IPv6;IPv4 使用 32 位(4 字节)地址,地址空间共计 232 个地址;IPv4 使用 128 位(16 字节)地址,地址空间共计 2128 个地址;未明确情况下,本文提及 IP 默认为 IPv4 内容。
  • IP 地址由两部分组成,网络标识(网络 ID)、主机标识(主机 ID),可以通过子网掩码(Subnet Mask)得知网络 ID、主机 ID。
  • 同一网段的计算机,网络 ID 相同;主机所在网段 = IP 地址 & 子网掩码(规律:按位和 1 与,则保持原值,和 0 与则为 0)。
  • 计算机之间通信时,会先判断目标主机和自己是否在同一网段(⚠️:使用自身的子网掩码计算):若位于同一网段:不需要由路由器进行转发;若位于不同网段,交由路由器(网关)进行转发。

以我的 MacBook 的 IP 地址与子网掩码为例,计算如下:

6.png
          192.      168.      199.      200
    1100 0000.1010 1000.1100 0111.1100 1000

          255.      255.      255.      0
    1111 1111.1111 1111.1111 1111.0000 0000

    1100 0000.1010 1000.1100 0111.1100 1000
&   1111 1111.1111 1111.1111 1111.0000 0000
--------------------------------------------
    1100 0000.1010 1000.1100 0111.0000 0000
          192.      168.      199.        0

即我的 MacBook 的 IP 地址 192.168.199.2001100 0000 1010 1000 1100 0111 为网络 ID,1100 1000 为主机 ID,该 IP 地址属于 192.168.199.0 网段。

IP 地址的分类:

分类 前缀 默认子网掩码 最大可容纳主机数 A 类地址 0,范围 1~126 255.0.0.0
(8 + 24) 224 - 2 B 类地址 10,范围 128~191 255.255.0.0
(16 + 16) 216 - 2 C 类地址 110,范围 192~223 255.255.255.0
(24 + 8) 28 - 2 D 类地址(多播) 1110,范围 224~239 - - E 类地址(保留) 1111,范围 240~255 - -
  • IP 地址前 8 位全 0 以及除首位全 1 作为保留网段也不可使用,其中 127.0.0.1 是本地环回地址(Loopback),代表本机地址。
  • 计算最大可容纳主机数时,主机 ID 部分全 1(广播地址)和全 0(网段)不可分配给主机,因此均需要 - 2

Reference

  • CIDR,全称 Classless Inter-Domain Routing,译为无类别域间路由。
  • 子网掩码的 CIDR 表示方法:192.168.199.200/24,表示该 IP 地址的子网掩码前 24 位为 1,即 255.255.255.0
  • 目的:避免浪费 IP 地址资源。
  • 原理:借用主机位作为子网位,划分出多个子网。
  • 等长子网划分(Fixed Length Subnet Mask):每个子网的可用 IP 地址数量相同
等长子网划分举例 ↕
  • 变长子网划分(Variable Length Subnet Mask):每个子网的可用 IP 地址数量不同,子网掩码也不同。
  • 规律:若子网段地址范围是原网段的 (1/2)^n,那么该子网的子网掩码在原网段的子网掩码上增加 n1(二进制)。
变长子网划分举例 ↕
  • 与子网划分相反,合并网段指将多个连续网段合并为一个网段,合并后的网段称作超网(Supernetting)。
  • 判断子网还是超网:根据 IP 地址的分类,若其子网掩码位数比默认多,则为子网,反之超网(eg. 25.100.0.0/16 是 A 类子网)。
  • 规律:当 2^k=n (k>=1),子网掩码左移动 k 位可以合并 n 个网段。
合并网段举例 ↕

1

Reference


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK