目录
本篇博客结构:
来回忆一下网络层所处的位置吧:
网络层主要解决的问题是一个计算机是怎么传输数据到另一个计算机的。
IP协议详解
虚拟互联网络
实际的计算机网络硬件是错综复杂的。
物理设备通过使用IP协议,屏蔽了物理网络之间的差异。
当网络中的主机使用IP协议连接时,则无需关注网络细节。
我们不需要关注具体的连接信息,只需要看成虚拟的互联网络就好了。
IP协议使得复杂的实际网络变为一个虚拟互连的网络。
IP协议使得网络层可以屏蔽底层细节而专注网络层的数据转发。
IP协议解决了在虚拟网络中数据报传输路径的问题 。
IP协议
IP地址
MAC地址唯一且不可改变,网络层的IP地址是可以改变的,受网络环境影响。
IP地址长度为32位,常分成4个8位。
IP地址常使用点分十进制来表示(0~255.0~255.0~255.0~255)。
IP首部
版本:占4位,指的是IP协议的版本,通信双方的版本必须一致,当前主流版本是4,即IPv4,也有IPv6。
首部位长度:占4位,最大数值为15,表示的是IP首部长度单位是"32位字"(4个字节),也即是IP首部最大长度为60字节。
总长度:占16位,最大数值为65535,表示的是IP数据报总长度(IP首部+IP数据)。
TTL:占8位,表明IP数据报文在网络中的寿命,每经过一个设备,TTL减1,当TTL=0时网络设备必须丢弃该报文。避免数据在网络中无限传输。
协议:占8位,表明IP数据所携带的具体数据是什么协议的(如:TCP、UDP等)。
首部校验和:占16位,校验IP首部是否有出错。
IP协议的转发流程
逐跳(hop-by-hop):计算机A发送的数据是一跳一跳传输到计算机B的。
路由表的简介
和逐跳有关,到了某个目的的IP地址就会根据路由表找到下一跳的IP地址。
计算机或者路由器都拥有路由表。
IP协议的转发流程
仅从网络层的层次去看转发的过程:
将网络层和数据链路层结合起来来看转发的过程:
A发出目的地为C的IP数据报,查询路由表发现下一跳为E。
A将IP数据报交给数据链路层,并告知目的MAC地址是E。
数据链路层填充源MAC地址A和目的MAC地址E。
数据链路层通过物理层将数据发送给E。
E的数据链路层接收到数据帧,把帧数据交给网络层。
E查询路由表,发现下一跳为F。
E把数据报交给数据链路层,并告知目的MAC地址为F。
E的数据链路层封装数据帧并发送。
F的数据链路层接收到数据帧,把帧数据交给网络层。
F查询路由表,发现下一跳为C。
F把数据报交给数据链路层,并告知目的MAC地址为C。
F的数据链路层封装数据帧并发送。
注意:
数据帧每一跳的MAC地址都在变化 。
IP数据报每一跳的IP地址始终不变 。
ARP协议与RARP协议
ARP
ARP(Address Resolution Protocol)地址解析协议。
ARP缓存表:
ARP缓存表使用的两种情况:
ARP缓存表缓存有IP地址和MAC地址的映射关系。(直接发送)
ARP缓存表没有缓存IP地址和MAC地址的映射关系。(广播获取)
ARP缓存表是ARP协议和RARP协议运行的关键。
ARP缓存表缓存了IP地址到硬件地址之间的映射关系。
ARP缓存表中的记录并不是永久有效的,有一定的期限。(跟着IP地址的变动而变动)
通过ARP -a 查看ARP缓存表:
ARP协议是直接封装到数据链路层的数据帧里:
ARP协议使用了IP地址,所以属于网络层,其实它是网络层和数据链路层配合使用的结果。
RARP
RARP(Reverse Address Resolution Protocol)逆地址解析协议。
与ARP协议类似的对比:
学习了ARP协议我们可以对上文的IP协议的转发流程进行补充的一点是:先查询ARP缓存表才能告知目的MAC地址 。
(R)ARP协议是TCP/IP协议栈里面基础的协议。
ARP和RARP的操作对程序员是透明的,我们不需要使用具体的协议。
理解(R)ARP协议有助于理解网络分层的细节。
IP地址的子网划分
分类的IP地址
特殊的主机号需要排除掉:
主机号全0表示当前网络段,不可分配为特定主机。
主机号为全1表示广播地址,向当前网络段所有主机发消息 。
特殊的网络号需要排除掉:
A类地址网络段全0(00000000)表示特殊网络。
A类地址网络段后7位全1(01111111:127)表示回环地址。
B类地址网络段(10000000.00000000:128.0)是不可使用的。
C类地址网络段(192.0.0)是不可使用的。
划分子网
划分子网可以减少IP的浪费。
子网掩码:可以快速判断某个IP属于哪个子网。
子网掩码和IP地址一样,都是32位。
子网掩码由连续的1和连续的0组成。
某一个子网的子网掩码具备网络号位数个连续的1。
分类的A、B、C类地址的子网掩码。
C类地址的子网掩码点分十进制是255.255.255.128。
怎么通过子网掩码快速算出子网号:
把IP地址和子网掩码的二进制标识出来后进行与运算。
把结果换回点分十进制,就得到了这个IP的子网号。
无分类编址CIDR
CIDR中没有A、B、C类网络号、和子网划分的概念。
CIDR将网络前缀相同的IP地址称为一个"CIDR地址块"。
网络前缀是任意位数的。
斜线记法
比如193.10.10.129/25就代表网络前缀有25位,主机号有7位。
比原来的子网划分更加灵活。
网络地址转换NAT技术
IP地址:分为内网地址和外网地址。
内网地址:内部机构使用;避免与外网地址重复。
外网地址:全球范围使用;全球公网唯一。
三类内网地址:
10.0.0.0~10.255.255.255(支持千万数量级设备)。
172.16.0.0~172.31.255.255(支持百万数量级设备)。
192.168.0.0~192.168.255.255(支持万数量级设备)。
内网多个设备使用同一个外网IP请求外网的服务,外部怎么知道具体是哪个设备在请求的?这就引出了我们要介绍的内容了。
网络地址转换NAT(Network Address Translation)。
NAT技术用于多个主机通过一个公有IP访问互联网的私有网络中。
NAT减缓了IP地址的消耗,但是增加了网络通信的复杂度。
将外网地址和端口号与内网地址和端口号相互映射。
ICMP协议详解
网际控制报文协议(Internet Control Message Protocol)。
ICMP协议可以报告网络中传输的错误信息或者异常情况 。
ICMP报文的首部
ICMP报文的种类
差错报告报文
询问报文
ICMP协议的应用
Ping应用
Ping主要是使用ICMP的询问报文。
我们Ping了一下百度,32字节是ping命令封装的IP数据一共有32字节。
时间是请求到应答的时间。
TTL是指这个报文还剩下的寿命,还有多少跳。
Ping进行网络排查故障过程:
Ping回环地址127.0.0.1:不通------计算机协议栈出现问题;通:下一步。
Ping网关地址:不通------wifi/网线有问题;通------本机到路由器通路是好的,下一步。
Ping远端地址:不通------家到ISP是故障的。
Traceroute应用
Traceroute可以探测IP数据报在网络中走过的路径。
巧妙利用TTL和ICMP终点不可达报文。
计算机A发送TTL为1的报文,到了中型网络发现TTL减为0,中型网络发送ICMP终点不可达报文给计算机A,A就可以收集到其IP信息并记录,然后计算机A发送TTL为2的报文收集大型网络的...如此循环直到达到计算机B。
终端实例:
网络层的路由概述
路由表
下一跳地址是怎么来的?下一跳地址是唯一的吗?下一跳地址是最佳的吗?路由器怎么多,他们是怎么协同工作的? 我们需要一个路由算法来解决这些问题。
自治系统
一个自治系统(AS)是处于一个管理机构下的网络设备群。
AS内部网络自行管理,AS对外提供一个或者多个出(入)口。
自治系统内部 路由的协议称为:内部网关协议(RIP、OSPF)
自治系统外部路由的协议称为:外部网关协议(BGP)
内部网关协议之RIP协议
距离矢量(DV)算法
每一个节点使用两个向量Di和Si。
Di描述的是当前节点到别的节点的距离。
Si描述的是当前节点到别的节点的下一节点。
算法运行过程:
每一个节点与相邻的节点交换向量Di和Si的信息。
每一个节点根据交换的信息更新自己的节点信息。
每一个节点与相邻的节点交换向量Di和Si的信息。
每一个节点根据交换的信息更新自己的节点信息。
RIP协议的过程
RIP(Routing Information Protocol)协议。
RIP协议是使用DV算法的一种路由协议。
RIP协议把网络的跳数(hop)作为DV算法的距离。
RIP协议每隔30s交换一次路由信息。
RIP协议认为跳数>15的路由则为不可达路由。
具体过程:
1.路由器初始化路由信息(两个向量Di和Si)
2.对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
i.检索本地路由,将信息中新的路由插入到路由表里面
ii.检索本地路由,对于下一跳为X的,更新为修改后的信息
iii. 检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
3.如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)
RIP协议的优缺点
RIP协议:实现简单,开销很小。
RIP协议:限制了网络的规模。
RIP协议:"坏消息传的慢",更新收敛时间过长。
内部网关路由协议之OSPF协议
链路状态(LS)协议
向所有的路由器发送消息,只和相邻的路由器交换信息。
消息描述该路由器与相邻路由器的链路状态(距离、时延、带宽)。
可以由网络管理人员决定的。
只有链路状态发生变化时,才发送更新消息。
OSPF协议
OSPF(Open Shortest Path First:开放最短路径优先)。
OSPF协议的核心是Dijkstra算法。
OSPF协议实现了LS协议的规则。
五种消息类型
问候消息(Hello)
链路状态数据库描述信息
链路状态请求信息
链路状态更新消息
链路状态确认消息
OSPF协议的过程
RIP协议与OSPF协议的对比
外部网关路由协议之BGP协议
BGP(Border Gateway Protocol: 边际网关协议)。
BGP协议是运行在AS之间的一种协议。
BGP协议能够找到一条到达目的地的比较好的路由。