上一篇博客重点局域网中常见的网络互联设备以及在计算机网络的中局域网究竟代表着什么。通过上一篇博客所知,如果要构建更大的网络空间,传统的局域网技术是不足的,无论是广播风暴还是MAC寻址方式都限制了网络空间的规模。为了构建更大的网络,我们需要进入三层网络,第三层网络通常被称为网际层,该层网络的主要目标是解决网络的寻找问题(提供独立于硬件的逻辑寻址,从而让数据能够在具有不同物理结构的子网之间传递)。
三层网络并没有使用MAC地址作为标志,原因在于MAC地址的信息来自于厂商等而不包含所在局域网网络的信息,当我们将一个个局域网互联起来之后,我们是不可能像局域网一样使用广播的方式使用MAC(实际上不同的局域网网络网络表示并不一致,以太网使用MAC地址,无线网使用48位地址)传递信息,那样整个网络都会因为一个机器发消息而停止工作。很容易,我们就可以想到基于网卡(基本上所有的网络互联设备都是基于网卡拓展制作,混杂模式下对帧数据进行解析)做出一个新的网络互联设备,这个设备工作于局域网的边际,可以将局域网的广播帧隔离在所在的局域网,同时能够将局域网的信息在一个个局域网之间传递,这就是所谓的路由器。同时我们需要一种新的地址就像邮编地址或者身份证号的地址来描述在一个网卡的逻辑地址。IP地址便是这样的地址,通过子网掩码我们可以将给一个局域网的机器IP地址来判断一个IP属于哪一个局域网。
首先,可以先来看下IP数据报的结构,然后简单的讲述一下IP地址的分配问题。IP地址的分配有三类,首先是静态IP地址分配,就是自己配置IP地址;然后就是动态分配IP地址,与动态分配IP地址相关的就是DHCP协议,该协议主要用于描述如何进行动态分配IP;最后便是保留地址,169.254.0.0-169.254.255.255便用于在DHCP服务器不在线或者故障时候,有限系统会自己从保留地址区间选择一个地址作为自己的IP地址
IP协议的工作模式很简单,在将具体工作模式前,先引入一个概念,那就是路由表(工作模式有两种,主机模式与路由器模式)。路由表存在于路由器也存在于每个连接在网络的主机上,路由表有静态的和动态的,一般来说,常见的电脑和手机的路由表都是静态动态结合的(一部分静态一部分动态),每种操作系统都拥有查询路由表的功能(具体的命令大家可以去搜索,也可以编辑),路由表打开如下图(某连上WIFI的Mac的路由表)。如果要去127.0.0.1、127.x.x.x,那么需要把IP报传给127.0.0.1这台主机(本地的环流网卡,没有真实的数据链路);如果要去192.199.105,只需要把IP报文发给对应MAC地址的主机;如果没有匹配到路由表将走192.168.199.1(这个地址其实就是WIFI路由器的IP地址);可以看出192.168.199.x便是这个路由器连接的局域网,表中存在Mac地址的IP应该是WIFI内的其他主机,而如果遇到没有记录MAC地址的192.168.199将发给link#9(交换机),然后交换机根据对应的MAC表发到对应局域网的端口,当我的Mac要访问百度时,会通过DNS来获取百度域名的IP,然后由于这个IP不存在于我本地的路由表,最终将转发给路由器,随后这个IP报将通过路由器穿梭一个个局域网来到百度的某个公网IP端口,进入百度的私网。
所以可以简单的描述下中间报文的变化,本地主机产生了一个IP数据报,然后通过路由表判断是否存在于同一个网络,如果在同一个网络,将直接包裹对应的MAC帧发到局域网的机器,如果不在一个局域网,将将MAC帧的目标地址写成下一跳的MAC地址,通过二层协议到达下一跳然后通过三层协议解析出IP地址,继续包裹MAC帧直到到达目标地址(在这过程中,ARP协议和RARP协议用于IP地址和MAC地址的转换;各操作系统也有跟踪路由的命令,比如rtroute)。
在这个过程中,存在很多可能出现问题的地方。假如路由表异常,那么便无法找到正确的下一跳;假如有人在局域网伪造ARP协议信息,那么IP报文就可能被发送到错误的机器;假如本机的局域网IP和自身所在的局域网网段不一致,那么局域网的机器便没法给你的主机发送IP报文了(未知的IP地址会发到交换机或者路由器最终被丢失)。
谈到这,就简单来讲下IP地址的划分,最初的IPv4地址空间划分(实际上IPv4网络地址的划分不仅仅这些):
A类 10.0.0.0--10.255.255.255 私有
B类 172.16.0.0--172.31.255.255 私有
C类 192.168.0.0--192.168.255.255 私有
D类 224.0.0.0-239.255.255.255 组播
E类 240.0.0.0-255.255.255.255 保留
谈到这,可以稍微谈一下三个网络概念,互联网internet、因特网Internet、万维网WWW;互联网指任何通过网络互联设备连接的网络(哪怕是只有两台主机也是互联网,或者都是虚拟网络);判断自己是否接入的是因特网,首先是看自己电脑是否安装了 TCP/IP协议,其次看是否拥有一个公网地址(所谓公网地址,就是所有私网地址以外的地址);只要应用层使用的是HTTP协议,就称为万维网;这些都是比较常听到的名词,接下来讲一讲因特网的访问。
首先,是最简单的情景,这台主机本身就拥有一个公网IP,是因特网的一部分,在因特网内部通过TCP/IP协议便可以进行互相的访问。然后谈一谈正常的局域网如何进行连上因特网,最常见的技术就是NAT技术(NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用 NAT )。