1、IP 协议概述
IP 即网际协议,是 OSI 参考模型中的第 3 层 —— 网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。
IP的作用.png- 网络层和数据链路层的关系
以行程和机票/火车票为例,从一个地方到达另一个地方的行程,中间可能需要乘坐多种交通工具,乘坐每种交通工具的这一段路相当于一段数据链路,只有知道完整的行程才能知道要经过哪些数据链路才能顺利到达目的地,而这就是网络层的作用,网络层通过路由选择,经过一个个路由器的转发,数据才能顺利到达目标主机。
IP和数据链路层的关系.png2、IP 基础知识
在计算机通信中,为了识别通信对端,必须要有一个类似于地址的识别码进行标识。在数据链路层,采用 MAC 地址,而在网络层,采用 IP 地址。
IP地址.png(1)路由控制
路由控制是指将分组数据发送到最终目标地址的功能。
路由控制.png路由器中维护了一个路由转发表,记录了某个网络的 IP 要通过哪个端口转发到另一个网络中去,路由器只知道下一跳(网络中的一个区间)转发的路径,但是通过网络中一跳跳的转发,最终可以到达目的主机。
多跳路由器.png与之类比的常见的场景是,你要去某个地方,但是不认路,你问别人要怎么走,别人告诉你,先走到某个地方,再问问人,一路问路,最终到达目的地。
IP包的发送.png路由控制表:为了将数据发给目标主机,所有主机都维护着一张路由控制表。该表记录 IP 数据在下右边应该发给哪个路由器,IP 包将根据这个路由表在各个数据链路上传输。
路由控制表.png(2)数据链路的抽象化
通过 IP 地址,网络层对数据链路层不同链路的相异特性进行了抽象化。不同的数据链路,最大传输单位(MTU:Maxiumum Transmission Unit)不同,在某个链路上可能只需要一个包,在另一个链路上可能需要分成多个包,这种将较大的 IP 包分成多个较小的 IP 包的操作就是分片处理。
(3)IP 属于面向无连接型
IP 面向无连接,发包之前不需要建立与对端目标地址之间的连接,这样做一是为了简化网络层协议的实现,二是为了提高处理速度。通信可靠性和连接的建立交给传输层去实现,通过合理分层,有利于后续对这些协议进行扩展和性能上的优化。
3、IP 地址的基础知识
IP 地址(IPv4)用 32 位正整数来表示,每个主机上都必须有一块网卡,网卡通常都会设置一个 IP 地址,而路由器通常会有两块网卡,因为连接两个网络会有两个 IP 地址。
IP地址和网卡.png(1)IP 地址的组成
IP 通常由 “网络标识(网络地址)” 和 “主机标识(主机地址)” 两部分组成。
网络标识在数据链路的每个段配置不同的值,必须保证互相连接的每个段的地址不重复。相同段内的主机必须有相同的网络标识,而主机标识在同一段内不允许重复。通过设置网络地址和主机地址,在互相连接的整个网络中保证每台主机的 IP 地址都不会互相重叠,即 IP 地址有了唯一性。
IP地址的主机标识.png IP地址的网络标识.png(2)IP地址的分类
IP 地址可分为 A、B、C、D、E 五类,其中A、B、C类是常用的类型,D类用于多播,E类保留使用,
A~E 类地址的特点如下:
-
A 类地址:以 0 开头,第一个字节范围:0~127,网络号占一个字节,主机号占三个字节,因此一个网段最多能容纳 2^24 - 2 = 16777214 台主机;
-
B 类地址:以 10 开头,第一个字节范围:128~191,网络号占两个字节,主机号占两个字节,因此一个网段最多能容纳 2^16 - 2 = 65534 台主机;
-
C 类地址:以 110 开头,第一个字节范围:192~223,网络号占三个字节,主机号占一个字节,因此一个网段最多能容纳 2^8 - 2 = 254 台主机;
-
D 类地址:以 1110 开头,第一个字节范围为 224~239;
-
E 类地址:以 1111 开头,保留地址,第一个字节的范围为 240~255。
主机地址不可以为全 0 或全 1,全0在表示对应的网络地址或 IP 地址不可获知的情况下才使用,而全1代表网段内的广播地址。
(3)广播地址
广播地址用在同一个链路中相互连接的主机之间发送数据包。IP 地址中的主机地址部分全部变成 1,就成了广播地址,广播分为本地广播和直接广播两种。
-
本地广播
在本网络内的广播叫做本地广播。
-
直接广播
在不同网络之间的广播叫做直接广播。
(4)IP 多播
多播用于将包发给特定组内的所有主机。由于直接使用 IP 协议,因此也不存在可靠传播。
- 多播提高了发送效率
在使用多播之前,一直使用广播的方式将数据发送给多台终端主机,广播跟多播相比的缺点:
-
广播将数据发送给所有终端主机,需要网络内的主机 IP 之上的一层去判断是否有必要接收数据,是则接收,否则丢弃,会给毫无关系的网络或主机带来影响,造成网络上很多不必要的流量;
-
广播无法穿透路由。
多播既可以穿透路由,又实现了只给必要的组发送数据包。
- 多播地址
多播使用 D 类地址。因此,如果从首位开始到第 4 位是 “1110”,就可以认为是多播地址,而剩下的28位可以成为多播的组编号。
多播地址.png 从 224.0.0.0 到 239.255.255.255 都是多播地址的可用范围。其中从 224.0.0.0 到 224.0.0.225 的范围不需要路由控制,在同一个链路内也能实现多播。而在这个 范围之外设置多播地址会给全网所有组内成员发送多播的包。
(5)子网与子网掩码
- 划分子网的必要性
网络标识相同的计算机必须同属于同一个链路。而一个 A 类的网络最多可容纳 1600 多万台计算机,一个 B 类网络最多可容纳 6 万 5 千多台计算机,实际上是不存在有这么多计算机的网络。
- 如何划分子网
这就导致一个 A 类或 B 类网络中大部分地址是用不上的,造成极大的浪费,为了充分利用地址资源,通过子网掩码细分出比 A 类、B 类、C 类更小粒度的网络。这种方式实际就是将原来 A、B、C 类地址中的主机地址部分用作子网络,将原网络分为多个物理网络。
-
子网掩码的表示方式
子网掩码必须是 IP 地址的首位开始连续的 “1”。
表示方式由两种,一种是将连续的 “1” 用 IP 地址的形式表示。
另一种是直接在 IP 后加个 “/” 再加数字表示有多少位连续的 “1”。
子网掩码的表示方式2.png第二种方式下记述网络地址是可以省略后面的 “0”,例如 172.20.0.0/16 跟 172.20/16 其实是一个意思。
- CIDR
放弃对 IP 地址的传统分类,采用任意长度分割 IP 地址的网络标识和主机标识,这种方式叫做 CIDR(Classless Inter-Domain Routing,无类型域间选路)。
CIDR 可以将多个地址划分到一个较大的网络内,更有效地录用了 IPv4 地址,同时通过路由集中降低了路由器的负担。
CIDR应用举例.png- VLSM
CIDR 一开始应用时,要求网络内部要采用固定长度的子网掩码,但是在公司内部划分子网时,不同部门需要的主机数可能不一样,如果固定子网掩码长度,会造成不必要的 IP 地址浪费,举个栗子:
某个公司申请了一个 C 类地址的网段 192.168.10.0/24 (24表示IP地址32位的前24位都是1,表示子网掩码255.255.255.0)。现在公司里有 A、B、C、D、E 五个部门,每个部门需要的主机数要求如下:
部门 | 需要的主机数 |
---|---|
NetA | 30台主机 |
NetB | 24台主机 |
NetC | 14台主机 |
NetD | 6台主机 |
NetE | 2台主机 |
假设是公司内网要采用固定长度的子网掩码,那么肯定按主机数需求最大的部门来设定,A 部门需要 30 台主机,主机地址至少必须 5 位,2^5 - 2 = 30(去掉全 0 和全 1),所以网络地址是 27 位,子网掩码是 255.255.255.224,有 3 位可以作为子网号,所以一共可以有 8 个子网,如下:
网络号(3位子网号) | 主机位 |
---|---|
192.168.10. 000 | 00000 |
192.168.10. 001 | 00000 |
192.168.10. 010 | 00000 |
192.168.10. 011 | 00000 |
192.168.10. 100 | 00000 |
192.168.10. 101 | 00000 |
192.168.10. 110 | 00000 |
192.168.10. 111 | 00000 |
B 部门依然需要 5 位表示主机地址,但是 C 部门只需要 4 位,D 部门只需要 3 位,E 部门只需要两位,如果能根据部门需要使用可变长的子网掩码,将节省 IP 地址资源,这就是 VLSM(Variable Length Subnet Mask)存在的价值。
(6)全局地址和私有地址
全局地址指能在互联网上直接通信的 IP 地址,而私有地址不能,但是通过 NAT (Network Address Translation)技术,可以将私有地址转化为全局地址,最终使得配有私有地址的主机与配有全局地址的互联网主机实现了通信。
比如家庭局域网分配给设备的 IP 地址是一个私有地址,而路由器把局域网内网中的私有地址转换为公网中的全局地址。
全局IP和私有IP.png4、路由控制
(1)什么是路由控制
IP 地址可用于网络层的报文传输,在设备上离不开路由器,路由器会保存一个路由控制表,决定了发送到某个目标主机的报文的下一跳要发送到哪个路由器。
路由控制表和IP包发送.png-
默认路由、主机路由、环回地址
默认路由:减少路由控制表的大小,一般标记为 0.0.0.0 或 default。
主机路由:子网掩码是32位,整个 IP 地址的所有位都参与路由,多用于不希望通过网络地址路由的情况。
环回地址:在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址,IP 表示为 127.0.0.1,域名表示为 localhost。
(2)路由控制表的聚合
减少路由表的大小。
路由表的聚合.png5、IP 分割处理和再构成处理
(1)IP 报文的分片和重组
不同的数据链路的最大传输单元 MTU 都不尽相同,当网络层的 IP 数据包交到数据链路层处理时,可能会将 IP 数据包划分成多个分片再发送。
路由器会做分片但是不会做重组,重组在目标主机处完成,因为被分片的 IP 数据报传送的路径可能不一样。
IP报文的分片和重组.png 分片的缺点:① 加重路由器的处理负荷;
② 一旦某个分片丢失,会造成整个 IP 数据报作废。
(2)路径 MTU
路径 MTU 指从发送端到接收端主机之间不需要分片时最大 MTU 的大小。
UDP 只负责用户数据报的快速发送,不保证可靠传输,也不会管分片,发送主机对 IP 数据报的分片在 IP 层实现,工作原理如下:
路径MTU.pngTCP 根据路径 MTU 的大小计算出最大段长度(MSS),然后根据这些信息进行数据报的发送,IP 层不再进行分片,原理如下:
TCP路径MTU.png6、IPv6
IPv6 是为了根本解决 IPv4 地址耗尽的问题而被标准化的网际协议。
(1)IPv6 的特点
扩展了 IPv4 的功能,减轻了管理员的负担,具有如下特点:
-
IP 地址的扩大与路由控制表的聚合
聚合是为了避免路由控制表膨大。
-
性能提升
包首部简化处理,减轻路由器负荷,路由器不再做分片处理。
-
支持即插即用功能
即使没有 DHCP 服务器也可以实现自动分配 IP 地址。
-
采用认证和加密功能
应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能。
-
多播、Mobile IP 成为扩展功能
(2)IPv6 地址的表示
IPv6 地址有128个比特,一般用 8 个 16 位字节表示,字节用十六进制表示。
IPv6地址表示法.png如果中间的 16 位都是 0,则可以采用省略表示法
IPv6的省略表示.png(3)IPv6 地址的结构
IPv6地址结构.png在 IPv6 的环境下,可以同时将这些 IP 地址全都设置在同一个 NIC 上,按需灵活使用。
IPv6中的通信.png- 全局单播地址
直接在互联网中通信的地址。
全局单播地址.png- 唯一本地地址
唯一本地地址是不进行互联网通信时所使用的地址,一般用于企业内网,在不联网或通过 NAT 以及代理联网的环境下使用。
唯一本地地址.png- 链路本地单播地址
链路本地单播地址是指在同一个数据链路内唯一的地址,它用于不经过路由器,在同一个链路中的通信。通常接口 ID 保存 64 比特版的 MAC 地址。
链路本地单播地址.png(4)IPv6 分段处理
IPv6 的分片处理只在作为起点的发送端主机上进行,路由器不参与分片,这时为了减少路由器的负荷,提高网速。
7、IPv4首部
IPv4 的数据报格式如下所示:
IPv4数据报格式.png(1)版本(Version)
表示 IP 协议的版本。比如 IPv4 的版本号是 4,IPv6 的版本号是 6。
常见的协议和对应的版本号如下:
(2)首部长度(IHL: Internet Header Length)
表示 IP 首部的大小,单位为 4 字节(32 比特),没有可选项时,一般为 5。
(3)区分服务(TOS: Type Of Service)
8 比特组成,表示服务的质量,每一位的含义如表所示:
TOS.png因为 TOS 的控制过于复杂,互联网几乎没有使用,该字段被拆分为 DSCP 和 ECN 两个字段,分别进行质量控制和拥塞通知。
DSCP和ECN.png- DSCP
DSCP(Differential Services Codepoint,差分服务代码点),用来进行质量控制。
- ECN
ECN(Explicit Congestion Notification,显式拥塞通告),用来报告网络拥堵情况,由两个比特组成。
ECN.png 第 6 位的 ECT 用以通告上层 TCP 层协议是否处理 ECN。当路由器在转发 ECN 为 1 的包的过程中,如果出现网络拥堵的情况,就将 CE 为设置为 1。
(4)总长度(Total Length)
IP 首部和数据部分合起来的总字节数。
(5)标识(ID: Identification)
用于分片重组,同一个分片的标识值相同,不同分片的标识值不同。
(6)标志(Flags)
标识包被分片的相关信息。每一位的具体含义如下:
分片标志flags.png(7)片偏移(Fragment Offset)
标识被分片的每一个分段相对于原始数据的位置。第一个分片对应的值为 0,占 13 位,最多可以表示 2^13 = 8192 个相对位置,单位为8字节,因此最大可以表示原始数据 8 * 8192 = 66636 字节的位置。
(8)生存时间(TTL: Time To Live)
表示可以中转多少个路由器,没经过一个路由器,TTL 就会减少 1,直到变成 0 则丢弃该包。
(9)协议(Protocol)
表示 IP 首部的下一个首部隶属于哪个协议。
最常用是表示传输层的 TCP/UDP 协议,如果用于 IP 隧道,则下一个首部可能仍然是 IP 首部,除此之外还可能是其他协议。
(10)首部校验和(Header Checksum)
只校验数据报的首部,用来确保 IP 数据报不被破坏。
(11)源地址(Source Address)
表示发送端 IP 地址。
(12)目标地址(Destination Address)
表示接收端 IP 地址。
(13)可选项(Options)
长度可变,通常只在进行实验或诊断时使用。包含如下几点信息:
- 安全级别
- 源路径
- 路径记录
- 时间戳
(14)填充(Padding)
首部的比特数必须是 32 的整数倍,如果不足则填充,通常只在使用可选项的情况下才会填充。
网友评论