
点击上方蓝字关注我


前文回顾:
上一篇我们讲述了网路层的概述, 数据交换方式, 路由算法和路由协议, 以及三种路由协议的比较.
这一篇我们继续展开网络层的后半部分, 也是重中之重, IP协议.
01
IP数据报


IP数据报格式


其中总长度1位表示1B, 片偏移一位表示8B, 首部长度一位表示4B
简单来说就是: 一种八片的首饰.
以下列出IP数据报的详细资料:
| 名称 | 注释 | 大小 |
|---|---|---|
| 版本 Version | ipv4或者ipv6 | 4位 |
| 首部长度 IHL | 此处数值再乘以4才是真正大小,同时因为IP数据报固定长度为20字节,所以此处最小值为5,即二进制的0101 | 4位 |
| 区分服务 DSCP + ECN | 希望获得哪种服务,用的比较少 | 8位 |
| 总长度 Total Length | 首部+数据的长度,最大为2^16-1=65535 | 16位 |
| 标识 Identification | 用来表示是哪一个数据报的分片,不同的分片标识各不相同 | 8位 |
| 标志 Flags | 用来表示是否分片和分片是否结束 | 3位,但实际有用的只有后两位 |
| 片偏移 Fragment Offset | 用来标记分片之后,该分片在原来的数据报的位置,以8字节为单位 | 13位 |
| 生存时间 Time To Live | 即TTL,没经过一个路由器TTL-1,0时自动放弃,根据系统不同默认的TTL不同 | 8位 |
| 协议 Protocol | 用来标记协议名的字段值,如TCP,UDP,ICMP等等 | 8位 |
| 首部检验和 Header Checksum | 检验首部的字段是否出错,出错就丢弃此数据报 | |
| 源地址 Source IP Address | 发送方ip地址 | 32位 |
| 目的地址 Destination IP Address | 接收方ip地址 | 32位 |
| 可选字段 Options | 用来排错等安全检测 | 未知,可在0-40位之间 |
| 填充 | 将数据报对齐成4字节的整数倍,数值全部为0 | 未知,根据可选字段来定 |
02
IP地址
首先我们要知道, IP地址就是全球唯一的表示某个主机或者路由器接口的编码


ipv4地址

IP地址的分类

特殊的IP地址

用点分十进制表示:
0.0.0.0, 0.0.0.x, 255.255.255.255, x.255.255.255, 127.x.x.x
tip: 环回的意思就是发给自己.
以下为私有IP地址

分类的IP地址

接下来我们解释一下一些问题
为什么A类最大是126.xxx.xxx.xxx?
因为网络号最开始第一位是0,一共八位,所以二进制表示位0xxxxxxx,最大就是2^7-1=127,但是因为127.xxx.xxx.xxx是特殊ip地址,所以将其去掉
为什么B类最大是191.255.xxx.xxx?
因为网络号最开始第一位是10,一共八位,所以二进制表示位10xxxxxx,最大就是10111111=191,最小就是10000000=128,无特殊ip地址
为什么C类最大是223.255.xxx.xxx?
因为网络号最开始第一位是110,一共八位,所以二进制表示位110xxxxx,最大就是11011111=223,最小就是10000000=192,无特殊ip

总有那么一个时间, 所有的IP地址会用完, 所以人们想了很多的方法来扩展IP地址的可用性, 以及后续衍生出了IPV6地址, 号称能给地球上的每一粒沙子分配一个IP地址.
接下来我们看看有哪些方法吧!


网络地址转换NAT


简单来说就是找一个代理(NAT路由器), 来连接内外网,
NAT需要构建NAT转换表,既要存广域网(WAN,外网)也要存局域网(LAN,内网)的ip地址和端口号


子网划分与子网掩码


tip:
为什么子网好能全0或者全1:因为CIDR编址(可见下一段)
为什么主机号不能全0或者全1:因为全0代表本网络,全1代表广播分组

子网掩码就是用来和ip地址一起计算子网的地址的
方法就是讲子网掩码逐位写成二进制然后而原来ip地址进行与运算,就可以得到子网ip地址
因为255是11111111,所以如果写着255的话,ip地址和子网ip地址对应的地方的数值就相同

可以看见,子网掩码不同,相同ip地址对应的子网ip地址也可能相同
但是子网掩码不同,划分的子网数目不同
为什么划分的子网数目不同?或者说怎么算划分的子网位数目?
以255.255.192.0为例,255是11111111即八个1,192是11000000即2个1,一共是82+2=18个1,一共有32位地址,所以剩余有32-18=14位
以255.255.224.0为例,255是11111111即八个1,224是11100000即3个1,一共是82+3=19个1,一共有32位地址,所以剩余有32-19=13位


使用子网时分组的转发


tip:
1.这里特定主机路由就是指找特定的处理这里这个ip地址的路由
2.默认路由会将这个数据报发给另一个路由,直至找到对应的路由,或者TTL耗尽被丢弃


无分类编址CIDR


前缀有几位, 子网掩码就有几位
使用CIDR可以聚合网络, 通过缩短前缀, 某些网络可以合并在同一子网上
这样转发表中就会有多个匹配结果, 我们使用最长前缀匹配法


03
ARP协议

03
DHCP协议

简单来说就是动态的获取IP地址
03
ICMP协议
ICMP协议处于网络层与传输层之间, 就是为了更好地转发IP数据报和提高交互成功的机率

接下来我们来看看ICMP的报文类型
ICMP差错报告报文

从图中可看出,ICMP报文就是对IP数据报进行了封装与删改, 增加了校验的部分, 去掉了数据的部分

tip:其中源点抑制已经废弃
我们看看不需要发送ICMP报文的情况

ICMP询问报文

关于ICMP的应用
ping: 测试两个主机之间的连通性, 使用ICMP回送请求和回答报文
traceroute:跟踪一个分组从原点到终点的路径, 使用ICMP时间超过差错报告报文


IPV6


IPV6出现的原因很简单, 就是IPV4地址不够用了, 前面的NAT和CIDR技术也只是在IPV4的基础上进行了小修小补, 没有解决根本上的问题




IPV6地址的表示形式




IPV6数据报格式

和上文统一, 使用表格的形式先看看各个字段的名称, 作用, 和位数
| 名称 | 作用 | 位数 |
|---|---|---|
| 版本 Version | 知名协议版本,此处因为是ipv6所以总是6 | 4位 |
| 优先级 Traffic Class | 又来区分数据报的类型和优先级 | 8位 |
| 流标签 Flow Label | 和ipv4标识某个数据报分片不同,这是对于一整个数据报流的标记 | 19位 |
| 有效载荷长度 Payload Length | 指的是扩展首部+数据部分的大小,和ipv4的总长度和首部长度都不同,ipv6的首部长度是固定的40字节 | 16位 |
| 下一个首部 Next Header | 基本首部的下一个首部指的是有效载荷里标记的的扩展首部,有效载荷里的扩展首部再指向有效载荷里标记的的扩展首部,直至最后指向数据 | 8位 |
| 跳数限制 Hop Limit | 基本相当于ipv4当中的TTL,每到一个路由器-1.减到0时丢弃 | 7位 |
| 源地址 Source Address | 发送方ipv6地址 | 128位 |
| 目标地址 Destination Address | 接收方ipv6地址 | 128位 |

关于IPV4和IPV6的区别

关于IPV6的地址类型简单了解一下
| 名称 | 作用 | 要求 |
|---|---|---|
| 单播 | 一对一通信 | 可做源地址,目的地址 |
| 多播 | 一对多通信,以前的广播地址当做覆盖所有主机的多播 | 可做目的地址 |
| 任播 | 一对多当中的一个通信,看似一对多,实则一对一 | 可做目的地址 |
在人们使用了很久IPV4之后, 如何过渡到IPV6也是一个问题.我们有如下的两种解决方案.
双栈协议
也就是双协议共用
隧道技术
就是把IPV6数据报当作IPV4的数据报的数据部分, 前面+上IPV4的首部进行伪装
05
组播

简单来说,单播就是一对一, 广播就是一对所有, 组播就是一对一部分
以下两图来理解单播与多播的区别


IP组播地址

硬件组播

注意: 在01-00-5E后面,还有一个必须为0的位, 所以最大的地址为5E后面是7,而不是F


IGMP协议



关于IGMP协议, 我们需要知道的是它只能知道是否有进程参加或退出某个组播组, 并不知道有多少成员, 在哪个地方也不知道
组播路由选择协议
这里我们只需要知道, 有了这个, 成员就可以自行找到转发组, 自行决定参加哪个组播
协议常用的三种算法和路由选择协议基本一致, 包括基于链路状态的, 基于距离-向量的,以及稀疏/密集的.


移动IP

首先我们要了解一些相关术语

接下来我们看一下移动IP的通信过程


我们简单举个例子来理解一下通信的过程
小王(B)要给小红(A)送一封信(数据), 由于不知道小红在哪(外部网络), 就寄到小红家里,小红其实在公司(转交地址)上班, 所以小红妈(本地代理)就把信件装好(再封装)转交给公司,公司相关人员(外部代理)转交给小红, 最后小红才收到了这封信.
04
网络层设备
网络层的核心设备就是 ---- 路由器

端口的具体构造

接下来我们来看看前三层设备的区别吧

关于路由器的路由表和转发表, 就是前面路由选择等知识的复习了


以上就是所有的网络层的内容了, 这部分的核心内容在于IPV4地址, 路由选择协议以及路由算法, 以及数据交换的方式, 多多重复, 百炼成钢!!






