作者:alloyer | 来源:互联网 | 2023-09-11 19:22
网络层协议
- IP:网际协议 Internet Protocol
- ARP:地址解析协议
- ICMP:网际控制报文协议
- IGMP:网际组管理协议
文章目录
- 网络层协议
- IP地址
- 地址解析协议ARP
- IP数据报内容
- IP数据报的分组转发
- 子网划分
- 超网
- 一、无分类编址CIDR
- 二、CIDR分配案例
- 三、最长前缀匹配
- ICMP协议(网际控制报文协议)
IP地址
IP地址是互联网上的每一台主机(或者路由器)的每一个接口分配一个在全世界范围内是唯一的32位识符,4字节
一、IP地址的分类
将IP地址划分为若干个固定类,每一类地址由两个固定长度的字段组成,分别为
- net-id(网络号):标志主机所连接到的网络,整个互联网范围必须唯一
- host-id(主机号):标志主机,在网络号所指的所属网络范围内必须唯一
IP&#61;{,}IP &#61; \{ , \}IP&#61;{<net−id>,<host−id>}
IP地址划分为A,B.C.D.E五类地址&#xff0c;其中A,B,C类地址为单播地址
- A&#xff0c;B&#xff0c;C类地址的网络字段号分别为1&#xff0c;2&#xff0c;3个字节&#xff0c;网络号字段前面有1-3位的类别位&#xff0c;分别为0,10,110
- D类地址前四位为1110&#xff0c;用于多播
- E类地址保留为后用
二、注意&#xff1a;
总结
地址解析协议ARP
一、ARP原理
解决问题&#xff1a;知道了同一个局域网一个机器的IP地址&#xff0c;找出其相应的硬件MAC地址
解决方法&#xff1a;ARP高速缓存&#xff0c;每台主机都设有一个ARP高速缓存&#xff0c;里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表。主机A向B发送数据报时
- 首先查询主机的高速缓存中是否有主机B的IP地址&#xff0c;如果有就查出对应的硬件地址&#xff0c;把硬件地址写入MAC帧中&#xff0c;再通过局域网发送MAC帧
- 如果查不到&#xff1a;
- ARP进程再本局域网上广播发送ARP请求分组&#xff0c;并加入自己的IP和MAC地址
- 本局域网上所有主机ARP进程收到广播
- B收到分组&#xff0c;IP地址和自己的一致&#xff0c;向主机A单播ARP响应分组&#xff0c;告诉IP地址和MAC地址&#xff1b;同时B将主机A的报文信息写入ARP缓存
- A收到B的ARP响应&#xff0c;写入ARP高速缓存
二、ARP使用的情况情况
如图
IP数据报内容
一、首部的字段
- 版本&#xff1a;4位&#xff0c;指IP协议的版本&#xff0c;通信双方使用的版本必须一致&#xff0c;如IPV4&#xff0c;IPV6
- 首部长度&#xff1a; 四位&#xff0c;最高&#xff08;1111&#xff09;标识15&#xff0c;但是对应于32位字即4字节&#xff0c;首部固定长度有20字节&#xff0c;所以最小为5
- 区分服务
- 总长度&#xff1a;首部和数据长度之和&#xff0c;字段总长度为16位&#xff0c;单位为字节&#xff0c;最大位65535字节
- 标识&#xff1a;当IP数据报需要分片的时候&#xff0c;这个标识字段的值会被拷贝到所有数据报文的标识字段中&#xff0c;相同标识字段的值使分片后的各数据报最后能重组为原来的数据报&#xff0c;
与序列号无关
- 标志&#xff0c;占3位&#xff0c;只有前两位有意义&#xff1a;
最低位 MF &#61; 1&#xff1a;标识后面还有分片
中间位 DF &#61; 1&#xff1a;不允许分片
&#xff1b;为 0允许分片
- 片偏移&#xff1a;分组之后&#xff0c;某片在原分组中的相对位置&#xff0c;是相对于用户数据的起点&#xff0c;该片&#xff08;的起点&#xff09;从何开始。片偏移以8个字节为单位,
所以分片长度一定是8字节&#xff08;64位的整数倍&#xff09;
- 生存时间&#xff1a;TTL&#xff0c;又叫跳数&#xff0c;指数据报在互联网中至多可以经过多少个路由器&#xff0c;每次转发这个值减一&#xff1b;8位&#xff0c;最多255&#xff1b;
若初始值设为1&#xff0c;则只能在本局域网传送
- 协议&#xff1a;占8位&#xff0c;指出此数据报携带的数据使用的是何种协议&#xff0c;以便目的主机的IP层知道应该将数据部分上交给哪个协议进行处理
- 首部检验和&#xff1a;只检验首部数据
- 可变部分&#xff1a;为了增加IP数据报的功能&#xff0c;一般不用
IP数据报的分组转发
一、路由表
当需要在互联网中转发数据报时&#xff0c;我们可以通过IP数据包首部确认目的IP地址和发送的源地址&#xff0c;但是问题需要知道达到这个网络需要的经过的路径&#xff0c;或者说经过哪些路由器进行转发&#xff0c;这个时候路由表的作用就体现出来了。路由表存储的主要信息就是(目的网络地址&#xff0c;下一跳地址)(目的网络地址&#xff0c;下一跳地址)(目的网络地址&#xff0c;下一跳地址)
二、默认路由
当对应的网络找不到路由表中的下一跳路由时&#xff0c;使用默认路由完成&#xff0c;路由表中默认路由标为0.0.0.0
三、转发流程
我们可以通过目的网络地址确定下一跳的路由器的IP地址&#xff0c;而当前路由器处于目的网络时&#xff0c;便可以交付给目的主机&#xff0c;整个流程总结如下&#xff1a;
- 从数据报首部提取目的主机IP地址D&#xff0c;得出目的网络地址N
- 若N直接和路由器相连&#xff0c;则进行直接交付&#xff08;通过ARP协议找到MAC地址&#xff0c;把数据报封装为以太网帧&#xff0c;利用链路层进行转发&#xff09;&#xff1b;否则执行3
- 若路由表中有目的地址为D的特定主机路由&#xff0c;则把数据报传送给路由表中指明的下一跳路由器&#xff0c;否则执行4
- 若路由表中有到达网络N的路由&#xff0c;则把数据报传送给路由表中指明的下一跳路由器
- 若路由表中有默认路由&#xff0c;则交给默认路由器&#xff0c;否则执行6
- 报告转发错误
路由表只是指明下一个路由器的IP地址&#xff0c;并没有完整的路径&#xff0c;所以转发过程需要逐层查找执行&#xff1b;同时转发给下一个路由器实际上也需要用到以太网协议&#xff0c;即需要知道目的路由器的MAC地址&#xff0c;这个也是通过ARP协议实现的
子网划分
一、基本思路
- 把一个IP地址下面划分为多个子网&#xff0c;外部网络看不见这个网络由多少个子网组成&#xff0c;对外表现依然为一个网络
- 二级IP地址为<net−ID,host−ID>三级IP地址为<net−ID,subnet−ID,host−ID>
- 其它网络发完本单位某台主机的IP数据报&#xff0c;仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。路由器收到IP数据报后&#xff0c;按目的网络号和子网号找到目的子网&#xff0c;把IP数据报交付给目的主机
二、子网掩码
用于解决到达路由器后&#xff0c;路由器如何把它转发到子网上的问题。
子网掩码组成为连续的1&#xff08;网络号有多少位就有多少个1&#xff09;&#xff0c;连续的0&#xff08;主机号&#xff09;&#xff1b;不划分子网的网络也需要子网掩码&#xff0c;通过子网掩码和IP地址进行与运算可以不用查找地址类别就知道是哪一类的IP地址
- A类地址的默认子网掩码为255.0.0.0&#xff0c; 或0xFF000000
- B类地址的默认子网掩码为255.255.0.0, 或0xFFFF0000
- C类地址的默认子网掩码为255.255.255.0&#xff0c;或0xFFFFFF00
以下图为例&#xff0c;分析子网掩码和子网数的关系
- 网络号不能全为0或1&#xff0c;所以当子网数为二的时候&#xff0c;需要2位子网号的位数
01&#xff0c;10来标识子网&#xff0c;对应子网掩码为0xFFFFC000 - 网络号不能全为0或1,子网数位w和子网号的位数n的关系是w&#61;2n−2w&#61;2^n-2w&#61;2n−2
可以发现&#xff0c;子网号划分的位数越多&#xff0c;对应的子网所能连接的主机数目越少&#xff0c;反之则主机数越多
三、使用子网时的分组转发
流程如下&#xff1a;
- 首先从收到的数据报的首部提取目的IP地址D
- 判断是否为直接交付。对路由器相连的网络进行逐个检查&#xff1b;用各网络的子网掩码和D进行按位与&#xff0c;看是否与相应的网络地址相匹配。若匹配&#xff0c;则分组直接交付&#xff0c;转发任务结束&#xff0c;否则为间接交付&#xff0c;转3
- 路由表中有目的地址为D的特定主机路由&#xff0c;则把数据报传送给路由表中所指明的下一跳路由器&#xff0c;否则转4
- 对路由表中的每一行&#xff08;目的网络地址&#xff0c;子网掩码&#xff0c;下一跳地址&#xff09;&#xff0c;用子网掩码和D按位与&#xff0c;结果为N&#xff0c;若D和目的网络地址匹配&#xff0c;则把数据报传送给该行指明的下一跳路由器&#xff0c;否则执行5
- 有默认路由则传送给默认路由器&#xff0c;否则执行6
- 报告转发分组出错
超网
一、无分类编址CIDR
- CIDR消除了传统的A、B、C类地址划分和子网划分的概念&#xff1b;CIDR把32位IP地址划分为前后两个部分&#xff0c;分别为网络前缀和主机号 ,
CIDR使得IP地址从三级编址又回到了两级编址
&#xff0c;但这是无分类的两级编址&#xff0c;记为&#xff1a;{,}\{, \}{<net−prefix>,<host−id>}
20是网络前缀的位数
- 网络前缀相同的连续IP地址组成一个CIDR块&#xff0c;知道一个块中的任何一个地址&#xff0c;就可以知道这个地址块的起始地址和最大地址&#xff1b;用地址掩码来标识CIDR块&#xff0c;将地址掩码和IP按位与就可以得到CIDR块号
- 路由表中利用CIDR来查找目的网络&#xff0c;这种地址的聚合叫做路由聚合
和IP划分位A&#xff0c;B&#xff0c;C类最大的区别在于&#xff0c;划分位ABC类的操作&#xff0c;实际上依然是通过子网掩码&#xff0c;划分出一个一个网络和子网进行管理&#xff0c;CIDR就直接一步到位&#xff0c;你IP的前缀相同&#xff0c;后面不管你是ABC类地址&#xff0c;我都不进行划分&#xff0c;都把你当成一个块进行管理&#xff0c;里面可能有很多个地址&#xff0c;我们转发都当成一个相同的大类进行处理
二、CIDR分配案例
某ISP有地址块206.0.64.0/18&#xff0c;相当于在前十位固定的情况下&#xff0c;拥有后14位的分配资格&#xff0c;当一个大学需要申请800个IP地址&#xff0c;该ISP可以给该大学分配206.0.68.0/22&#xff0c;即1K个IP地址&#xff0c;在各系下有可以进一步划分这个IP地址。
对比不应用CIDR的情况&#xff0c;如果没有使用CIDR技术&#xff0c;则该ISP相当于拥有64个C类地址&#xff0c;则所有需要转发给该ISP的路由器都不得不含有64个项目&#xff0c;当使用路由聚合后&#xff0c;只需要通过206.0.64.0/18就可以唯一确定该ISP&#xff1b;同理&#xff0c;该大学有四个系&#xff0c;每个系对应若干个C类地址&#xff0c;如果要进行转发&#xff08;不使用CIDR&#xff09;&#xff0c;同样会面对路由器中项目过多的问题&#xff0c;用CIDR路由聚合可以解决这个问题
三、最长前缀匹配
针对路由表中&#xff0c;使用CIDR进行路由聚合的路由块&#xff0c;有时会出现多个表项均满足转发标准&#xff0c;这个时候需要选择前缀最长&#xff08;即主机最少&#xff0c;网络最具体&#xff09;的表项进行操作。例如&#xff0c;设D&#61;206.0.71.130&#xff0c; 在ISP的路由表中&#xff0c;有大学&#61;206.0.68.0/22和四系&#61;206.0.71.128/25&#xff0c;当ISP收到数据报&#xff0c;且目的IP地址为D时&#xff0c;有
在这种均匹配的情况下&#xff0c;选择前缀最长的表项&#xff0c;转发给对应路由器&#xff08;路由器管理多个块&#xff09;
ICMP协议&#xff08;网际控制报文协议&#xff09;
重新开一个文章&#xff0c;太长了