基本 IP 封包

    今天,大部分的网络使用 IP 通信协议 (Internet Protocol)。这种协议把传输数据切割成小小的封包。除了实际传输的数据外,每个封包还包括必备的路由信息。

    基本 TCP/UDP

    即使在 IP 上传输数据,大部分程序都不处理个别的封包问题;他们通常使用 TCP (Transmission Control Protocol)。TCP 是 IP 的上层,为专属的数据流创建两点间的链接。程序只看到数据进来的条目,并保证同样的数据无误 (且以同样顺序) 流到另端链接的出口。在较低层可能发生多种错误,都可以被 TCP 补偿:重送失去的封包、重组到达的封包 (例如,经由不同路径送到) 的顺序。

    另个在 IP 上的协议是 UDP (User Datagram Protocol)。与 TCP 不同,它是封包导向的。它的目标不同:UDP 的目的是在应用程序间传输封包。此协议不补偿封包的遗漏,也不在意封包依序到达。此协议的主要优点是,大幅改善延迟的问题,遗漏的封包不影响接收后续封包,并且持续重送该遗漏的封包。

    TCP 和 UDP 都涉及封包,也就是以 “分机号码” 模式在机器内的程序创建链接。此做法允许在同个通信中创建多个平行的管道,因为它们以不同的端口号区分之。

    局域网路接在私人网址范围内 (不在网络网络的路由上),网关就需要 地址掩蔽 让其经由网络与外界沟通。掩蔽作业是网络层次的代理工作:内部机器,都被网关取代 (因为网关有外部的路由地址),借由掩蔽链接,数据送出出去,进来的数据经由掩蔽链接至内部机器。网关以指定的 TCP 端口运行此工作,通常是较高的号码 (超过 60000)。对外部而言,经由内部机器的链接,就是来自此等保留端口号。

    文化 私有地址范围

    RFC 1918 把三组 IPv4 地址设为局域网路专用,不能路由至互联网。第一组是, (见专栏 基本知识必要的网络概念(以太网、IP地址、子网、广播)),是一个A级范围 (是 224 IP 地址)。第二组是,172.16.0.0/12,16个B级范围 (172.16.0.0/16172.31.0.0/16),每个有 216 IP 地址。最后,192.168.0.0/16 是一个B级范围 (包括 256 个C级范围,192.168.0.0/24 至 ,各有 256 个 IP 地址)。

    网关有两种 网络地址转换 (英文缩写 NAT) 的功能。第一种是 目的 NAT (DNAT),改变封包目的 IP 地址 (与 TCP 或 UDP 端口)。链接追踪机制同时改变后续封包的链接。第二种 NAT 是 来源 NAT (SNAT),其中的 伪装 是特例之一;SNAT 改变出去链接的来源 IP 地址 (与 TCP 或 UDP 端口)。如同 DNAT,所有的封包由链接追踪机制处理。NAT 只用于 IPv4 及其限制的地址空间;在 IPv6 内,其宽广的地址技术允许直接在互联网路由 (并不表示可以近用内部机器,因为防火墙可以过滤流量) 减少 NAT 的用途。

    DNAT 的具体应用之一是 端口转发。进来链接至机器的指定端口号转发至另部机器的端口号。虽然还有其他的方案达成同样的效果,诸如应用层面的 ssh (见 第 9.2.1.3 节 “通过端口转发建立加密通道”) 或 redir

    理论讲多了,看看实务怎么做。system into a gateway is a simple matter of enabling the appropriate option in the Linux kernel, 经由 /proc/ 虚拟文件系统,从 Linux 核心进入 Debian 系统的网关:

    /etc/sysctl.conf 设置 net.ipv4.conf.default.forwarding 选项为 ,就能以此方式在开机时自动启用。

    例 10.1. /etc/sysctl.conf 文件

      在 IPv6 也能取得同样的效果,把手册中的 ipv4 换为 ipv6,并使用 net.ipv6.conf.all.forwarding/etc/sysctl.conf 文件内。

      启用 IPv4 伪装就有点复杂,涉及配置 netfilter 防火墙。