一、概述
功能:
主要解决不同局域网之间的数据传输
内容:
网络层IP协议:IP协议、子网划分、简单路由过程
网络层其他协议:ARP协议与RARP协议、ICMP协议
IP路由算法:路由的概述、内部网关路由协议、外部网关路由协议
二、IP协议
1、虚拟互连网络
- 物理设备通过使用IP协议,屏蔽了物理网络之间的差异
- 当网络中的主机使用IP协议连接时,则无需关注细节
- IP协议使复杂的实际网络变为一个虚拟互连的网络
- IP协议使网络层可以屏蔽底层细节而专注网络层的数据转发
- IP协议解决了在虚拟网络中数据报传播路径的问题
2、IP协议
- IP地址长度为32位,分为4个8位
- IP地址常使用点分十进制来表示
- 用这种方法最多可以表示2^32=42亿个不同IP地址
- IP地址在根据所处的网域不同而不同
1)IP数据报头部
这里每一行都占32位4个字节,必须有的为5行,所以IP地址首部最少为20个字节;
版本:占4位,指IP协议的版本,通信双方的版本必须一致,当前主流版本是4,即IPv4,也有IPv6;
首部位长度: 占4位,最大数值为15(16进制,所以首部最大数值为15X4=60),表示IP首部长度,单位是32位字,即4个字节;
总长度: 占16位,最大数值位65535,表示IP数据报总长度(IP首部+IP数据),但是数据链路层中的MTU(最大传输单位)是1500,65535远远超过1500,所以在实际传输过程中,如果IP数据报长度超过1500,数据链路层会将IP数据报分片传送;
标识: 是协议内部具体使用,无需了解
标志: 占3位,只用2位是有意义的,标志IP报文是否要分段;
片偏移: 如果IP报文超过1500,需要分段传送时,片偏移表示当前传送的是报文的第几个片段;
TTL: 占8位,表示IP数据报文在网络中的寿命,没经过一个设备,TTL减1,当TTL=0时,网络设备必须丢弃该报文;为了防止报文在网络中找不到目的地址而无限传输,占用网络带宽;
协议: 占8位,表示IP数据报所携带的具体数据是什么协议(如:TCP、UDP);
协议名 | ICMP | IGMP | IP | TCP | UDP | OSPF |
---|---|---|---|---|---|---|
字段值 | 1 | 2 | 4 | 6 | 17 | 89 |
以上为可使用的不同协议,为每个协议赋不同的值来表示
首部校验和: 占16位,校验IP首部是否有出错,如果有错误,直接丢弃;
源IP地址: 占32位,发送端的IP地址;
目的IP地址: 占32位,接收端的IP地址;
2)IP协议的转发流程
计算机A—路由器A–网络1—路由器B–网络2—计算机B 通过逐跳的形式到达
i、路由表简介
类似于MAC地址表(计算机/路由器都拥有路由表)
目的IP地址 | 吓一跳IP地址 |
---|---|
IP1 | IP2 |
IP3 | IP4 |
ii、IP协议的转发流程
实例说明:
计算机A—>路由器E—>计算机D,路由器F—>计算机C,计算机B
这里计算机A向计算机C发送数据报文
第一步:
- A发出目的地址为C的IP数据报,查询路由表发现下一跳为E
- A将IP数据报交给数据链路层,通过ARP缓存表获得MAC地址,并告知目的MAC地址是E(通过ARP协议转化)
- 数据链路层填充源MAC地址A和目的MAC地址E
- 数据链路层通过物理层将数据发送给E
第二步:
- E的数据链路层接收到数据帧,把帧数据交给网络层
- E 查询路由表,发现下一跳为F
- E 把数据报交给数据链路层,通过ARP缓存表获得MAC地址,并告知目的MAC地址为F
- E的数据链路层封装数据帧并发送
第三步:
- F的数据链路层接收到数据帧,把数据帧交给网络层
- F 查询路由表,发现下一跳为C
- F把数据报交给数据链路层,通过ARP缓存表获得MAC地址,并告知目的MAC地址为C
- F的数据链路层封装数据帧发送
数据帧每一跳的MAC地址都在变化
IP数据报每一跳的IP地址始终不变
3、ARP协议与RARP协议
1)ARP协议
ARP(Address Resolution Protocol)地址解析协议
网络层IP32位地址—> 通过ARP协议转化—> 数据链链路层MAC48位地址
ARP缓存表:
IP地址 | MAC地址 |
---|---|
192.168.83.254 | 00-50-56-e0-33-40 |
- ARP缓存表是ARP协议和RARP协议运行的关键
- ARP缓存表缓存了IP地址和MAC地址的映射关系
- ARP缓存表的记录并不是永久有效的,有一定的期限
- 命令行中通过arp -a查询ARP缓存表
ARP协议在数据报文中的位置:
数据报文:
目的地址 | 源地址 | 类型 | 帧数据 | CRC |
---|---|---|---|---|
6 | 6 | 2 | 46~1500 | 4 |
其中,ARP协议存放在帧数据中:
类型0806 | ARP请求/应答 | PAD |
---|---|---|
2 | 28 | 18 |
其中,ARP请求/应答包括:
硬件类型 | 协议类型 | 标记 | 发送端以太网地址 | 发送端IP地址 | 目的端以太网地址 | 目的端IP地址 |
---|---|---|---|---|---|---|
2 | 2 | 4 | 6 | 4 | 6 | 4 |
两种情况:
1、ARP缓存表中有IP地址和MAC地址的映射关系,则网络层将数据报表交给数据链路层时,通过查询ARP缓存表,获得目的计算机的MAC地址
2、ARP缓存表中没有目的计算机的IP地址和MAC地址的映射关系,目的计算机的IP地址以广播的形式发送给除源计算机的端口,目的计算机收到后将自己的MAC地址发送给发送端口,并将此映射关系添加到ARP缓存表
2)RARP协议
- RARP(Reverse Address Resolution Protocol)逆地址解析协议
- 与ARP协议相反
- 数据链路层MAC48位地址–> RARP协议转换 --> 网络层IP32位地址
RARP协议在报文中的位置与ARP协议相同:
都在帧数据中:
类型8035 | RARP请求/应答 | PAD |
---|---|---|
2 | 28 | 18 |
3)小结
- ®ARP协议是TCP/IP协议栈里面基础的协议
- ARP和RARP的操作对程序员是透明的,虽然存在但是就像不存在一样
- 理解R(ARP)协议有助于理解网络分层的细节,辅助网络层和数据链路层对IP地址和MAC地址的转换
4、IP地址的子网划分
1)分类的IP地址
i、概念
为了更好的规划和分类IP地址
IP地址一共32位:
网络号 | 主机号 |
---|---|
A类地址:
网络号(0开头) | 主机号 |
---|---|
8位 | 24位 |
B类地址:
网络号(10开始) | 主机号 |
---|---|
16 | 16 |
C类地址:
网络号(110开头) | 主机号 |
---|---|
24位 | 8位 |
D类地址:1110开头,用于特殊用途
E类地址:1111开头,用于特殊用途
ii、子网的运算
最小网络号 | 最大网络号 | 子网数量 | 最小主机号 | 最大主机号 | 主机数量 | |
---|---|---|---|---|---|---|
A | 1 | 127(01111111) | 2^7-2 | 0.0.1 | 255.255.254 | 2^24-2 |
B | 128.1 | 191.255 | 2^14-1 | 0.1 | 255.254 | 2^16-2 |
C | 192.0.1 | 223.255.255 | 2^21-1 | 1 | 254 | 2^8-2 |
需要排除的网络号和主机号
特殊的主机号:
- 主机号全0表示当前网络段,不可分配给特定主机
- 主机号为全1表示广播地址,向当前网络段所有主机发送消息
特殊的网络号:
- A类地址 网络段全0(00000000) 表示特殊网络
- A类地址 网络段后7位全1(011111111:127) 表示回环地址
- B类地址 网络段(10000000.00000000:128.0) 是不可使用的
- C类地址 网络段(192.0.0) 是不可使用的
其中,回环地址(127.0.0.1),通常称为本地回环地址,不属于一个有类别地址类,代表设备的本地虚拟接口,只要计算机开机,这个地址就是通的,永远不会宕掉;因此在安装网卡之间可以ping通这个本地回环地址,用来检查本地网络协议、基本数据接口是否正常。
运算举例举例:
125.125.3.60 ---->前8位:01111101 属于A类,因为首位为0
163.70.31.23 —>前8位: 10100011 属于B类,因为开头位10
210.36.127.11 -->前8位:11010010 属于C类,因为开头为110
2)划分子网
网络号 | 主机号 |
---|---|
网络号 | 子网号 | 主机号 |
---|---|---|
例如一个C类IP地址
将主机号分为两段,减少IP的浪费
00000000:193.10.10.1~193.10.10.127
10000000:193.10.10.128~193.10.10.255
子网掩码:255.255.255.128
网络号 子网号 主机号
|------25位-------|—7位–|
|------25个1------|–7个0-|
i、什么是子网掩码
用来快速判断某个IP是属于哪个网络号
- 子网掩码和IP地址一样,都是32位
- 子网掩码由连续的1和连续的0组成
- 某一个子网的子网掩码具备网络号位数个连续的1
例如:
A类地址
0…… | 主机号 |
---|---|
8位 | 24位 |
对应的子网掩码为:
11111111 | 00000000 00000000 00000000 |
---|---|
8位 | 24位 |
B类地址
10…… | 主机号 |
---|---|
16位 | 16位 |
对应的子网掩码为:
11111111 11111111 | 00000000 00000000 |
---|---|
16位 | 16位 |
A类地址子网掩码:255.0.0.0
B类地址子网掩码:255.255.0.0
C类地址子网掩码:255.255.255.0
ii、子网号的计算
例如193.10.10.0的IP地址分为:
00000000 :193.10.10.0~193.10.10.127
10000000:193.10.10.128~193.10.10.255
已知一个IP地址和子网掩码计算子网号:
IP:193.10.10.6
子网掩码:255.255.255.128
将IP地址和子网掩码都转换为二进制,进行与运算
得193.10.10.0,即为子网号(网络号)
3)无分类编址CIDR
i、什么是CIDR
- CIDR中没有A、B、C类网络号、和子网划分得概念
- CIDR将网络前缀相同得IP地址称为一个 ‘CIDR地址块’
网络前缀 | 主机号 |
---|---|
网络前缀是任意位数的
ii、CIDR的斜线记法
193.10.10.129/25
表示:网络前缀有25位,则主机号有7位
即:11000001.00001010.00001010.10000001
CIDR举例:
CIDR前缀长度 | 掩码点分十进制 | 地址数 |
---|---|---|
/13 | 255.248.0.0 | 512k |
/14 | 255.252.0.0 | 256k |
/15 | 255.254.0.0 | 128k |
/16 | 255.255.0.0 | 64k |
/17 | 255.255.128.0 | 32k |
/18 | 255.255.192.0 | 16k |
/19 | 255.255.224.0 | 8k |
无分类编制CIDR除了网络前缀,剩下的其他均与网络号相同(如子网掩码的计算,IP地址的使用,特殊的网络号,特殊的主机号),相比原来子网划分更加灵活
例如:某公司增加了100名员工,并且拆分成2个部门,应该分配哪个网络号?
给公司总分配/24(超网)的网络号,分别每个部门的网络号为/25(子网)
5、网络地址转换NAT技术
由于IP地址不够用,引入NAT技术
1) IP地址分类
i、内网地址:
- 内部机构使用(如家庭中的手机、笔记本)
- 避免与外网地址重复
分类:
- 10.0.0.0~10.255.255.255 支持千万数量级设备
- 172.16.0.0~172.31.255.255 支持百万数量级设备
- 192.168.0.0~192.168.255.255 支持万数量级设备
由于内网地址是内部使用,因此两个不同的内网(如A公司、B公司)可以使用同样的内网地址,不冲突
ii、外网地址
- 全球范围使用
- 全球公网唯一
2)网络地址转换NAT技术
内网多个设备使用同一个外网IP请求外网的服务,外部怎么知道具体是哪个设备在请求?
使用NAT技术
- 网络地址转换NAT(Network Address Translation)
- NAT技术用于多个主机通过一个公有IP访问互联网的私有用户中
- NAT减缓了IP地址的消耗,但是增加了网络通信的复杂度
例如:
一个路由器网络号为173.21.89.0的家庭中,有一个IP为192.168.2.11的电脑和IP为192.168.2.10的手机,当电脑上的某个进程请求访问外网服务时,先通过192.168.2.22:6666的IP地址和端口号将请求发送给路由器,再在路由器内部将IP地址和端口号转换为173.21.59.10:16666,路由器使用这个IP和端口号与外网通信,当路由器接到回复后再将IP地址和端口号转换为192.168.2.11:6666转发给电脑上的进程。
NA§T表
方向 | 旧的地址和端口号 | 新的地址和端口号 |
---|---|---|
出 | 192.168.2.11:6666 | 173.21.59.10:16666 |
入 | 173.21.59.10:16666 | 192.168.2.11.6666 |
虚拟机、家庭路由器都使用了NAT技术
6、ICMP协议
1)ICMP协议详解
- 网际控制报文协议(Internet Control Message Protocol)
- ICMP协议可以报告错误信息或者异常情况(用来辅助IP协议更好的传输数据)
i、ICMP协议的封装位置
封装在IP数据报的数据中
ii、ICMP报文首部
8位类型 | 8位代码 | 16位校验和 |
---|---|---|
类型:ICMP的类型
代码:此类型的ICMP可以判断哪些错误
校验和:类似IP协议的校验和
iii、IP数据报如何表示携带的ICMP报文
IP数据报中有个8位协议,用来表示此IP数据报携带的具体数据是什么协议
协议名 | ICMP | IGMP | IP | TCP | UDP | OSPF |
---|---|---|---|---|---|---|
字段值 | 1 | 2 | 4 | 6 | 17 | 89 |
如果携带的数据是ICMP协议,则IP报文中8位协议的位置写1
iv、差错报告报文
ICMP报文种类 | 类型的值 | 报文类型 | 具体代码 |
---|---|---|---|
差错报告报文 | 3(重点不可达) | 网络不可达 | 0 |
同上 | 同上 | 主机不可达 | 1 |
同上 | 5(重定向) | 对网络重定向 | 0 |
同上 | 同上 | 主机不可达 | 1 |
同上 | 11 | 传输超时 | - |
同上 | 12 | 坏的IP头 | 0 |
同上 | 同上 | 缺少其他必要参数 | 1 |
具体代码即ICMP报文中的8位代码
类型值12表示传输的IP数据报有问题
v、询问报文
ICMP报文种类 | 类型的值 | 报文类型 | 具体代码 | 作用 |
---|---|---|---|---|
询问报文 | 0或8 | 回送(Echo)请求或应答 | - | 确认通信双方之间是否是通的 |
询问报文 | 13或14 | 时间戳(Timestamp)请求或应答 | - | 对时间进行同步时 |
2)ICMP协议的应用
i、Ping应用
Ping应用使用了ICMP的询问报文,验证网络是否是通的,及网络质量如何。
通常ping www.baidu.com
会收到百度返回的一些信息:
字节32:表示pin命令发出的报文长度为32位,由于ICMP报文封装在IP数据报中,所以指的是IP数据报的长度
时间:从请求到对方应答所用的时间
TTL:IP数据报头部的TTL,表示这个数据报在此网络中还剩下的寿命是多少跳
具体ping应用的排查网络问题步骤:
- Ping回环地址127.0.0.1:如果通则计算机正常;如果没有返回则计算机的协议栈出现问题,需要重装系统或者协议栈
- Ping网关地址:一般路由器地址为192.168.0.1或192.168.1.1,如果通则表示本机到路由器的网络是通的;如果不通则WiFi或者网线不通
- Ping远端地址:Ping外部地址,比如百度,如果通则家里到ISP的网络是通的;如果不同则家里到ISP的网络不通,需要联系联通或者电信来排查问题
ii、Traceroute应用
用来探测IP数据报在网络中走过的路径
比如:
IP数据报中的TTL,当TTL=0时,还没到达目的地址,此时网络设备必须丢弃该报文,此时发送给源地址一个ICMP终点不可达差错报文
比如:
要知道计算机A到计算机B的路径时,Traceroute怎么应用?
计算机A–>中型网络1–>大型网络1–>中型网络2–>小型网络1–>计算机B
计算机A先发出一个TTL=1的IP报文,到达中型网络1时TTL=0,中型网络1将报文丢弃,并向计算机A发送一个ICMP终点不可达差错报文,计算机A再发送一个TTL=2的IP报文,到达大型网络1后TTL=0,丢弃报文,并向计算机A发送一个ICMP终点不可达差错报文,计算机A再发送一个TTL=3的报文,到达中型网络2,TTL=0,丢弃报文,向计算机A发送ICMP终点不可达差错报文,直到到达计算机B,这样从计算机A到B的路径就被记录下来。
traceroute实际应用:
在cmd中输入:tracert 域名
返回所有经过的IP地址
三、网络层的路由
1、网络层的路由概述
1)路由算法的本质
路由算法实际上是图论的算法,但是比图论算法复杂
路由算法的特点:
- 算法是正确的、完整的。及依据算法数据可以正确到达目的地
- 算法在计算上应该尽可能的简单。因为网络非常庞大,设备很多,简单使更多的设备能够适合这个算法
- 算法可以适应网络中的变化。
- 算法是稳定的、公平的。稳定的指这个网络中的变化会影响别的网络中的数据通信,公平的指算法对网络中的每个设备都是平等的。
2)自治系统
由于互联网是庞大、复杂的,为了使算法更加简单,对互联网进行划分—自治系统AS
- 一个自治系统AS是处于一个管理机构下的网络设备群。管理机构可以是一个国家、一个公司等
- AS内部网络自行管理,AS对外提供一个或者多个出(入)口。AS外部不可以随意访问AS内部,如果要访问,通过出入口
通过上述了解,按照自治系统将路由协议划分为内部网关协议和外部网关协议:
- 自治系统内部路由的协议称为:内部网关协议(RIP、OSPF)
- 自治系统外部路由的协议称为:外部网关协议(BGP)
2、 内部网关路由协议之RIP协议
1)距离矢量(DV)算法
i、 DV算法的简要过程
- 每一个节点使用两个向量Di和Si
- Di描述的是当前节点到别的节点的距离
- Si描述的是当前节点到别的节点的下一节点
- 每一个节点与相邻节点交换向量Di和Si的信息
- 每一个节点根据交换的信息更新自己的节点信息
ii、举例
以节点A为例了解DV算法如何运行,求Da,Sa
A的距离矢量信息:
A | |
---|---|
A | 0 |
B | 11 |
C | 12 |
D | 10 |
E | 21 |
F | 17 |
A收到的距离矢量信息:
B | C | D | F | |
---|---|---|---|---|
A | 9 | 12 | 9 | 9 |
B | 0 | 9 | 8 | 15 |
C | 11 | 0 | 6011 | |
D | 7 | 8 | 0 | 10 |
E | 17 | 11 | 11 | 13 |
F | 11 | 10 | 10 | 0 |
解:
通过通信可得
AB=6,AC=9,AD=8,AF=7
综上融合为一张表:
A | B | C | D | F | |
---|---|---|---|---|---|
A | 0 | 9 | 12 | 9 | 9 |
B | 11 | 0 | 9 | 8 | 15 |
C | 12 | 11 | 0 | 6 | 11 |
D | 10 | 7 | 8 | 0 | 10 |
E | 21 | 17 | 11 | 11 | 13 |
F | 17 | 11 | 10 | 10 | 0 |
此时Sa列表为空,当A收到B的适量距离表时,计算A->B,A->B->C,A->B->D,A->B->E,A->B->F的值,其中B->C,B->D,B->E,B->F均为B的距离矢量表中的值,由A出发的为A自己的距离矢量表中的信息,如果计算过程中得到的A->C,A->D,A->E,A->F的值有小于A表中原来的值的,则更新A的距离矢量表,并将B作为路径中转中的下一节点存在Sa中。
2)RIP协议的过程
- RIP(Routing Information Protocol)协议
- RIP协议是使用DV算法的一种路由协议
- RIP协议把网络的跳数(hop)作为DV算法的距离
- RIP协议每隔30s交换一次路由信息
- RIP协议认为跳数>15的路由则为不可达路由
RIP协议的具体过程:
- 路由器初始化路由信息(两个向量Di和Si)
- 对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
- 检索本地路由,将信息中新的路由插入到路由表里面
- 检索本地路由,对于下一跳为X的,更新为修改后的信息
- 检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
- 如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)
RIP协议缺点:
故障信息传递慢
如下图:A节点故障,B直达不了,去问C,发现C的路由表中可达,则加1,但是没发现C其实是不可达的,造成故障信息传递不出来。
总结RIP协议:
- 优点:实现简单,开销很小
- 缺点:限制了网络的规模(跳数>15的视为不可达)
- 缺点:坏消息传得慢,更新收敛时间过长
3、Dijkstra(迪杰斯特拉)算法
- Dijkstra算法是著名图论算法
- Dijkstra算法解决有权图从一个节点到其他节点的最短路径问题
- 以起点为中心,向外层层扩散
最短路径问题–Dijkstra算法过程:
- 初始化两个集合(S,U)(S为只有初始顶点点A的集合,U为其他顶点集合)
- 判断U是否为空,如果U不为空,对U集合顶点进行距离的排序,并取出距离A最近的一个顶点D
- 将顶点D纳入S集合
- 更新通过顶点D到达U集合所有点的距离(如果距离更小则更新U,否则不更新)
- 重复2步骤
- 直到U集合为空,算法完成
4、内部网关路由协议之OSPF协议
1)链路状态(LS)协议
链路状态协议特点:
- 向所有的路由器发送消息。一传十,十传百
- 第一个路由器给临近的所有路由器发送消息,然后下个路由器再给与自己邻近的所有路由器发送消息,这样就给所有路由器发送消息了)。
- 消息描述该路由器与相邻路由器的链路状态
- (包括与相邻路由器的距离、时延、带宽等消息),可以有由网络管理人员决定的,链路状态被称为网络连接的代价。
- 只有链路状态发生变化时,才发送更新的消息
2)OSPF协议的过程
i、概念:
- OSPF(Open Shortest Path First:开放最短路径优先)
- OSPF协议的核心是Dijkstra算法
- OSPF协议是链路状态的协议的实现
- 向所有的路由器发送消息,所以每个路由器都可以获得网络中的所有消息,即网络的完整拓扑,也称为链路状态数据库,并且链路状态数据库是全网一致的,因此每个路由器都可以单独运行Dijkstra算法
- 消息描述该路由器与相邻路由器的链路状态,链路状态指距离、时延、带宽等,相比RIP协议只交换距离信息,OSPF协议更加客观、更加先进
- 只有链路状态发生变化时,才发送更新信息,减少了数据的交换,更快收敛,使整个网络更加通畅。
ii、五种消息类型:
- 问候消息(Hello):很短,用于维护该路由器与相邻路由器的可达性(每个路由器给隔壁路由器发送问候消息,以此确认隔壁路由器是可达的)
- 链路状态数据库描述信息:向隔壁路由器发送自己的链路状态数据库的简短描述消息
- 链路状态请求信息:向隔壁路由器请求隔壁路由器的链路状态数据库信息
- 链路状态更新信息:更新消息会广播在整个网络中,然后所有路由器更新消息
- 链路状态确认消息:对链路更新的确认
iii、OSPF协议完整过程
- 路由器接入网络
- 路由器向邻居发出问候信息
- 与邻居交流链路状态数据库
- 向整个网络广播和更新未知路由
3)RIP协议与OSPF协议的对比
RIP协议 | OSPF协议 |
---|---|
从邻居看网络 | 整个网络的拓扑 |
在路由器之间累加距离 | Dijkstra算法计算最短路径 |
频繁、周期更新、收敛很慢 | 状态变化更新,收敛很快 |
路由间拷贝路由信息 | 路由间传递链路状态,自行计算路径 |
5、外部网关路由协议BGP协议
1)概念
- BGP(Border Gateway Protocol:边际网关协议)
- BGP协议是运行在AS之间的一种协议
- BGP协议能够找到一条到达目的地比较好的路由
BGP发言人 (speaker)
- BGP并不关心内部网络拓扑
- BGP Speaker可以人为配置策略,根据实际情况操控信息交流(可以设置信息交流权限,信息内容等)
- AS之间通过BGP发言人交流信息(BGP发言人位于AS边界)
2)为什么使用BGP协议
- 互联网的规模很大。所以需要的链路状态很多,算法就会很慢,网络通信就会很慢
- AS内部使用不同的路由协议,RIP、OSPF
- AS之间需要考虑除网络以外的一些因素(政治、安全……)