目录

网络层

IP协议为上层应用提供无连接、无状态、不可靠的服务。

  • 路由器(Router) : 实现分组交换(packet switching)的关键构件,任务就是转发收到的分组(packet),路由器收到一个分组

    • 先暂时存储下

      • 检查其首部

      • 查找转发表

      • 按照首部中的目的地址,找到合适的接口转发出去,给下一个路由器,这样一步步转发,最终把分组交付到目的主机

网络层(Network Layer)

  • 基本数据单位为 IP 数据报

  • 路径选择 路由 以及 逻辑寻址

  • 无链接数据报传输 数据报路由选择 和 差错控制

  • 负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能

  • 协议: IP ICMP 因特网控制报文协议, ARP 地址解析协议, RARP 逆地址解析协议

  • 设备: 路由器

IP 网际协议

  • A 类地址: 0xxxxxxxx : 0.0.0.0 ~ 127.255.255.255, A 类私有地址: 10.0.0.0/8, 回环地址:127.0.0.1/8表示本机地址

  • B 类地址: 10xxxxxxx : 128.0.0.0 ~ 191.255.255.255, B 类私有地址: 172.16.0.0/12

  • C 类地址: 110xxxxxx : 192.0.0.0 ~ 223.255.255.255, C 类私有地址: 192.168.0.0/16

  • D 类地址: 1110xxxxx : 224.0.0.0 ~ 239.255.255.255 作为组播地址(一对多的通信)

  • E 类地址: 11110xxxx : 240.0.0.0 ~ 255.255.255.255 保留地址,供以后使用。

  • 只有 A,B,C 有网络号和主机号之分,D 类地址和 E 类地址没有划分网络号和主机号。

  • 任意网段,其主机号为全 1 的的地址,称为这个网段的广播地址,向这个地址发包,所有该网段内的所有主机都会接收

  • 任意网段,其主机号为全 0 的的地址,称为这个网段的网络地址,代表着这个网段

InterNIC (Internet Network Information Center)机构分配 IP,但是只分配网络号,具体主机号留给系统管理员分配

  • 单播地址:目的端为单个主机

  • 广播地址:目的端为给定网络号上的所有主机

  • 多播地址:目的端为同一组内的所有主机

  • 不可靠:不保证 IP 数据报一定能到达目的地

  • 无连接:IP 不维护任何关于后续数据报的状态信息,即每个数据报的处理是相互独立的

IP 首部

  • 版本 4 + 首部长度 4 + TOS 服务类型 8 + 总长度 16

  • 标识 16 + 标志 3 + 偏移 13

  • 生存时间 8 + 协议 8 + 首部检验和 16

  • 源 IP 地址 32

  • 目的 IP 地址 32

  • [选项]

  • TCP 数据

环路接口

  • 为了在同一台主机上实现 TCP/IP 通信

  • 127 网段就是为环路接口预留的

ICMP 协议

Pingtraceroute 都使用它,ip 辅助协议

IGMP 协议

用来把 UDP 数据多播到多个主机

子网掩码 以及 网络划分

  • 子网掩码是用来计算两个 IP 地址是否同属于一个子网的,也是 32 位二进制地址,其每一个为1代表该位是网络位,为0代表主机位

  • 判定在同一个网段中: 两个 IP 地址在子网掩码的&的计算下所得结果相同,即表明它们共属于同一子网中

  • 168.195.0.0 划分成 27 个网段,其掩码是多少? 分析: 1.它是 B 类地址 2. 划分子网就是利用主机位充当网络位,27 = 11011(二进制),故需要 5 位. 答案: 255.255.248.0

  • 168.195.0.0 划分子网,每个子网有主机 700 台,求掩码? 700 = 1010111100, 其主机号需要 10 位来表示,所以掩码为: 11111111.11111111.11111100.00000000

  • 子网有 10 台主机,那么对于这个子网需要的 IP 地址是 10+1+1+1=13 个, 三个 1 分别是网关地址网络地址广播地址, 13 = 1101, 所以主机号需要 4 位, 其掩码为255.255.255.224

ARP 协议

  • 根据 IP 地址获取物理地址的一个 TCP/IP 协议,主机发送信息时将包含目标 IP 地址的 ARP 请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址

  • ARP 欺骗: 地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送 ARP 应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机 ARP 缓存;由此攻击者就可以向某一主机发送伪 ARP 应答报文,使其发送的信息无法到达预期的主机或到达错误的主机

  • 主机 A 的 IP 地址为192.168.1.1,MAC 地址为0A-11-22-33-44-01,主机 B 的 IP 地址为192.168.1.2,MAC 地址为0A-11-22-33-44-02 当主机 A 要与主机 B 通信时,地址解析协议可以将主机 B 的 IP 地址解析成主机 B 的 MAC 地址,以下为工作流程:

    • 首先, A 得知道 B 的 IP 地址为192.168.1.2, 要构造 IP 报文发现没有 B 的 MAC 地址, 于是 A 查询本地 ARP 缓存中检查: 是否有该 IP 对应的 MAC 地址啊? 如果有就直接用了。

    • 但是主机 A 在 ARP 缓存中没有找到映射,所以 A 将 ARP请求帧 广播 到本地网络上的所有主机。ARP 请求数据包括了: A 的 IP 地址和 MAC 地址 + B 的 IP 地址。

    • 本地网络上的每台主机都接收到 ARP 请求并且检查是否与自己的 IP 地址匹配。如果主机发现请求的 IP 地址与自己的 IP 地址不匹配,它将丢弃 ARP 请求。

    • 主机 B 确定 ARP 请求中的 IP 地址与自己的 IP 地址匹配,则将主机 A 的 IP 地址和 MAC 地址映射添加到本地 ARP 缓存中。

    • 主机 B 将包含其 MAC 地址的 ARP回复消息 直接发送回主机 A

    • 当主机 A 收到从主机 B 发来的 ARP回复消息 时,会用主机 B 的 IP 和 MAC 地址映射更新 ARP 缓存。主机 B 的 MAC 地址确定了,主机 A 就能向主机 B 发送 IP 数据报了。

    • 本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。

### ARP

主机向自己所在的网络,广播一个ARP请求(内含目标机器的IP地址),此网络的机器收到这个请求后,和自身IP对比,只有目标机器才会返回一个ARP应答(包含自己的MAC地址)。

参考资料:

ARP 原理和攻击

$ ifconfig          # 查询本机的 ip
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.102  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::6aff:f269:1d00:8917  prefixlen 64  scopeid 0x20<link>
# 监听 这两个IP 地址之间所有 的 帧
$ sudo tcpdump -i enp2s0 -ent \
    '(dst 192.168.0.102 and src 101.200.144.41) or (dst 101.200.144.41 and src 192.168.0.102)'

$ sudo tcpdump -i enp2s0 -ent
$ sudo arp  # 查看 arp 缓存

RARP 协议

  • 其将局域网中某个主机的物理地址转换为 IP 地址,比如局域网中有一台主机只知道自己的物理地址而不知道 IP 地址,那么可以通过 RARP 协议发出征求自身 IP 地址的广播请求,然后由 RARP 服务器负责回答;工作流程如下

    • 给主机发送一个本地的 RARP 广播,在此广播包中,声明自己的 MAC 地址并且请求任何收到此请求的 RARP 服务器分配一个 IP 地址;

    • 本地网段上的 RARP 服务器收到此请求后,检查其 RARP 列表,查找该 MAC 地址对应的 IP 地址;

    • 如果存在,RARP 服务器就给源主机发送一个响应数据包并将此 IP 地址提供给对方主机使用;

    • 如果不存在,RARP 服务器对此不做任何的响应;

    • 源主机收到从 RARP 服务器的响应信息,就利用得到的 IP 地址进行通讯;如果一直没有收到 RARP 服务器的响应信息,表示初始化失败。

路由选择协议

  • RIP 协议 :底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是 15 跳,如果大于 15 跳,它就会丢弃数据包。

  • OSPF 协议 :Open Shortest Path First 开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。