网络层:为分组交换网上的不同主机提供分组交换服务。
IP协议
协议格式
4位版本:ipv4就是4.
4位首部长度:20字节固定+40字节选项。
8位服务类型:TOC,高三位表示优先级,已弃用,其次从高到底依次为:最小延迟,最大吞吐量,最够可靠性,最小成本,一位保留。
16位总长度:理论可达2^16 - 1 =65535;实际上<= MTU。
16位标识符:如果IP数据报在数据链路层被分片了,这个标识符能标识分片是否属于同一数据包。
3位标志:第一位保留,第二位表示禁止分片,第三位表示分片是否结束(1:还有分片,0:没有分片)。
13位片偏移:描述的是分片在整个UDP数据包中的相对位置。
片偏移*8 = 在UDP数据包中按字节偏移的相对位置。
8位生存时间:TTL,当前IP数据包在网络中最大经历的路由器的个数,一般为64.每转发一次就-1,减到0就会被路由器丢弃。
8位协议: 记录传输层使用的什么协议。
由于MSS的存在,TCP的IP数据报不会发送分片,反之,如果分片了一个分片的丢失将导致整个TCP数据包的重发。
而UDP的IP数据报没有严格的限制,若大于MTU就会分片。
因此IP协议是不可靠的。
IP地址管理
为了解决IP地址分配问题。
IPV4版本的的IP有42.9亿个。
网段划分
将IP地址分为网络号也叫网络号和主机号。
网络号:唯一表示一个网段。
主机号:唯一标识同一网段下的不同主机。
DHCP技术
可以自动的子网内新增的主机分配IP.一般路由器都自带这个功能,因此路由器可以看做是一个DHCP服务器。
曾经的5类IP划分
D,E类是特殊地址分配,主机号全0的是
网络地址
,主机号全一的是广播地址
,这些都不能给主机或路由器分配。
分类 | 最高位 | 网络位 | 主机位 | 子网掩码 | IP范围 |
---|---|---|---|---|---|
A类 | 最高位0 | 7 | 24 | 255.0.0.0 | 1.0.0.0-127.255.255.255 |
B类 | 高两位10 | 14 | 16 | 255.255.0.0 | 128.0.0.0-191.255.255.255 |
C类 | 高三位110 | 21 | 8 | 255.255.255.0 | 192.0.0.0-223.255.255.255 |
分类 | 最高位 | * | IP范围 |
---|---|---|---|
D类 | 高四位1110 | 28位多播组号 | 224.0.0.0-239.255.255.255 |
E类 | 高五位11110 | 27位待用 | 240.0.0.0-255.255.255 |
子网掩码
无符号32位整数,用于描述当前网络使用多少网络号多少主机号。
网络号部分全1,主机号部分全0;
127.0.0.1 本地回环
0.0.0.0 回收本地所有地址
CIDR
CIDR是如今的子网划分方式。
引入子网掩码通过从主机号借位进行子网划分。
私网IP
不能访问互联网资源,这样不同子网的私网IP就可以复用,还是为了缓解IP地址枯竭。
3个私网网段:
10.x.x.x
172.16.x.x
192.168.x.x
NAT协议
地址转换协议
作用:私网机器对公网机器发送请求或接受应答时,将私网/公网TP经过NAT网关转化为公网/私网IP.
方式:
静态NAT:一个私网IP对应一个公网IP.
动态NAT:选择当前空闲的一个公网IP进行转换(确实对于解决ip枯竭有很大帮助)。
NAPT
对于动态NAT的重载
在地址转换的时候,不仅将IP进行了转换,而且还将传输层的端口也进行转换。
解决的同一局域网内多个主机同时访问公网资源。
将同一局域网中不同主机的私网IP+port ==>同一个公网IP+不同port。
NAT总结 :
- NAT对通信双发透明且无感知。
- NAT网关会保存映射关系,保证走出去还能再回来。
- 只能先从私网走出去才能从公网走回来。
- NAPT增加了端口转换大大缓解了ip枯竭。
- 增加了开销。
路由选择
就是找到去往下一个的地方,通过目的IP,和路由项进行选择。
路由器上有两个口
WAN口:连接上级路由器。
LAN口:组件路由器对应的子网。
路由查找规则
路由查找就是通过目的IP查找下一个主机的路由,具体如何走由数据链路层实施。
路由的原则:数据到达转发节点,由转发节点重新选择路由,既然转发节点需要路由,那么就一定需要数据分用,分用到网络层找到IP地址。
路由过程
路由的过程是一跳一跳的过程,一跳:就是数据链路层的一个区间,具体在以太网中指从源MAC到目的MAC之间的帧传输区间。
路由表 route -n 查看路由表
[jiahao@VM-0-17-centos ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.252.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
[jiahao@VM-0-17-centos ~]$
Destination: 目的网络号
Gateway: 网关地址
Genmask:子网掩码
Flags:
U:路由是动态的;
H:目标是一个主机;
G:路由指向网关,没有G就表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发
R:恢复动态路由产生的表项;
D:由路由的后台程序动态安装;
M:由路由的后台程序修改;
!: 拒绝路由。
Metric:经过路由器个数
Ref :引用次数 Linux中未使用。
Use:查询次数
Iface:接口,去往目的地址的网络路径的出口;
路由器在收到IP数据报告后执行的分组转发步骤如下:
1. 提取IP数据报告首部中的目的IP地址.
2. 判断目的IP地址所在的网络是否与本路由器直接相连(路由表中Flags没G)。如果是,就直接交付给目的网络,如果不是执行3.
3. 检查路由器表中是否有目的IP地址的特定主机路由(路由表中Flags为H)。如果有,按特定主机路由转发:如果没有,执行4.
4. 逐条检查路由表,目的IP&子网掩码的结果和每个目的网络号进行对比。若找到匹配路由,则按照路由表进行转发:若所有路由均不匹配,则执行5.
5. 若路由表中设置有默认路由,则按照默认路由表转发:否则向源主机报错。