第三章(IP网际协议)
1.1 IP 数据报
- IP 协议位于网络层,它是 TCP/IP 协议族中最为核心的协议
- IP 协议提供的是 不可靠 、 无连接 的数据报传送服务
- 不可靠:
是它不能保证IP数据报能成功地到达目的地。IP仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端,任何要求的可靠性必须由上层来提供(如TCP)
- 无连接:IP 协议对每个数据报的处理是相互独立![图片描述]
IP 数据报的格式
- IP数据报的格式如图所示。普通的IP首部长为20个字节,除非含有选项字段:

- 各个部分的作用:
- 版本号 :4 位,用于标明 IP 版本号,0100 表示 IPv4,0110 表示 IPv6。目前常见的是 IPv4。
- 首部长度 :4 位,表示 IP 报头长度,包括选项字段。
- 服务类型(TOS) :分别有:最小时延、最大吞吐量、最高可靠性、最小花费 4 种服务,如下图所示。4 个标识位只能有一个被置为 1。
- 总长度 :16 位,报头长度加上数据部分长度,便是数据报的总长度。IP 数据报最长可达 65535 字节。
- 标识 :16 位,接收方根据分片中的标识字段相不相同来判断这些分片是不是同一个数据报的分片,从而进行分片的重组。通常每发送一份报文它的值就会加 1。
- 标志 :3 位,用于标识数据报是否分片。其中的第 2 位是不分段(DF)位。当 DF 位被设置为 1 时,则不对数据报进行分段处理;第 3 位是分段(MF)位,除了最后一个分段的 MF 位被设置为 0 外,其他的分段的 MF 位均设置为 1。
- 偏移 :13 位,在接收方进行数据报重组时用来标识分片的顺序。
- 生存时间(TTL) :8 位,用于设置数据报可以经过的最多的路由器个数。TTL 的初始值由源主机设置(通常为 32 或 64),每经过一个处理它的路由器,TTL 值减 1。如果一个数据报的 TTL 值被减至 0,它将被丢弃。
- 协议 :8 位,用来标识是哪个协议向 IP 传送数据。
- 首部校验和 :根据 IP 首部计算的校验和码。
- 源 IP 和目的 IP :数据报头还会包含该数据报的发送方 IP 和接收方 IP。
- 选项 :是数据报中的一个可变长、可选的信息,不常用,多用于安全、军事等领域。
使用 tcpdump 这个抓包工具来实际看一下
- sudo tcpdump -ntx -c 1
- -n :显示 IP 地址而非域名地址
- -t :不显示时间戳
- -x :以十六进制显示包内内容
- -c :tcpdump 将在接受到几个数据包后退出
1.2 IP 地址分类
- IP地址是用来识别网络上的设备,因此,IP地址是由网络地址与主机地址两部分所组成
- 同一个区域的所有主机有相同的网络号(即 IP 地址的前半部分相同),区域内的每个主机(包括路由器)都有一个主机号与其对应
- IP 地址被分为 A、B、C、D、E 五类:
- A 类给大型网络或政府机构等
- B 类分配给中型网络、跨国企业等
- C 类分配给小型网络
- D 类用于多播
- E 类用于实验
A 类地址网络号范围:1.0.0.0---127.0.0.0
A 类 IP 地址范围:1.0.0.0---127.255.255.255
A 类 IP 的私有地址范围:10.0.0.0---10.255.255.255 (所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)
127.X.X.X 是保留地址,用做循环测试用的,因为主机号有 24 位,所以一个 A 类网络号可以容纳 2^24-2=16777214 个主机号
B 类地址网络号范围:128.0.0.0---191.255.0.0
B 类 IP 地址范围:128.0.0.0---191.255.255.255
B 类 IP 的私有地址范围:172.16.0.0---172.31.255.255
169.254.X.X 是保留地址;191.255.255.255 是广播地址
因为主机号有 16 位,所以一个 B 类网络号可以容纳 2^16-2=65534 个主机号
C 类地址网络号范围:192.0.0.0---223.255.255.0
C 类 IP 地址范围:192.0.0.0---223.255.255.255
C 类 IP 的私有地址范围:192.168.0.0---192.168.255.255
因为主机号有 8 位,所以一个 C 类网络号可以容纳 2^8-2=254 个主机号
1.3 子网划分
- 目的:IP 地址如果只使用 ABCDE 类来划分,会造成大量的浪费:一个有 500 台主机的网络,无法使用 C 类地址。但如果使用一个 B 类地址,6 万多个主机地址只有 500 个被使用,造成 IP 地址的大量浪费
- 当我们对一个网络进行子网划分时,基本上就是将它分成小的网络,占用主机号的前几个位,用于表示子网号
- 子网掩码是一个32位的2进制数,其对应网络地址的所有位置都为1,对应于主机地址的所有位置都为0
- A类网络的默认子网掩码是255.0.0.0,B类网络的默认子网掩码是255.255.0.0,C类网络的默认子网掩码是255.255.255.0。将子网掩码和IP地址按位进行逻辑“与”运算,得到IP地址的网络地址,剩下的部分就是主机地址,从而区分出任意IP地址中的网络地址和主机地址

1.4 IP 路由选择
- 路由选择表中包含的路由选择信息根据路由选择算法的不同而不同。一般在路由表中包括这样一些信息:目的网络地址,相关网络节点,对某条路径满意程度,预期路径信息等
- 大多数情况则是发送方与接收方通过若干个**路由器(router)**连接,那么数据报就需要经过若干个路由器的转发才能送达
- IP 层在内存中有一个路由表(输入命令 route -n 可以查看路由表),当收到一份数据报并进行发送时,都要对该表进行搜索:
搜索路由表,如果能找到和目的 IP 地址完全一致的主机,则将 IP 数据报发向该主机;
搜索路由表,如果匹配主机失败,则匹配同子网的路由器(这需要子网掩码的协助)。如果找到路由器,则将该 IP 数据报发向该路由器;
搜索路由表,如果匹配同子网路由器失败,则匹配同网络号路由器,如果找到路由器,则将该 IP 数据报发向该路由器;
如果以上都失败了,就搜索默认路由,如果默认路由存在,则发报;
如果都失败了,就丢掉这个包;
接收到数据报的路由器再按照它自己的路由表继续转发,直到数据报被转发到目的主机;
接收到数据报的路由器再按照它自己的路由表继续转发,直到数据报被转发到目的主机;
如果在转发过程中,IP 数据报的 TTL(生命周期)已经被减为 0,则该 IP 数据报就被抛弃。
1.5 IPv6
- 由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍
- 单从数量级上来说,IPv6 所拥有的地址容量是 IPv4 的约 8×10^28 倍,达到 2^128(算上全零的)个
- IPv6 的地址长度是 128 位,通常将这 128 位的地址按每 16 位划分为一个段,将每个段转换成十六进制数字,并用冒号隔开,比如:2000:0000:0000:0000:0001:2345:6789:abcd 就是一个 IPv6 地址
作业
第一题


- 协议版本: 0x4 表示的是协议版本为 IPv4。
- 首部长度: 0x5 ,5*4=20,表示 IP 报头长度为 20 字节。一个字节通常等于 8 位,所以这里可以知道 IP 报头为 4500 到 0002。
- TOS 服务类型:0x00,意味着是一般服务。
- 总长度:0x0057;
标识:0x88d0
3bit 标志 + 13bit 片偏移:0x4000
生存时间:0x40,值为 64
协议:0x06,代表 TCP 协议
首部校验和:0x59a2
- 其他信息可依次类推。
第二题. 子网划分:现有两个 C 类网,202.203.204.0 和 202.203.224.0,分别把它们平均分成 4 个和 8 个子网,写出每个子网的起始、终结 IP 和子网掩码。
202.203.204.0属于C类地址,其默认子网掩码是255.255.255.0
平均分成4个子网,则4化成二进制:4=100
可知需要向主机号借2位(001,011,110,101),因为符合公式:借n位可得2^n个子网。
可得掩码二进制为:11111111.11111111.11111111.1100000
转化为十进制为:255.255.255.192
起始、终结 IP:
- 11001010.11001011.11001100.00000001 - 11001010.11001011.11001100.00100000
- 11001010.11001011.11001100.01000001 - 11001010.11001011.11001100.01100000
- 11001010.11001011.11001100.10000001 - 11001010.11001011.11001100.10100000
- 11001010.11001011.11001100.11000001 - 11001010.11001011.11001100.11100000
202.203.224.0 分8 个子网类似可得:借3位
子网掩码:255.255.224.224
每个子网的起始、终结 IP:
- 11001010.11001011.11001100.00000001-11001010.11001011.11001100.00010000
- 11001010.11001011.11001100.00100001-11001010.11001011.11001100.00110000
- 11001010.11001011.11001100.01000001-11001010.11001011.11001100.01010000
- 11001010.11001011.11001100.10000001-11001010.11001011.11001100.10010000
- 11001010.11001011.11001100.01100001-11001010.11001011.11001100.01110000
- 11001010.11001011.11001100.10100001-11001010.11001011.11001100.10110000
- 11001010.11001011.11001100.11000001-11001010.11001011.11001100.11010000
- 11001010.11001011.11001100.11100001-11001010.11001011.11001100.11110000
第三题
172.16.xxx.xxx
172.17.xxx.xxx
172.18.xxx.xxx
172.19.xxx.xxx
.
.
172.31.xxx.xxx
解:16-31共有16个小的子网,则本来划分的时候是网络号向主机号借了4位(因为2^4=16),所以到反回去求大的子网时,则网络号为12,(B类默认的子网掩码时255.255.0.0)所以大的子网的网络号为12位。
可得:172.xxx.xxx.xxx/12或172.xxx.xxx.xx/255.240.0.0
过程:
IP地址转化位二进制:
10101100.1111(0000-1111).xxxxxxxx.xxxxxxxx
子网掩码:
11111111.11110000.0000000.0000000
得:172.xxx.xxx.xxx/12或172.xxx.xxx.xx/255.240.0.0