目录

IP

IP 协议简介

IP 协议位于 TCP/IP 协议的第三层——网络层。与传输层协议相比,网络层的责任是提供点到点(hop by hop)的服务,而传输层(TCP/UDP)则提供端到端(end to end)的服务。

IP 头部格式

IP 地址

IP 地址(IPv4 地址)由 32 位正整数来表示。IP 地址在计算机内部以二进制方式被处理,但习惯将 32 位的 IP 地址以 8 位为一组,分成 4 组,每组以“.”隔开,转换成 10 进制来表示。IPv4 地址为 32 位,最多允许 43 亿台计算机连接网络。

实际上,IP 地址并非根据主机台数来分配而是每一台主机上的每一块网卡都得设置 IP 地址,一块网卡可以设置一个或以上个 IP,路由器通常会配置两个以上的网卡。

IP 地址由“网络地址”和“主机地址”两部分组成。

IP 地址分类

IP 地址分为 A、B、C、D、E 四类。

IP 地址类别 地址开头 网络地址 主机地址 范围 一个网段内主机地址个数 备注
A 类地址 0 第 1-8 位 后 24 位 0.0.0.0~127.0.0.0 2^24-2=16777214
B 类地址 10 第 1-16 位 后 16 位 128.0.0.0~191.255.0.0 2^16-2=65534
C 类地址 110 第 1-24 位 后 8 位 192.0.0.0~239.255.255.0 2^8-2=254
D 类地址 1110 第 1-32 位 没有主机地址 224.0.0.0~239.255.255.255 常用于多播
E 类地址 1111 第 1-32 位 没有主机地址 240.0.0.0~255.255.255.255 保留地址,供以后使用

注意:同一个网段中的主机地址分配,主机地址全为 0 表示对应的网络地址,主机地址全为 1 通常用于广播地址。因此一个网段内主机的个数去掉 2 个(例如 2^8-2=254)。

网络地址

IP 地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全 0,网络地址代表着整个网络。

广播地址

广播地址通常称为直接广播地址,是为了区分受限广播地址。

广播地址与网络地址的主机号正好相反,广播地址中,主机号为全 1。当向某个网络的广播地址发送消息时,该网络内的所有主机都能收到该广播消息。

多播地址

D 类地址就是多播地址,多播又叫组播。

255.255.255.255

该 IP 地址指的是受限的广播地址。受限广播地址与一般广播地址(直接广播地址)的区别在于,受限广播地址只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;一般广播地址既可在本地广播,也可跨网段广播。例如:主机 192.168.1.1/30 上的直接广播数据包后,另外一个网段 192.168.1.5/30 也能收到该数据报;若发送受限广播数据报,则不能收到。

注:一般的广播地址(直接广播地址)能够通过某些路由器(当然不是所有的路由器),而受限的广播地址不能通过路由器。

0.0.0.0

常用于寻找自己的 IP 地址,例如在我们的 RARP,BOOTP 和 DHCP 协议中,若某个未知 IP 地址的无盘机想要知道自己的 IP 地址,它就以 255.255.255.255 为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送 IP 请求分组。

回环地址

127.0.0.0/8 被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是 127.0.0.1。

A、B、C 类私有地址

私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义。

  • A 类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255
  • B 类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255
  • C 类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255

子网掩码及网络划分

随着互连网应用的不断扩大,原先的 IPv4 的弊端也逐渐暴露出来,即网络号占位太多,而主机号位太少,所以其能提供的主机地址也越来越稀缺,目前除了使用 NAT 在企业内部利用保留地址自行分配以外,通常都对一个高类别的 IP 地址进行再划分,以形成多个子网,提供给不同规模的用户群使用。

这里主要是为了在网络分段情况下有效地利用 IP 地址,通过对主机号的高位部分取作为子网号,从通常的网络位界限中扩展或压缩子网掩码,用来创建某类地址的更多子网。但创建更多的子网时,在每个子网上的可用主机地址数目会比原先减少。

什么是子网掩码?

子网掩码是标志两个 IP 地址是否同属于一个子网的,也是 32 位二进制地址,其每一个为 1 代表该位是网络位,为 0 代表主机位。它和 IP 地址一样也是使用点式十进制来表示的。如果两个 IP 地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。

在计算子网掩码时,我们要注意 IP 地址中的保留地址,即" 0"地址和广播地址,它们是指主机地址或网络地址全为" 0"或" 1"时的 IP 地址,它们代表着本网络地址和广播地址,一般是不能被计算在内的。

子网掩码的计算:

对于无须再划分成子网的 IP 地址来说,其子网掩码非常简单,即按照其定义即可写出:如某 B 类 IP 地址为 10.12.3.0,无须再分割子网,则该 IP 地址的子网掩码 255.255.0.0。如果它是一个 C 类地址,则其子网掩码为 255.255.255.0。其它类推,不再详述。下面我们关键要介绍的是一个 IP 地址,还需要将其高位主机位再作为划分出的子网网络号,剩下的是每个子网的主机号,这时该如何进行每个子网的掩码计算。

网关

网关实质上是一个网络通向其他网络的 IP 地址。比如有网络 A 和网络 B,网络 A 的 IP 地址范围为“192.168.1.1~192.168.1.254”,子网掩码为 255.255.255.0;网络 B 的 IP 地址范围为“192.168.2.1~192.168.2.254”,子网掩码为 255.255.255.0。

在没有路由器的情况下,两个网络之间是不能进行 TCP/IP 通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP 协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络 A 中的主机发现数据包的目标主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络 B 的网关,网络 B 的网关再转发给网络 B 的某个主机。网络 B 向网络 A 转发数据包的过程也是如此

所以说,只有设置好网关的 IP 地址,TCP/IP 协议才能实现不同网络之间的相互通信。那么这个 IP 地址是哪台机器的 IP 地址呢?网关的 IP 地址是具有路由功能的设备的 IP 地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。

IP 路由

IP 路由选择是逐跳进行的。IP 并不知道到达任何目的的完整路径(当然,除了那些与主机直接相连的)。所有的 IP 路由选择只为数据报传输提供下一站路由器的 IP 地址。它假定下一站路由器比发送数据报的主机更接近目的,而且下一站路由器与该主机是直接相连的。

IP 路由选择主要完成以下这些功能:

  1. 搜索路由表,寻找能与目的 IP 地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。
  2. 搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。
  3. 搜索路由表,寻找标为“默认”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。

如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。

IP 路由选择是通过逐跳来实现的。数据报在各站的传输过程中目的 IP 地址始终不变,但是封装和目的链路层地址在每一站都可以改变。大多数的主机和许多路由器对于非本地网络的数据报都使用默认的下一站路由器。

IP 路由选择机制的两个特征:

  1. 完整主机地址匹配在网络号匹配之前执行
  2. 为网络指定路由,而不必为每个主机指定路由

路由控制

发送数据包除了有目标 IP 地址外,还需要指明路由器和主机的信息,即路由控制表。

路由控制表的形成方式有两种:

1、静态路由

由管理员手动设置

2、动态路由

路由器与其他路由器相互交互信息时自动刷新。为了让动态路由及时刷新路由表,在网络上互联的路由器之间需设置路由协议,保证正常读取路由控制信息。

路由选择协议

常见的路由选择协议有:RIP 协议、OSPF 协议。

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

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

参考

《网络是怎样连接的》

https://www.runoob.com/w3cnote/summary-of-network.html

https://tonydeng.github.io/sdn-handbook/basic/tcpip.html

https://hit-alibaba.github.io/interview/basic/network/IP.html

https://www.huweihuang.com/linux-notes/tcpip/ip.html