网络层位于数据链路层与传输层之间,网络层包含许多协议,其中最重要的协议就是IP协议。网络层提供了IP路由功能。理解IP路由除了要熟悉IP协议的工作机制之外,还必须理解IP编址以及如何合理地使用IP地址来设计网络。
1. IP编址:
1.1 IP报文头部格式
在剥掉帧的头部和尾部之前,网络设备需要根据帧头中Type字段确定下一步将帧发送到哪个上层协议进行处理。本例中的帧头部
Type字段值为0x0800
(0x代表16进制)
表示该帧需要上送到网络层IP协议进行处理
。以下将介绍帧的头部和尾部被剥掉后,IP协议将如何处理帧中的数据。
IP报文头部存在于被剥掉了数据帧头尾部之后的Data数据部分的头部。
IP报文头部信息用于指导网络设备对报文进行路由和分片。同一个网段内的数据转发通过链路层即可实现,而跨网段的数据转发需要使用网络设备的路由功能。分片是指数据包超过一定长度时,需要被划分成不同的片段使其能够在网络中传输。
IP报文头部长度为20到60字节,报文头中的信息可以用来指导网络设备如何将报文从源设备发送到目的设备。
其中,
Version字段
表示当前支持的IP协议版本,当前的版本号为4(即IPV4,还有IPV6)。
Header Length字段
指定是头部长度(范围20~60byte,最小固定长度20byte+IP Options长度)。
DS Field字段
早期用来表示业务类型,现在用于支持QoS中的差分服务模型,实现网络流量优化。
Total Length字段
指整个IP报文的总长度,即Data+IP报文头。有效数据长度为总长度减去头部长度。
Identification(识别)
、
Flags(标记)
、
Fragment Offset(分段偏移)三个字段
与分片和重组有关。
Time to Live(TTL,生存时间)字段
缺省值为255
,IP报文每经过一台三层网络设备则减去1,如果TTL为1会被丢弃,TTL的作用是为了防止环路。
Protocol(协议)字段
指示传输层的协议是什么(如TCP/UDP等。类似数据链路层的Type字段指定了网络层的IP协议,传输层用端口区分应用等)。
Header Checksum字段
用作报文数据校验,如不一致则丢弃。
Source IP Address
:源IP地址字段。
Destination IP Address
:目的IP地址字段。
源和目的IP地址是分配给主机的
逻辑地址
,
用于在网络层标识报文的发送方和接收方。
根据源和目的IP地址可以判断目的端是否与发送端位于同一网段,如果二者不在同一网段,则需要采用路由机制进行跨网段转发。
1.2 IP编址格式
IPv4地址为32比特(bit,0/1)的二进制数,通常用点分十进制(即将32bit分四组用10进制表示)表示。IP地址用来标识网络中的设备,具有IP地址的设备可以在同一网段内或跨网段通信。
IP地址包括两部分,第一部分是网络号,表示IP地址所属的网段,第二部分是主机号,用来唯一标识本网段上的某台网络设备。
主机位为0(二进制为:00000000)的地址称为
网络地址
,表示一个网络(网段)。
主机位为255(二进制为:11111111)的地址称为
广播地址
,表示网段中的所有主机。平时使用的IP地址中0和255这两个主机位是不能用的。
1.3 IP地址分类
IPv4地址被划分为A、B、C、D、E五类,每类地址的网络号包含不同的字节数。
A类,B类和C类地址为可分配IP地址(日常单播使用)
,每类地址支持的网络数和主机数不同。比如,A类地址可支持126个网络(网络位首位固定为0,前8位网络位,后24位为主机位),每个网络支持2的24次方(16,777,216 )个主机地址,另外每个网段中的网络地址和广播地址不能分配给主机。
C类地址(日常使用)支持200多万个网络,每个网络支持256个主机地址,其中254个地址可以分配给主机使用。
D类地址为组播地址。
主机收到以D类地址为目的地址的报文后,且该主机是该组播组成员,就会接收并处理该报文。
E类IP地址
是以“1111”开始,为将来使用保留。他的第一字节的范围是240~255,主要用于Internet试验和开发。
各类IP地址可以通过第一个字节中的比特位进行区分。如
A类地址第一字节的最高位固定为0,B类地址第一字节的高两位固定为10,C类地址第一字节的高三位固定为110,D类地址第一字节的高四位固定为1110,E类地址第一字节的高四位固定为1111。
1.4 IP地址类型
公有(公网)地址:由Inter NIC(Internet Network Information Center 因特网信息中心)负责将这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。如运营商分配给你的地址,可以连接因特网。
私有(私网)地址:如家庭里从配置了运营商公网地址的路由器分配出去的地址,192.168.1.1之类,私网地址不能直接连接因特网,连接因特网需要使用
NAT
技术转换成公网地址,似的运营商看来多个私有地址发送的数据对应唯一的公有地址。
NAT(Network Address Translation,网络地址转换):
当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。另外,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。
IPv4中的部分IP地址被保留用作特殊用途。为节省IPv4地址,A、B、C类地址段中都预留了特定范围的地址作为私网地址。现在,世界上所有终端系统和网络设备需要的IP地址总数已经超过了32位IPv4地址所能支持的最大地址数4,294,967,296。
为主机分配私网地址节省了公网地址,可以用来缓解IP地址短缺的问题。
企业网络中普遍使用私网地址,不同企业网络中的私网地址可以重叠。默认情况下,网络中的主机无法使用私网地址与公网通信;当需要与公网通信时,私网地址必须转换成公网地址。
还有其他
一些特殊IP地址
,如
127.0.0.0
网段中的地址
为环回地址(可以用来测试TCP/IP协议完整性)
,用于诊断网络是否正常。IPv4中的第一个地址
0.0.0.0未指定的地址,表示任何网络(在DHCP中有使用)
,这个地址的作用将在路由原理中详细介绍。IPv4中的最后一个地址
255.255.255.255是0.0.0.0网络中的广播地址
。
1.5 网络通信
(如上图中的4台主机连在一根线上,该线意为4台主机处于共享式网络中,该线可能是被忽略没画的路由器等由该线代替)图中包含192.168.1.0/网段和192.168.2.0/两个网段。
源主机必须要知道目的主机的IP地址后才能将数据发送到目的地。
源主机向其他目的主机发送报文之前,需要检查目的IP地址和源IP地址是否属于同一个网段。
如果是同一个网段(如主机A与C,可直接通信),则报文将被下发到底层协议进行以太网封装处理。
如果目的地址和源地址
属于不同网段(如主机A与B,需要三层设备才可通信),则主机需要获取下一跳路由器的IP地址,然后将报文下发到底层协议处理。
1.6 网络子网掩码
子网掩码让设备(如路由)区分哪些是网络位,哪些是主机位,用来判断任意两个IP地址是否属于同一子网络(从而正确路由),基于子网掩码,管理员可以将网络进一步划分为若干子网。(不同网段的计算机要通过网关(Gateway)才能互通)。
对应于IP地址,子网掩码用1表示网络位,0表示主机位。它和IP地址一样也是使用点式十进制来表示的。如果两个IP地址在子网掩码的按位
与的计算
下所得结果相同,即表明它们共属于同一子网中。
如上图网络位为192.168.1,即24位,那么子网掩码网络位部分就为24个1,同理子网掩码主机位为8个0,转换为10进制该子网掩码即为255.255.255.0<即C类IP默认子网掩码>
子网掩码与IP地址的表示方法相同。
每个IP地址和子网掩码一起可以用来唯一的标识一个网段中的某台网络设备。
A、B、C三类IP的默认子网掩码:
A类:255.0.0.0
B类:255.255.0.0
C类:255.255.255.0
举例:设备如何通过IP地址与子网掩码判断是否处于同一网段
①假设地址A为192.168.0.1 子网掩码为255.255.255.0
转换为二进制
IP: 11000000.10101000.00000000.00000001
子网掩码:11111111.11111111.11111111.00000000
两者做与运算得结果:11000000.10101000.00000000.00000000
转换为十进制则为:192.168.0.0(网段)
②同理再使用同网段地址B:192.168.0.2与子网掩码做相同二进制与运算会得到的192.168.0.0网段,证明这两个地址在同一网段。
补充——子网掩码的快速算法 :
很多人肯定对设定子网掩码这个不熟悉,很头疼,那么我现在就告诉大家一个很容易算子网掩码的方法,帮助一下喜欢偷懒的人:)
大家都应该知道2的0次方到10次方是多少把?也给大家说一下,分别是: 1 2 4 8 16 32 64 128 256 512 1024。
如果你希望每个子网中只有5个ip地址可以给机器用,那么你就最少需要准备给每个子网7个ip地址,因为需要加上两头的不可用的网络和广播ip,所以你需要选比7多的最近的那位,也就是8,就是说选每个子网8个ip。好,到这一步,你就可以算掩码了,这个方法就是:最后一位掩码就是256减去你每个子网所需要的ip地址的数量,那么这个例子就是256-8=248,那么算出这个,你就可以知道那些ip是不能用的了,看:0-7,8-15,16-23,24-31依此类推,写在上面的0、7、8、15、16、23、24、31(依此类推)都是不能用的,你应该用某两个数字之间的IP,那个就是一个子网可用的IP。
再试验一下,就拿200台机器分成4个子网来做例子吧。 200台机器,4个子网,那么就是每个子网50台机器,设定为192.168.10.0,C类的IP,大子网掩码应为255.255.255.0,对吧,但是我们要进一步分子网,所以按照上面的,我们用32个IP一个子网内不够,应该每个子网用64个IP(其中62位可用,足够了吧),然后用我的办法:子网掩码应该是256-64=192,那么总的子网掩码应该为:255.255.255.192。不相信?算算:0-63,64-127,128-191,192-255,这样你就可以把四个区域分别设定到四个子网的机器上了,是不是很简单?
运用该算法解答一道HCNA问题如下:
QUESTION 139
139.某公司申请到一个C类IP地址段,但要分配给6个子公司,最大的一个子公司有26台计算机。不同的子公司 必须在不同的网段,则子网掩码应该设置为()。
A. 255.255.255.0
B. 255.255.255.128
C. 255.255.255.192
D. 255.255.255.224
Correct Answer: D
解:由题干知道要满足最大子公司的26台计算机,则每个子网的最少要准备26+2个地址,最接近的就是32,即每个子网32个IP,用256-32=224,且该IP段为C类,则子网掩码为255.255.255.224。
QUESTION 252
252.一个网段150.25.0.0 的子网掩码是255.255.224.0,那么()是该网段中有效的主机地址。(多选)
A. 150.25.0.0
B. 150.25.1.255
C. 150.25.2.24
D. 150.15.3.30
Correct Answer: BC
解:
A选项为网络地址,不能作为主机地址。非有效地址,错误
子网掩码二进制:11111111.11111111.11100000.00000000
B选项二进制:10010110.00011001.00000001.11111111
与运算结果:10010110.00011001.00000000.00000000即150.25.0.0,正确
子网掩码二进制:11111111.11111111.11100000.00000000
C选项二进制:10010110.00011001.00000010.00011000
与运算结果:10010110.00011001.00000000.00000000即150.25.0.0,正确
子网掩码二进制:11111111.11111111.11100000.00000000
D选项二进制:10010110.00001111.00000011.00011110
与运算结果:10010110.00001111.00000000.00000000即150.15.0.0,错误
简单来说,子网掩码前几位是1就表示IP地址前几位是网络号,后面的0对应主机号。只要为1的那些位网络号一致的IP二进制地址都为同一网段。
PS:
1)单单从子网掩码255.255.224.0(二进制:11111111.
11111111.11100000.00000000)
可以推测它的对应IP应该是A类或者B类IP
如果IP为A类,默认掩码255.0.0.0(二进制:11111111.00000000.00000000.00000000)
对于A类IP则划分了2的11次方个子网,(网络位从主机位借位11)
如果IP为B类,默认掩码255.255.0.0(二进制:11111111.11111111.00000000.00000000)
对于B类IP则划分了2的3次方个子网,(网络位从主机位借位3<划分子网原理>,000-111就是可划分子网数目,000, 001,010,011,100,101,110,111,所以是8个子网。)
2)192.168.1.0/24,是指192.168.1网段,/24指子网掩码的1的个数为24(即255.255.255.0子网掩码的缩写)
1.7 网络通信
如图,PC1和PC2在同一网段,PC3和PC4在同一网段,经过一个交换机连接起来,此时同网段PC间可通信,跨网段无法通信。
1.8 IP地址规划
举例1:如↑图根据IP地址和子网掩码得知,网络位24bit(位),主机位8bit,因此该IP网络地址(网络段)主机总数为2的8次方(即2的主机位数个次方),可用主机(地址)数要减去广播IP和0网络IP<即1-254,共254个地址>。
例题:根据举例1中的方法,可算得上图的网络地址为172.16.0.0(子网掩码前16位为1,因此IP前16位即前两组数字.0.0为网络地址);
主机位为2的16次方(根据子网掩码判断主机位为16位);
可用地址2的16次方-2。
1.8.1 有类IP地址的缺陷(即直接按A、B、C类IP地址划分网段)
如果企业网络中希望通过规划多个网段来隔离物理网络上的主机,使用缺省子网掩码就会存在一定的局限性。网络中划分多个网段后,每个网段中的实际主机数量可能很有限,导致很多地址未被使用。
如果按照有类IP地址分配IP(即使用默认的子网掩码),如上图,按C类IP划分(使用默认子网掩码255.255.255.0),每个网络地址有254个可用IP,但三个网段分别只有30、20和10台主机,会浪费掉大量的IP地址。
1.8.2 可变长子网掩码(掩码右移,即从主机位借位)
采用可变长子网掩码可解决上述问题。
缺省子网掩码可以进一步划分
,成为变长子网掩码(VLSM,Variable-Length Subnet Masks)。打破了传统以类为标准的地址划分方法,
通过改变子网掩码,可以将网络划分为多个子网及子网的子网
。
优点:
节约IP地址空间。
缺点:
增加了路由表的大小。
注意事项:
使用VLSM时,所采用的路由协议必须能够支持它,这些路由协议包括RIPV2,OSPF和BGP.
本例中的地址为C类地址,缺省子网掩码为24位。现借用一个主机位作为网络位,借用的主机位变成子网位。一个子网位有两个取值0和1,因此可划分两个子网。该比特位设置为0,则子网号为0,该比特位设置为1,则子网号为128。将剩余的主机位都设置为0,即可得到划分后的子网地址;将剩余的主机位都设置为1,即可得到子网的广播地址。每个子网中支持的主机数为2 的7次方(减去1后的7个主机位数) -2(减去子网地址和广播地址),即126个主机地址。
1.8.3 子网划分
变长子网掩码举例:
公司被给予一个C类IP段192.168.10.0/24,需要将其分配给三个子网,每个子网分别包含30、20、10台主机。使用变长子网掩码实现在子网下再划分子网。
核心思想:
掩码中“借用”主机位来“制造”新的网络。
优点:
缩减网络流量、优化网络性能、简化管理、更为灵活的形成大覆盖范围的网络,最本质的作用——合理的分配IP地址。
PS:子网的数目=2的X次方,X为借了多少主机位的数目(即上图说的子网位数)。
1)第一种分法(按满足子网所需最大主机数均分网段):
由于需要将该网络地址分配三个子网,所以需要借用的主机位至少为2位(2的2次方=4>3,
此方法先确定子网位数
),此时剩余主机位为6,得每个子网可用主机地址数=2的6次方-2=62个,大于子网最大主机数30。因此可以这样划分。
IP段192.168.10.0/24
原子网掩码:
11111111.11111111.11111111.
00
000000<255.255.255.0>
主机位借两位到网络位后:11111111.11111111.11111111.
11
000000
<新掩码255.255.255.192/26>
,
划分出的4个子网段为:
00000000、01000000、10000000、11000000,
即:
192.168.10.
0/26(主机数0~63,可用范围1~62)
、
192.168.10.
64/26(主机数64~127,可用范围65~126)
、
192.168.10.
128/26(主机数128~192,可用范围129~191)
、
192.168.10.
192/26(主机数192~256,可用范围193~255)
2)第二种分法(根据每个子网所需主机数精确划分):
先确定主机位位数,“先大后小”——先为主机需求数大的网络分配。
1.9 无类域间路由(CIDR,Classless Inter Domain Routing)
无类域间路由CIDR
由RFC1817定义。CIDR突破了传统IP地址的分类边界,
将路由表中的若干条路由汇聚为一条路由,减少了路由表的规模,提高了路由器的可扩展性。
如上图所示,一个企业分配到了一段A类网络地址,10.24.0.0/22。该企业准备把这些A类网络分配给各个用户群,目前已经分配了四个网段给用户。如果没有实施CIDR技术,企业路由器的路由表中会有四条下连网段的路由条目,并且会把它通告给其他路由器。通过实施CIDR技术,我们可以在企业的路由器上把这四条路由10.24.0.0/24,10.24.1.0/24,10.24.2.0/24,10.24.3.0/24
汇聚成一条路
由10.24.0.0/22。这样,企
业路由器只需通告10.24.0.0/22这一条路由,
通过汇聚,大大减小了路由表的规模。
1.10 网关
网关
用来转发来自
不同网段
之间的数据包,使数据从本网段出去访问其它网段。
报文转发过程中,首先需要确定转发路径以及通往目的网段的接口,然后将报文封装在以太帧中通过指定的物理接口转发出去。如果目的主机与源主机不在同一网段,报文需要先转发到网关,然后通过网关将报文转发到目的网段。
网关是指接收并处理本地网段主机发送的报文并转发到目的网段的设备。
为实现此功能,网关必须知道目的网段的IP地址。
网关设备上连接本地网段的接口地址即为该网段的网关地址。
1.11 IP包分片
网络中转发的IP报文的长度可以不同,但如果报文长度超过了数据链路所支持的最大长度(即MTU值,
最大传输单元<Maximum Transmission Unit,MTU>
),则报文就需要分割成若干个较小的片段才能够在链路上传输。
将报文分割成多个片段的过程叫做分片。
接收端根据分片报文中的标识符(Identification),标志(Flags),及片偏移(Fragment Offset)字段对分片报文进行重组。
标识符用于识别属于同一个数据包的分片,以区别于同一主机或其他主机发送的其它数据包分片
,保证分片被正确的重新组合。
标志字段用于判断是否已经收到最后一个分片。最后一个分片的标志字段设置为0,其他分片的标志字段设置为1,
目的端在收到标志字段为0的分片后,开始重组报文。
片偏移字段表示每个分片在原始报文中的位置。
第一个分片的片偏移为0,第二个分片的片偏移表示紧跟第一个分片后的第一个比特的位置。比如,如果首片报文包含1259比特,那么第二分片报文的片偏移字段值就应该为1260。
1.12 生存时间
报文在网段间转发时,如果网络设备上的路由规划不合理,就可能会出现环路,导致报文在网络中无限循环,无法到达目的端。环路发生后,所有发往这个目的地的报文都会被循环转发,随着这种报文逐渐增多,网络将会发生拥塞。为避免环路导致的网络拥塞,IP报文头中包含一个生存时间TTL(TimeTo Live)字段。报文每经过一台三层设备,TTL值减1。初始TTL值由源端设备设置。当报文中的TTL降为0时,报文会被丢弃。同时,丢弃报文的设备会根据报文头中的源IP地址向源端发送ICMP错误消息。
1.13 协议号
目的端的网络层在接收并处理报文以后,需要决定下一步对报文该做如何处理。IP报文头中的协议字段标识了将会继续处理报文的协议。与以太帧头中的Type字段类似,协议字段也是一个十六进制数。该字段可以标识网络层协议,如ICMP(Internet Control Message Protocol,因特网控制报文协议),也可以标识上层协议,如TCP(Transmission Control Protocol,传输控制协议,对应值0x06)、 UDP( User
Datagram Protocol,用户数据包协议,对应值0x11)。
1.14 总结
1.子网掩码作用是什么?
答:
32位的IP子网掩码用于区分IP地址中的网络号和主机号。网络号表示网络或子网,主机号表示网络或子网中的主机。
2.IP报文头部中TTL字段的作用是什么?
答:
如果网络中存在环路,则IP报文可能会在网络中循环而无法到达目的端。TTL字段限定了IP报文的生存时间,保证无法到达目的端的报文最终被丢弃。
3.网关的作用是什么?
答:
网关是指接收并处理本地网段主机发送的报文并转发到目的网段的设备。