
虚拟互联网络
实际的计算机网络错综复杂
物理设备通过使用IP协议,屏蔽了物理网络之间的差异
当网络中的主机使用IP协议连接时,无需关注网络细节
IP协议使得复杂的实际网络变成一个虚拟互联的网络
IP协议使得网络层可以屏蔽底层细节而专注网络层的数据转发
IP协议解决了在虚拟网络中数据传输路径的问题
IP协议🌟
IP地址:长度为32位,常分成4个8位,使用点分十进制表示(0~255.0~255.0~255.0~255)
MAC地址与IP地址的区别
数据链路层和网络层
长度:48bits和32bits,十六进制和点分十进制
MAC地址是每台设备独有的,设备的移动不会发生变化;IP地址受网络环境影响,是可变的
每进行一跳MAC地址都在变化,IP数据报的IP地址始终不变(文章最后面的例子理解)
IP数据报

IP协议头部至少有20字节长度
版本:占4位,有IPv4和IPv6两种
首部长度:占4位,最大数值为15,单位是4字节,即IP首部最长为60字节
总长度:占16位,最大数值为65535,如果超过MTU,数据链路层会分为帧(13位片偏移)
TTL:占8位,表明IP数据报文在网络中的寿命,每经过一个设备,TTL--,当TTL = 0时,网络设备必须丢弃该报文。用于避免IP数据报在网络中无限传输
协议:占8位,表明IP数据所携带的具体数据是什么协议(TCP、UDP等)
首部校验和:占16位,校验IP首部是否出错
源IP和目的IP
IP协议的转发流程🌟
路由表
表项为目的IP地址和下一跳IP地址
转发流程

上图结合数据链路层
A查询路由表,目的地为C的下一跳是E
A将IP数据报交给数据链路层,并告知目的MAC地址是E
数据链路层封装成帧(源MAC和目的MAC地址)
数据链路层通过物理层将帧发送给E
E的数据链路层收到数据帧,将帧的数据交给网络层
网络层解析出目的IP,查询路由表,得到下一跳为F
E将IP数据报交给数据链路层,告知目的MAC地址为F
数据链路层封装成帧,通过物理层发送给F
F的数据链路层收到数据帧,将帧的数据交给网络层
网络层解析出目的IP,查询路由表,得到下一跳为C
F将IP数据报交给数据链路层,告知目的MAC地址为C
数据链路层封装成帧,通过物理层发送给C
每进行一跳MAC地址都在变化,IP数据报的IP地址始终不变
ARP协议与RARP协议🌟
ARP地址解析协议:将网络层IP地址转化为数据链路层MAC地址
ARP缓存表:表项为IP地址和对应的MAC地址
将网络层的IP数据报交给数据链路层的时候,需要告知下一跳IP对应的MAC地址,主机需要给路由器发送ARP请求,路由器查询ARP缓存表后发送回一个ARP应答。如果ARP缓存表中有下一跳IP到MAC地址映射的表项,就直接告知
如果ARP缓存表中没有相应的表项,就由路由器广播IP地址,收到广播的设备检查是否为自己的IP地址,是的话就做出回应,路由器收到回应后将地址记录
ARP缓存表中的记录并非永久有效(设备移动)
命令行中输入arp -a查询ARP缓存表
ARP请求/应答帧格式

RARP逆地址解析协议
ARP和RARP的操作对程序员透明
IP地址的子网划分🌟
分类的IP地址

特殊的主机号
主机号全为0表示当前网络段,不可分配为特定主机
主机号全为1表示广播地址,向当前网络段所有主机发消息
特殊的网络号
A类地址00000000:0表示特殊网络
A类地址01111111:127表示回环地址
B类地址10000000.00000000:128.0
C类地址192.0.0不可用
回环地址127.0.0.1,通常被称为本地回环地址,不属于任何一个类别地址类,代表设备的本地虚拟接口
安装网卡前ping 127.0.0.1

子网划分:借用主机号的最左边几位作为子网号,划分出多个子网,剩下的保留为主机号
子网掩码:用来指明IP地址的哪些位是网络号,哪些位是主机号,由连续的1和连续的0组成
通过子网掩码和IP地址的与运算可以快速得到IP地址的网络号

无分类编址CIDR🌟
没有ABC类网络号、子网划分的概念
将IP地址分为网络前缀和主机号,网络前缀是任意位数的,通常使用斜线记法


网络地址转换NAT技术
一个家庭只有一个IP地址,如何将家庭中的各个设备都连接上互联网?
内网地址:内部机构使用,避免与外网地址重复
外网地址:全球唯一的,全球范围使用
内网地址分类

内网多个设备使用同一个外网IP请求外网的服务,外部怎么知道具体是哪个设备在请求?NAT技术
NAT(Network Address Translation)
用于多个主机通过一个公有IP访问互联网的私有网络
在本地的路由器进行,通过查询NAT表
端口号能确定内网中的进程
对于发送出的,将内网地址和端口号转化成公网地址和端口号
对于接受的,将公网地址和端口号转化成内网地址和端口号
减缓了IP地址的消耗
ICMP协议🌟
网络控制报文协议:报告错误信息或者异常情况


差错报告报文
网络不可达:IP主机号全为零的表示一个网络,整个网络不可达
主机不可达:主机关闭等情况

询问报文

ping应用:使用ICMP询问报文
检查错误
ping 127.0.0.1
ping 网关地址
ping 远端地址(e.g. www.baidu.com)
traceroute应用:探测IP数据报在网络中走过的路径
TTL:占8位,表明IP数据报文在网络中的寿命,每经过一个设备,TTL--,TTL = 0时网络设备必须丢弃报文,此时会发出一个ICMP终点不可达差错报文
先发送一个TTL为1的报文,收到一个不可达报文,记录下IP
在发送一个TTL为2的报文,收到一个不可达报文,记录下IP
……
直到刚好发送到目的端,过程中记录的IP就是走过的路径
traceroute github.com
网络层路由概述
自治系统AS:处于一个管理机构下的网络设备群,内部网络自行管理,对外提供一个或多个出入口
自治系统内部路由的协议:内部网关协议(RIP、OSPF)
自治系统外部路由的协议:外部网关协议(BGP)
内部网关协议之RIP协议🌟
距离矢量DV算法
每一个节点使用两个向量
每一个节点与相邻的节点交换向量信息,更新向量

RIP协议过程:使用DV算法
将网络跳数作为DV算法距离
每隔三十秒交换一次路由信息
默认跳数>15的路由为不可达路由
对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
检索本地路由,将信息中新的路由插入到路由表中
检索本地路由,对于下一跳为X的,更改为修改后的信息
检索本地路由,对比相同目的地距离,如果新信息距离更小,更新本地路由表
如果三分钟没收到相邻的路由信息,将相邻路由设置为不可达(16跳)
优点:实现简单,开销很小
缺点:故障信息传递慢,原因是完全相信相邻节点信息,视野不够,更新收敛时间过长

内部网关协议之OSPF协议🌟
狄杰斯特拉算法:最短路径问题,贪心
- 初始化两个集合,S只有初始点A,U为其他点集合
- while(U不为空),对U集合顶点进行距离排序,取出距离A最近的一个顶点D,将D加入S集合,更新通过D到达U集合所有点的距离(如果距离更小就替换)
链路状态协议LS协议
向所有的路由器发送消息,一传十十传百(RIP只和相邻路由发送消息)
消息描述该路由器与相邻路由器的链路状态(距离、时延、带宽……),网络管理人员可以介入,又称为网络连接的代价(RIP只交换跳数信息)
只有链路状态发生变化时,才发送更新消息(RIP每30秒发送信息)
OSPF协议:开放最短路径优先,核心是狄杰斯特拉算法
- 向所有路由器发送消息
能够获得网络中的所有信息,得到网络的完整拓扑
也称为“链路状态数据库”
链路状态数据库是全网一致的
可以利用链路状态数据库进行Dijkstra最短路径算法 - 消息描述该路由器与相邻路由器的链路状态
包括距离时延带宽等信息,比RIP协议更加客观先进(只使用跳数) - 只有链路状态发生变化时,才发送更新信息
减少了数据交换,更快收敛
OSPF协议的五种消息类型
- 问候消息(Hello):消息长度短,用于维护路由器和相邻路由器的可达信息
- 链路状态数据库描述信息:向相邻路由器发送自己的链路状态数据库所有链路状态的简单描述消息
- 链路状态请求信息:向相邻路由器请求链路状态数据库
- 链路状态更新信息:会广播到整个网络,非常频繁
- 链路状态确认信息:对链路更新的确认
OSPF的过程
- 路由器接入网络
- 路由器向相邻路由器发出问候信息确认可达性,可达就继续
- 与相邻路由器交流链路状态数据库,对不同的链路状态进行同步,以此达到一致状态
- 广播和更新未知路由
RIP和OSPF的对比🌟
- RIP中路由器只能通过相邻路由器看网络,只能看到相邻路由器的网络状态;OSPF中每个路由器可以得到整个网络的拓扑
- RIP中的距离直接累加跳数作为距离;OSPF使用狄杰斯特拉算法计算最短路径,路径中包括一些链路状态的信息,比如带宽、时延等
- RIP频繁更新,每隔30s更新一次,收敛很慢;OSPF只在网络状态发生变化时更新,每次更新会广播到整个网络,收敛更快
- RIP只在路由器之间拷贝路由信息;OSPF会接收整个网络拓扑,自行计算路径
外部网关路由协议之BGP协议
BGP:边际网关协议,运行在自治系统之间的一种协议
找到一条到达目的地的比较好的路由(不是最好)
原因
- 互联网规模太大,让路由器保存所有链路状态信息进行狄杰斯特拉算法计算路径不现实
- 各个自治系统内部可能使用不同的路由协议,有的使用RIP,有的使用OSPF,无法直接通信
- AS之间需要考虑网络特性以外的一些因素(政治、安全)
BGP发言人(speaker)
BGP并不关心内部网络拓扑
AS之间通过BGP发言人交流信息
BGP发言人可以人为配置策略
