文章目录
- IP 协议
- 1. 基本概念
- 2. IP 报头解析
- 🔺IP 的 网段划分:
IP 协议
IP 不是面向字节流的,而是发送接收一个个的数据包
1. 基本概念
主机:配有 IP 地址的设备
路由器:配有单个或多个 IP 地址,且能进行路由节点控制
节点:主机和路由器的统称
2. IP 报头解析
4 位版本号(version):
-
指定 IP 协议的版本。对于 IPv4 来说,就是 4(用 4 个字节,32 个比特位,标识全球互联网唯一的主机)。
公用网络协议中,极少使用 IPv6
4 位头部长度(header length):
- 表示该 IP 头部有多少个 32 位 bit(有多少个 4 字节); 所以 IP 头部最大长度是 15 * 4 = 60 个字节
8 位服务类型(Type Of Service):
- 3 位优先权字段(已经弃用),4 位 TOS 字段,和 1 位保留字段(必须置为0)。
- 4 位 TOS 分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突, 只能选择一个。
- 对于 ssh / telnet 这样的应用程序,最小延时比较重要;对于 ftp 这样的程序,最大吞吐量比较重要。
16 位总长度(total length):
- IP 数据报整体占多少个字节。
16 位标识(id):
- 唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个 id 都是相同的。
3 位标志字段:
- 第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。
- 第二位置为 1 表示禁止分片,这时候如果报文长度超过 MTU,IP 模块就会丢弃报文。
- 第三位表示 “更多分片”,如果分片了的话,最后一个分片置为 1,其他是 0。类似于一个结束标记。
13 位分片偏移(framegament offset):
- 是分片相对于原始 IP 报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是 8 的整数倍(否则报文就不连续了)。
8 位生存时间(Time To Live, TTL):
- 数据报到达目的地的最大报文跳数。一般是 64,每次经过一个路由,TTL -= 1,一直减到 0 还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环。
8 位协议:
- 表示上层协议的类型,即有效载荷是什么报文。
16 位头部校验和:
- 使用 CRC 进行校验,来鉴别头部是否损坏。
32 位源地址和 32 位目标地址:
- 表示发送端和接收端。
选项字段(不定长, 最多 40 字节):略
🔺IP 的 网段划分:
过去曾经提出一种划分网络号和主机号的方案,把所有 IP 地址分为五类。
A类 0.0.0.0到127.255.255.255
B类 128.0.0.0到191.255.255.255
C类 192.0.0.0到223.255.255.255
D类 224.0.0.0到239.255.255.255
E类 240.0.0.0到247.255.255.255
但这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址。
针对这种情况提出了新的划分方案,称为 CIDR(Classless Interdomain Routing)
:
-
引入一个额外的子网掩码(subnet mask)来区分网络号和主机号
-
子网掩码也是一个 32 位的正整数,通常用一串 “0” 来结尾
子网掩码格式:左半部分全 1,右半部分全 0。 1 的部分就是网络号的占位,0 的部分就可以用来进行子网划分, 如此相比分类网段,就更加灵活了。
-
将 IP 地址和子网掩码进行 “按位与” 操作,得到的结果就是网络号
-
网络号和主机号的划分与这个 IP 地址是 A 类、B 类还是 C 类无关