网络层应该提供什么样的服务呢?有两种观点,一种观点借助电信网的成功经验,由网络负责可靠交付,两端设备功能则可以很简单,通信前先建立虚电路保证双方通信所需要的一切访问资源,再使用可靠的网络协议就可以使所发送的分组无差错、按需到达终点,不丢失,不重复。另一种观点是网络层只向上提供简单灵活的,尽最大努力交付的数据包服务,路由器功能比较简单,价格低廉,每个分组都独立发送,与其前后的分组无关,传送的分组可能丢失、出错、重复和失去,也不保证分组传送的时限,如果出错则由传输层负责。
网际协议IP是TCP/IP协议中最重要的协议之一,与IP协议配套使用的还有4个协议,地址解析协议ARP,网际控制报文协议ICMP,网际组管理协议IGMP和反向地址解析协议RARP,其中RARP用到的很少。
整个TCP/IP协议族呈现沙漏计时器形状,有Everything over IP和 IP over Everything的说法
在IP协议中IP地址是一个十分重要的概念。
IP地址就是给每个互联网网络设备分配一个唯一的32位的标识符,由互联网名字和数字分配机构进行分配。
IP地址经过了三个阶段:
每类地址严格意义上是ABC三类,都有两个固定长度的字段组成,第一个字段是网络号,它标志主机所连接到的网络,另一个字段则是主机号,它标志该主机。网络号和主机号共32位,主机号在高网络范围内是唯一的。
IP地址共分为ABCDE五类
32位二进制的IP地址不容易记忆,为此我们采用点分十进制记法,每8位一组转换为对应的十进制,十进制数之间加点,提高可读性。
根据IP地址的定义我们可以计算出ABC类地址的网络数以及每个网络中的最大主机数。
A类地址最大的可指派网络数为27-2,-2的原因是除去0以及回环地址127,去头去尾,每个网络中的最大主机数为224 -2,减2的原因是全0的主机号表示网络号,全1的主机号表示该网络的广播号
B类地址中最大的网络数为214 ,每个网络中最大的主机数为216 -2,减2原因同上。
C类地址中最大网络数为221 ,每个网络中的最大主机数为28 -2,减2原因同上。
我们可以看出ABC类每个网络的最大主机数过多,因此就出现了后续的子网划分。
分辨ABC类地址:看第一个十进制数,1-126为A类地址,128-191为B类地址,192-223则为C类地址。
有些特殊的IP地址不分配给设备。
ARP协议能够根据IP地址(网络层)解析出MAC地址(数据链路层)。
网络层及以上使用IP地址,链路层及以下使用MAC地址(硬件地址)
IP地址放在IP数据包的首部,而硬件地址则放在MAC帧的首部。
主机H1和H2通信,中间经过两台路由器R1和R2,在整个通信过程中IP地址以及MAC地址如表所示
源IP地址和目的IP地址一直不变,源MAC地址和目的MAC地址一直发生变化,MAC地址是怎么得到的呢?这就要用到ARP协议
地址解析协议ARP:根据IP地址,解析出在数据链路层使用的MAC地址,因此ARP位于IP协议的下面
当主机A想要向本局域网上的某个主机B发送IP数据包时,就先在其ARP缓存中查看有无主机B的IP地址。有就将此MAC地址写入帧,将该帧发往此MAC地址,没有就广播发送一个ARP请求分组,收到ARP相应分组后,将映射写入ARP高速缓存,并将MAC地址写入帧,将此帧发往MAC地址。
ARP请求分组(广播方式发送)包括:
路由器不转发ARP广播,也就是说ARP只解析在同网段上设备的MAC地址,如果目标地址与发送地址不在同一个网段,发送方收到的将是该网段路由器的MAC地址。
ARP响应分组(单播方式发送)包括:
ARP高速缓存表
ARP注意事项
为什么不直接使用MAC地址进行通信?
RARP:实现MAC地址到IP地址的转换,除了网上的无盘工作站,通常很少使用,必须设置一个RARP服务器。网管事先将映射关系写入RARP服务器的数据库中,与ARP相同,RARP请求包采用广播方式,响应包采用单播方式。
pc机发送ARP响应时,不需要先收到ARP请求报文,任何一台计算机都可以在局域网上发送自己是IP_A和MAC_A的对应者,因此就出现了ARP攻击。
ARP攻击:
数据帧包含帧首,数据和帧尾,一个IP数据报由首部和数据两部分组成,没有尾,发送时先发送首部,再发送数据。
首部包括固定部分和可选字段,固定部分的长度为20字节,是所有IP数据包必有的,固定部分的后面是一些可选字段,1-40字节,长度可变,但必须为4字节的整数位,所有可能有填充部分。
首部的第一个字段是版本号,占4位,指IP协议的版本,目前版本号为4(IPV4)
第二个字段为首部长度,占4位,可表示的最大数值是15(单位是4字节),因此首部长度的最大值是60字节。
区分服务占8位,用来获得更好的服务。只有在使用区分服务时,这个字段才起作用,一般情况下不使用这个字段。
总长度占16位,指首部和数据长度之和,单位为字节,最大长度为65535字节,但是不能超过MTU,否则要分片。
标识占16位,是一个计数器,用来产生IP数据包的标识。
标志占3位,只有前两位由意义。最低位是MF,取值为1表示后面”还有分片“,取值为0表示最后一个分片,中间位是DF,只有DF取0才允许分片
片偏移占13位,指出较长的分组在分片后某片在原分组中的相对位置,以8个字节为单位。
生存时间占8位,记为TTL,指示数据报在网络中可通过的路由器数的最大值即最大多少跳。假设初始TTL为3,经过一个路由器就会被减1,当TTL为0时这个IP数据报就会被Internet处理掉。
协议占8位,指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给对应的处理过程。
IP数据包可以封装多种协议PDU,可以是网络层的ICMP,IGMP以及OSPF,也可以是传输层的TCP和UDP,根据协议号进行区分。
首部检验和占16位,只检验数据包的首部,不检验数据部分,不采用CRC而采用简单的计算方法。
源地址和目的地址都是IP地址,各占4字节
IP首部的可变部分是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富,取决于所选择的项目。多个选项拼接,中间无需分隔符,用全0的填充段补齐为4字节的整数倍。增加首部的可变部分是为了增加IP数据报的功能,增加了路由器处理数据包的开销,实际上这些选项很少被使用。
网际控制协议ICMP可以报告IP数据包传输过程中的差错。
为了更高效地转发IP数据包,提高交付成功的机会,在网际层使用了ICMP,是互联网的标准协议,允许主机或路由器报告差错情况和提供有关异常情况的报告。
ICMP报文封装在IP数据报中,但它并不是高层协议,与IP协议都位于网络层。
ICMP报文的格式:
ICMP报文的种类
当路由器收到TTL为0的报文时,丢弃此报文,并向原点发送超时报文。
参数问题:收到的数据包首段中的数据出现错误,弃此报文,并向原点发送参数问题报文。
路由发送改变路由报文给源点主机,让主机知道下次应该发送报文给另外的路由器。
并不是所有的出错报文都通知到源点,对于以下几种情况就不再发送
ICMP的应用
分组网间探测Ping
用来测试两台主机或者路由器之间的连通性。
基于ICMP询问报文中的回送请求和回送应答报文。
是应用层直接使用网络层ICMP的例子,没有通过传输层。
测试本机与新浪邮件服务的连通性,所有参数都采用默认值
ICMP与IP协议的关系
192.168.1.10发送请求给192.168.1.20,因为请求报文中无任何实际有意义的数据,通常用abcd等填充,假定标识符为0200,序号为0100,类型值为08,代码为00,校验码为十六进制的4a5c,这些构成ICMP报文,作为IP报文的数据
IP报文中的协议字段取值为01,表示封装的数据为ICMP报文,源地址为192.168.1.10对应的十六进制c0a8010a,目标IP地址为192.168.1.20对应的十六进制c0a80114。
192.168.1.10向192.168.1.20发送应答报文,报文内容与请求报文基本一致,类型值修改为00,校验值也发生了变化
IP报文中的目标地址与源地址互换。
Traceroute/Tracert(追踪从源点到终点的路由)
在Windows中该命令是tracert,UNIX或路由器中为raceroute。利用IP数据包中的TTL字段和ICMP超时差错报告报文,源点发送的第一个UDP报文TTL值为1,到达第一台路由后将其减1,减为0后第一台路由器将此报文丢弃,并向源点发送超时报告报文,这样就得到了第一台路由器的地址,这样一直继续下去得到剩下所有路由器的地址,当最后一个数据包到达目的主机时,数据报的TTL的为1,主机不转发数据报,也不把TTL减一。但是由于IP数据包中封装的是无法正常交付的UDP数据报,使用了非法的端口号,主机须向源主机发送ICMP终点不可达差错报文,我们就得到了目的主机的IP地址,于是我们就得到了从源点到终点的路径。
tracert[-d]traget_name:不解析目标主机的名称
tracert[-h]traget_name:指定搜索到目标地址的最大跳数,默认30
tracert[-j]traget_name:与主机列表一起的松散源路由
tracert[-w]traget_name:指定超时时间间隔,默认单位是毫秒,默认5秒
划分子网的基本思路:从主机号的高位中连续借用若干个子位作为子网号,而主机号也就相应减少了若干个位,这样IP地址就从两级变成了三级。
从主机中借用几位来划分子网呢?我们使用子网掩码来作为标识。
子网掩码是一个非常重要的概念,网络号和子网号对应的部分取1,主机号对应的部分取0
(IP地址)AND(子网掩码)=网络地址
子网掩码中掩的作用是把主机号掩掉。
默认子网掩码
如果ABC类地址没有划分,我们就称为默认子网掩码。
A类默认:8个1和24个0
B类默认:16个1和16个0
C类默认:24个1和8个0
子网划分方法
固定长度子网
所有子网的子网掩码都是相同的
B类地址的子网划分
子网号的位数没有15和16这两种情况。
子网号不能占15位,因为此时主机号只剩下1位,主机号只能取0和1这两种特殊情况,子网号也不能占16位,此时就没有主机号了。
不同的子网掩码可能会得到相同的网络地址,但不同的子网掩码的效果是不同的。
等长子网划分方法
确定子网数
根据子网数和获得的IP地址控件确定子网掩码
确定每个子网的网络地址(主机号全0)主机地址范围 广播地址(主机号全1)
为每台主机分配地址
确定范围
开始的时候子网位数都为0,子网号从0开始往上递增,直至所有的子网位数都为1,计算十进制网络号和广播号时注意后面的主机号全为0或全为1。
变长子网(VLSM)
所有子网的子网掩码不一定相同,产生不同大小的子网,能够高效分配IP地址。
例题
假定已经将172.16.0.0/16进行了子网划分,其中国有一个子网为172.16.32.0/20,现欲将该子网继续划分,要求每个网段50台主机。
解题步骤:确定主机位:2^N-2>=50得到主机位,得到主机号为6位,新子网号为6位。
虽然划分子网增加了灵活性,减少了地址浪费,但是也减少了能够连接在网络上的主机总数。
虽然划分子网提高了对IP地址的使用,但是还是存在一些问题。
所以采取了一种无分类编址方法,也称为无分类域间路由CIDR,构造超网。
CIDR的特点:
CIDR地址块中的所有网络聚合起来称为路由聚合。
聚合后,一条路由可以代表多条,缩小了路由表。
路由聚合有利于减少路由器之间的信息交换,提高了互联网的性能。
路由聚合也称为构造超网
CIDR虽然不使用子网了,但仍然使用”掩码“。
CIDR记法的其他形式
10.0.0.0/10可以简写为10/10,把点分十进制中地位连续的0省略。
网络前缀的后面加一个星号*的表示方法。
如0000101000*,在星号 * 之前是网络前缀,而星号 *表示IP地址中的主机号,可以是任意合法值。
常用到的CIDR地址块
网络前缀越短,其包含的网络数就越多。
第一个为例:
包含的地址数:2^(32-13),2 ^9/2 ^16=2 ^3个B类地址,2 ^19/2 ^8=2 ^11个C类地址
构造超网
划分子网会使网络前缀变成,构造超网使得网络前缀变短。
这四个地址,前23位都是相同的,所以聚合时前23位都不变,后9位都设为0,得到聚合后的地址为206.0.68.0/23
使用CIDR时,路由表中的每个项目都由网络前缀和下一跳地址组成,在查找路由表时可能会得到不止一个匹配结果。
我们应当从匹配结果中选择具有最长网络前缀的路由,即最长前缀匹配。
网络前缀越长,其地址块就越小,路由就越具体。
将目的IP地址和掩码地址转化为二进制,按位相与,结果与目标网络地址相匹配
两个都比较匹配,应该选择两个匹配地址中更具体的一个,即选择最长前缀的地址。
RFC建议
整个世界被分为四个地区,每个地区拥有一段连续的CIDR地址块,这样就可以大大压缩路由表中的项目数。
然而在CIDR提出之前,IP地址的分配与地理位置并没有建立联系,而且将已分配的IP地址回收分配非常困难,因此此方案并未实际实施。
交换机:链路层,只对局域网中的帧进行转发
路由器:网络层,用来连接不同的网络,选择最佳路由,提高通信速度
路由器包含两部分:路由选择和分组转发
路由选择部分也叫控制部分,其核心构件是路由选择处理机,任务是根据路由协议构造路由表,同时经常或定期和相邻路由器交换路由信息而不断更新和维护路由表。
分组转发由三部分组成:
从某个输入端口输入转发表,将分组转发表转发到合适的输出端口,从而转发给下一跳路由器。
转发:基于转发表,将IP数据报从端口转发出去,仅涉及一个路由器。
路由选择:按照分布式算法,根据从相邻路由得到网络拓扑的变化情况,动态改变路由并构造完整的路由表。
路由表基于路由选择算法,而转发表基于路由表,二者采用不同的数据结构,一般我们并不区别。
虽然我们说路由器属于网络层的设备,但其实输入输出端口还涉及物理层和链路层。
输入端口从线路的物理层接收到分组,数据链路层剥去帧首和帧尾,将分组送到网络层的队列中排队等待处理。
分组有两种情况:
输入端口设有缓冲区,对数据分组进行查找和转发,是路由器中最重要的功能。
输出端口也设有缓冲区,当分组进入速率大于路由器处理队列速率时,来不及发送的分组就暂存在这个队列中。链路层加上帧首和帧尾,交给物理层后发送到外面的线路。
分组丢弃的原因
交换结构把数据从一个输入端口转发到某个合适的输出端口,交换结构是交换机的关键构件,常用方式有三种:
当输入端口收到一个分组时,就用中断的方式通知路由选择处理机将分组从输入端口复制到存储器中,路由选择处理机从分组首部提取目的地址,查找路由表,再将分组复制到合适输出端口的缓存中,实际用的并不多。
数据报通过输入端口通过共享总线直接传送到合适的输出端口,不需要路由选择处理机的干预,因为每一个要转发的分组都要通过这一条总线,因此路由器的转发带宽受总线的限制。
它有2n条总线,可以使n个输入端口和n个输出端口相连,当输入端口收到一个分组时,就将它发送到与该输入端口连接的水平总线上,若通向所要转发的输出端口的垂直总线是空闲的,则在这个结点将水平总线和垂直总线连通,然后将该分组转发到这个输出端口,但若这个垂直总线已被占用,则后到达的分组就会被阻塞,必须在输入端口排队,后来采用ASIC硬件来实现,并采用了共享内存的方式解决了内部交换的问题,目前路由器都采用这种交换方式。
路由器的作用就是路由选择,那么什么是最佳路由?首先明确一点,不存在绝对的最佳路由算法,所谓最佳只能是尽可能接近理想的算法。
路由选择是个非常复杂的问题:
从路由算法的自适应性考虑:
静态路由选择
非自适应路由选择,简单,开销较小,不能及时适应网络状态的变化,适用于小型、简单的网络。
动态路由选择
自适应路由选择,较好地适应网络状态的变化,实现起来复杂,开销较大,适用于大型、复杂的网络。
互联网采用自适应的分层次的分布式的路由选择协议
自治系统AS
AS间的1路由使用AS间的网络协议。
AS内的路由选择叫做内部网关协议,如RIP和OSPF
AS间的路由选择叫做外部网关协议,如IBGP-4
RIP
是分布式、基于距离的向量,是互联网的标准协议,简单却很少应用,几近淘汰。
每个路由器都要维护从自己到每个目的网络的最短距离,及距离向量。
最短距离
RIP协议的三个要点
路由表的建立过程
距离向量算法路由表的更新过程
没有则加入,下一跳更新则替换,下一跳不同有两种情况,跳数变小则替换,跳数相同或不变则不变。
路由器收到相邻路由器X的RIP报文,先修改此报文中的所有项目,把下一跳的字段地址都改为x,并把所有距离字段的值加1,最终路由项目有三个关键数据,目的网络N,距离d,下一跳路由器x。
对修改后的RIP报文的每一个项目重复以下步骤:
若目的网络不在路由表中,则把该项目加到路由表中,否则若下一跳字段给出路由器的地址相同,则用收到的项目替换原路由表中的项目,无论距离变大还是变小,否则若收到的项目中的距离小于路由表中的距离,则进行更新,否则什么也不做,保留路由表中的原有信息。
若3分钟还没有收到相邻路由器的路由表,则将此相邻路由器连接的网络记为不可达,即将距离置为16。
RIPv2的报文格式
报文由首部和路由部分组成。
一个RIP报文最多可以包含25个路由,IP报文中数据最大长度为512字节,减去UDP首部的8字节和RIP首部的4字节,剩余500字节,500/20=25,因此RIP最大报文长度为4+20*25=504字节,如超过必须再用一个RIP报文传送。
RIPv2具有简单的鉴别功能,将原来写入第一个路由信息的位置用作鉴别,此时地址符标识符全1,而路由标记写入鉴别类型,余下16字节为鉴别数据,在鉴别数据之后才写入路由信息,但这时最多只能放入24条路由信息。
RIP协议特点
好消息传的快,坏消息传的慢。
优点:实现简单,开销较小
缺点:
(1)限制了网络规模
(2)路由器之间交换完整的路由表,随着网络规模的扩大开销也就增加
(3)坏消息传播的慢,更新过程的收敛时间过长。
是为克服RIP的缺点开发的,它的原理简单但是实现起来较复杂。
协议三要点
由于各路由器之间频繁地交换链路状态信息,所有的路由器最终都能建立一个链路状态数据库,即全网的拓扑结构图,它在全网范围内是一致的。
OSPF的链路数据库能较快地进行更新,使各个路由器能及时更新其路由表。
OSPF的更新过程收敛快是其重要优点。
为了使OSPF能应用于规模很大的网络,OSPF将一个AS划分为若干更小的范围叫做区域,每个区域都有32位的区域标识符,区域也不能太大,在一个区域的路由器最好不要超过200个。
OSPF使用层次结构进行区域划分,与其他AS区域相邻的区域称为主干区域,其标识符为4个0,用来连通其他的非主干区域。
为什么要划分区域呢?将洪泛法交换链路信息的范围局限于每个区域,而不是整个AS,大大减少了整个网络上的通信量。在一个区域内部的路由器只需要知道本区域的完整网络拓扑,而不需要知道其他区域的网络拓扑。
根据路由器所处位置的不同,将位于主干区域的路由器叫做主干路由器,如图中的R3-R7,将同时位于两个区域的路由器叫做区域边界路由器,如R3,R4和R7,将与其他AS连接的路由器叫做AS边界路由器,如R6。
OSPF不用UDP而是直接用IP数据报传送,首部协议字段值为89。OSPF构成的数据报很短,这样做可以减少路由信息的通信量,同时不必将长的数据报进行分片。
OSPF分组格式
版本目前为2,类型是5种类型中的一种,分组长度包含首部在内以字节为单位,路由器标识符是本路由器接口的IP地址,区域标识符是分组所属区域的标识符,检验和检验分组中的差错,鉴别类型有2种,取0无须鉴别,取1需要鉴别,鉴别区鉴别类型为0时填入0,鉴别类型为1时填入8个字符的口令。
OSPF的其他特点:
OSPF的五类分组
首先,R1和R2使用问候分组确认邻居关系,然后R1和R2互相发送数据库描述分组,假定R1的数据库中有一些项目不在R2发送的数据库描述分组中,R1就向R2发送某些链路请求分组,R2向R1发送其请求对应的相应信息,即链路状态更新分组,R1收到后向R2发送链路状态更新确认分组。
OSPF使用可靠的洪泛法发送更新分组
OSPF的其他特点:
对于AS之间的路径要寻找最佳路由不现实,一条路径通过几个不同的AS时,对这样的路径计算代价也不现实,比较合理的做法就是在AS之间交换可达性信息。
AS之间的协议必须考虑有关策略,包括政治安全或经济方面,寻找一条能够到达目的网络且比较好的路由,即不兜圈子而并非寻找一条最佳路由,因此选择路径向量路由选择协议。
每一个AS至少有一台路由器作为BGP发言人,两个BGP发言人通过一个共享网络连接在一起,BGP发言人往往就是BGP边界路由器,但也可以不是。
BGP发言人与AS之间的关系
发言人之间建立TCP连接以此交换路由信息,路由的增加和撤销以及报告出错等情况。TCP连接能够提供给可靠的服务,也简化了路由选择协议。两个BGP发言人彼此成为对方的邻站或对等站。
BGP可达网络要交换的信息就是就是要到达某个网所要经过的一系列AS,当BGP发言人互相交换了可达性信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找到到达各AS的较好路由,一般是树形结构,不存在回路。
BGP协议的特点
BGP-4使用的报文
打开报文,用来和邻站建立关系
更新报文,用来发送某一路由的信息,并列出要撤销的多条路由
保活报文,确认打开报文,周期性地证实邻站关系
通知报文,发送检测到的差错
RIP基于UDP,OSPF基于IP,BGP基于TCP
一个公司和分支机构如果不在同一个地方该如何通信呢?一个员工在外地如何连接工作单位呢?
本地地址:仅在机构内部使用的IP地址,可由本机构自行分配,无需向互联网的管理机构申请,一般指私网地址,有三类:
全球地址:全球唯一的IP地址,必须向互联网的管理机构申请,一般指公网地址。
IP地址紧缺,一个机构所能申请到的IP地址数往往小于本机构所拥有的主机数,考虑到互联网并不安全,一个机构内也不需要把所有的主机接入互联网。专用地址只能用作本地地址,而不能用作全球地址,路由器对目的地址是专用地址的数据报一律不进行转发。
VPN
采用专用IP地址的互连网络称做专用互联网,简称专用网。
利用互联网作为本机构各专用网之间的通信载体,又称为虚拟专用网VPN,该网络是为本机构的主机进行本机构的通信,不是用于和网络外非本机构的主机通信。
VPN中的虚拟是并没有使用通信专线,但是效果上和真正的专用网一样。
VPN构建
用隧道技术实现VPN
部门A和部门B距离很远,比如跨市跨省甚至跨国家,内部都使用A类私网地址,现在A部门的主机X要和B部门的主机Y通信,两部门之间通过搭建隧道实现数据的加密。X的私网地址10.1.0.1在进入隧道前需要将其转化为公网地址125.1.2.3,X要访问主机Y,但其目的地址并不是私网地址10.2.0.3,而是公网地址194.4.5.6,也就是说隧道内的源地址和目标地址都是公网地址,数据通过隧道后到达B网络,再将公网地址194.4.5.6转换为私网地址10.2.0.3,从而实现两个专用网之间的通信。
内联网和外联网
由部门A和B所构成的内部网络所构成的VPN称为内联网,表示部门A和B都是在一个机构的内部,一个机构和某些外部机构共同建立的VPN称为外联网。
远程接入VPN
某个流动员工需要远程接入VPN访问公司网络:该员工接入互联网,基于VPN软件在员工的PC机和公司的主机之间建立VPN隧道,通信内容是加密的,感觉好像在使用公司内部的本地网络。
NAT
要将私网地址和公网地址转换,这种地址转换就叫做网络地址转换NAT,需要在将专用网连接的互联网的路由器上安装NAT软件,该路由器就叫做NAT路由器,它至少有一个公网IP地址,所有使用私网地址的主机和外界通信时都要在NAT路由器上将私网地址转换为公网地址,当互联网回应后必须将公网地址转换为私网地址才能找到内部某主机。
在内外主机通信时,NAT路由器共发生了两次地址转换。
离开专用网时:替换源地址,将私网地址替换为公网地址
进入专用网时:替换目的地址,将公网地址替换为私网地址
NAT转换分类
PAT最大限度地节约IP地址,又可隐藏网络内部的所有主机,有效避免网络攻击。
目前网络中应用最多的就是PAT(普通设备)和静态转换(服务器)