Linux网络编程基础_5_网络层(三)--IPv4(下)
网络层(三)
--IPv4(下)
一、子网掩码、子网划分、CIDR
1.子网划分
Internet组织机构定义了五种IP地址,用于主机的有A、B、C三类地址。子网地址是借用基于类的网络地址的主机部分创建的。划分子网后,通过使用掩码,把子网隐藏起来,使得从外部看网络没有变化,这就是子网掩码。
IP地址 ::= {<网络号>,<子网号>,<主机号>}
没有划分子网之前,IP地址是两级的,划分之后,IP地址成为三级结构。
2.子网掩码
RFC950定义了子网掩码的使用,子网掩码是一个32位的2进制数,其对应网络地址的所有位都置为1,对应于主机地址的所有位都置为0。由此可知,
A类网络的缺省的子网掩码是 255.0.0.0,
B类网络的缺省的子网掩码是 255.255.0.0,
c类网络的缺省的子网掩码是 255.255.255.0。
将子网掩码和 IP地址按位进行逻辑“与”运算,得到IP地址的子网网络地址,剩下的部分就是主机地址,从而区分出任意IP地址中的网络地址和主机地址。
3.子网划分与掩码的设置
子网划分是通过借用IP地址的若干位主机位来充当子网地址从而将原网络划分为若干子网而实现的。划分子网时,随着子网地址借用主机位数的增多,子网的数目随之增加,而每个子网中的可用主机数逐渐减少。
4.无类别域间路由(CIDR)
IP地址 ::= {<网络前缀>,<主机地址>}
我们采用网络前缀法表示子网掩码,即“/<网络地址位数>”。如138.96.0.0/16表示B类网络138.96.0.0的子网掩码为255.255.0.0。
二、ARP协议、DHCP协议与ICMP协议
1.ARP协议
如图所示,假设在一个以太网上的4台计算机,分别是计算机A、B、X和Y,通过TCP/IP协议进行通信,那么双方的数据链路层必须知道对方的MAC地址。每台计算机都要在各自的高速缓存区中存放一张IP地址到MAC地址的转换表,称ARP表。其中存放着最近用到的一系列和它通信的同一子网的计算机的IP地址和MAC地址的映射。在主机初始启动时,ARP表为空。现在源端计算机A(IP地址为192.168.3.1)要和IP地址为192.168.3.2的计算机B通信。在计算机A发送信息前,必须首先得到计算机B的IP地址与MAC地址的映射关系。ARP协议工作过程如下:
(1)主机A首先查看自己的高速缓存中的ARP表,看其中是否有与192.168.3.2对应的ARP表项。如果找到,则直接利用该ARP表项中的MAC值把IP数据包封装成帧发送给主机B。
(2)主机A如果在ARP表中找不到对应的地址项,则创建一个ARP请求数据包,并以广播方式发送(把以太帧的目的地址设置为FF-FF-FF-FF-FF-FF)。包中有需要查询的计算机的IP地址(192.168.3.2),以及主机A自己的IP地址和MAC地址。
(3)包括计算机B在内的属于192.168.3.0网络上的所有计算机都收到A的ARP请求包,然后将计算机A的IP地址与MAC地址的映射关系存入各自的ARP表中。
(4)计算机B创建一个ARP响应包,在包中填入自己的MAC地址,以单播方式直接发送给主机A。
(5)主机A收到响应后,从包中提取出所需查询的IP地址及其对应的MAC地址,添加到自己的ARP表中。并根据该MAC地址所需要发送的数据包封装成帧发送出去。ARP表的内容是定期更新的,如果一条ARP表项很久没有使用了,则它将被从ARP表中删除。
2.DHCP协议
DHCPdiscover:此为client开始DHCP过程中的第一个请求报文
DHCPoffer :此为server对DHCPdiscover报文的响应
DHCPrequst :此为client对ddihcpoffer报文的响应
DHCPack : server对DHCPrequst报文的响应,client收到此报文后才真正获得了IP地址和相关配置信息。
DHCPdeclient:当client发现server分配给它的IP地址无法使用,如IP地址发生冲突时,将发出此报文让server禁止使用这次分配的IP地址。
DHCPnak :此报文是server对client的DHCPrequst报文的拒绝响应,client收到此报文后,一般会重新开始DHCP过程。
DHCPrelease :此报文是client主动释放IP地址,server收到此报文后就可以收回IP地址分配给其当他的client.
3.ICMP协议(InternetControl Message Protocol:Internet控制报文协议)
1)介绍:
IP提供的尽力数据报通信服务无连接服务,而并不能解决网络低层的数据报丢失、重复、延迟或乱序等问题,TCP在IP基础建立有连接服务解决以上问题,不能解决网络故障或其它网络原因无法传输的包的问题。
所以,ICMP设计的本意就是希望对IP包无法传输时提供报告,这些差错报告帮助了发送方了解为什么无法传递,网络发生了什么问题,确定应用程序后续操作。
2)ICMP所具有的特征
a.ICMP就像一个更高层的协议那样使用IP(即,ICMP消息被封装在IP数据报中)。然而,ICMP是IP的一个组成部分,并且所有IP模块都必须实现它。
b.ICMP用来报告错误,是一个差错报告机制。它为遇到差错的路由器提供了向最初源站报告差错的办法,源站必须把差错交给一个应用程序或采取其它措施来纠正问题。
3)ICMP报文种类
a、ICMP差错报告报文
b、ICMP询问报文
4)ICMP差错报告报文类型
a、重定向Redirect
当一个源主机创建的数据报发至某路由器,该路由器发现数据报应该选择其他路由,则向源主机发送改变路由报文。改变路由的报文能指出网络或特定主机的变化,一般发生在一个网络连接多路由器的情况下。
b、目的站不可达DestinationUnreachable
当路由器检测到数据报无法传递到目的地时,向创建数据报的源主机发出目的地不可达报文。这报文区分:网络不通(如路由器故障),目的主机连不通(没开机),协议不可达、端口不可达、以及共15种不同的情况,用不同代码表示。
c、源站抑制SourceQuench
当路由器收到太多的数据报以致内存不够时,在丢弃所收数据报的同时,向创建数据报的源主机发送源抑制报文。源主机收到源抑制报文后,需要降低发送数据报的速率。
d、超时TimeExceeded
有两种情况需要发送超时报文。一种是路由器把数据报的生存时间减至零时,路由器丢弃数据报,并向源主机发送超时报文;另一种是一个数据报的所有段到达前,重组计时到点,接收主机也会向源主机发送超时报文。
e、参数问题ParameterProblem
数据报头部的标志出现差错,或缺少必须的选项
5)ICMP应用
有三种基于ICMP的简单而广泛使用的应用为:Ping,Traceroute/tracert,MTU测试
a、Ping使用ICMP回送和应答消息来确定一台主机是否可达。
Ping是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的TCP或UDP.
b、Traceroute
该程序用来确定通过网络的路由IP数据报。Traceroute基于ICMP和UDP。它把一个TTL为1的IP数据报发送给目的主机。第一个路由器把TTL减小到0,丢弃该数据报并把ICMP超时消息返回给源主机。这样,路径上的第一个路由器就被标识了。随后用不断增大的TTL值重复这个过程,标识出通往目的主机的路径上确切的路由器系列.
继续这个过程直至该数据报到达目的主机。但是目的主机哪怕接收到TTL为1的IP数据报,也不会丢弃该数据并产生一份超时ICMP报文,这是因为数据报已经到达其最终目的地。
那么如何判断是否已经到达目的主机了呢?
Traceroute的两种实现方法:
一种:发生一个ICMP回应请求报文;目的主机将会产生一个ICMP回应答复报文。Microsoft实现(tracert)中采用该方法。当回应请求到达目的主机时,ICMP就产生一个答复报文,它的源地址等于收到的请求报文中的目的IP地址。
另一种:发生一个数据报给一个不存在的应用进程;目的主机将会产生一个ICMP目的不可达报文。大多数UNIX版本的traceroute程序采用该方法。Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30,000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文。这样,Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。
c、网络MTU:MaxTransmission Unit网络最大传输单元(包长度)
IP路由器必须对超过MTU的IP报进行分片,目的主机再完成重组处理,所以确定源到目的路径MTU对提高传输效率是非常必要的。确定路径MTU的方法是“要求报告分片但又不被允许”的ICMP报文。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。