在网络层,可以把Internet看作是一种相互关联的网络或自治域集合。没有真正的结构,但存在几个主要骨干网。这些都是由高带宽线路和快速路由器组成。这些骨干网中最大的一个称为一级网络(Tier 1 netword),每个骨干网都与它相连,进而到达其他骨干网。连接到骨干网上的是Internet服务提供商(ISP),它为家庭和企业、数据中心和服务器团管设施,以及区域(中级)网络提供Internet接入服务。连接到区域网络的是更多的ISP、许多大学和公司的局域网、以及其他边缘网络。
将整个Internet粘合在一起的证实网络层协议,Internet协议(IP, Internet Protocol)。与大多数老式网络层协议不同的是,IP协议在设计之初就把网络互连作为目标。应该这样看待网络成:IP的任务是提供一种尽力而为(best-effort) 地把数据包从源端传输到接收方的方法(即不提供任何保证),无序考虑这些机器是否在同一个网络,也不关心它们之间是否还有其他网络。
Internet中的通信过程是这样的。传输层获取数据流,并将数据流拆分成段,以便作为IP数据包发送。理论上,每个数据包最多容纳64KB,但实际上,数据包通常不超过1500Byte,因为以太网帧的上限。IP路由器转发每个数据包穿过Internet,沿着一条路径把数据包从一个路由器转发到下一个路由器,直到到达目的地;选择使用那条路径是IP路由协议的任务。在接收方,网络成将数据交给传输层,再由传输层交给接收进程。当所有的数据段最终到达目标机器,它们被网络层重新组装还原成最初的数据报;然后该数据报被网络层传给传输层。
IPv4地址,32bit的地址。一个IP地址并不真正指向一台主机,而是指向一个网络接口,所以如果一台主机在两个网络上,它必须有两个IP地址。然而大多数主机都连接在一个网络,因而只有一个IP地址。与此相反,路由器有多个接口,从而有多个IP地址。
IP地址具有层次性,由高位的可变长网络和低位的主机两部分数据组成。同一个网络上(比如以太局域网)的所有主机,其地址的网络值是相同的。
在1993年以前,IP地址被划分为五类:
网络地址的管理是由一个称为Internet域名和地址分配机构(ICANN)的非营利性公司负责。ICANN一次性把部分地址空间授权给各个区域机构,这些机构再把IP地址发放给ISP和其他公司。ABCDE类IP地址的net-id和host-id都是固定死的,很难高效地利用IP地址空间。
引入子网,是为了在一个组织内部灵活地分配地址块。引入CIDR(无类域间路由,Classless Inter-Domain Routing)技术是为了减少全局路由表的大小。两者本质上是同一个东西,利用子网掩码来实现,一个着重划分,一个着重聚合。所以传统的ABCDE的IP地址分类基本已经不再使用。
但是,IP地址依旧十分匮乏。对于整个Internet而言,长期的解决方案是IPv6,但这需要很长的时间来完成。今天普遍使用的快速方案就是网络地址转化(NAT,Network Address Translation)。
NAT的基本思想是ISP为每个家庭或每个公司分配一个IP地址,用这个IP地址来传输Internet流量。在客户网络内部,每台机器有唯一的IP地址,该地址主要用来路由内部流量。然而,当一个数据包需要离开客户网络,它必须执行要给地址转换,把唯一的内部IP地址转换成那个公共的IP地址。这种地址转换使用了IP地址的三个范围,这些地址已经被声明为私有化,任何网络可以在内部随意地使用这些地址。仅有的规则是不允许包含这些地址的网络包出现在Internet上。这3个保留的地址范围是:
NAT利用TCP/UDP source prot字段,当一个私网网络包出境时,首先进入NAT盒子。源IP被NAT真实IP地址所取代,TCP source port字段被一个索引值取代,该索引指向NAT盒子的地址转换表中的一个表项,该表项包含了原来的IP地址和TCP port。最后NAT盒子重新计算IP头和TCP头校验和,然后发送出去。
当一个数据包从ISP到达NAT盒子时,TCP source port字段被用作索引值查找NAT盒子的映射表。然后从表中提取出私网内部的IP和port,重新计算IP和TCP头校验和。最后把数据包传递给客户内部的路由器。
可以参考 NAT地址转换原理
NAT因为很多原因被诟病。丑陋,ip并不能标识唯一一台机器;打破了Internet端到端的连接模型(涉及到NAT穿越技术);违反分层原则;Internet网上的进程不一定会使用TCP/UDP等等很多问题。但是,它还是被应用地很广泛!就算IPv6将来被广泛部署,它也不大会消失,吧!
IPv6与IPv4并不兼容,但与其他一些辅助性的Internet协议则是兼容的,包括TCP、UDP、ICMP、IGMP、OSPF、BGP和DNS。下面讨论IPv6的主要特性:
取消的字段:
去掉了这些特性之后,得到的是一个精简的网络层协议。因此这份设计方案满足了IPv6的目标,即一个快速,但灵活,并且具有足够大地址空间的协议。
有关扩展头在这里不做描述
网络层除了用于数据传输的IP协议以外,Internet还有几个辅助控制协议。包括ICMP、ARP、DHCP。这里介绍都都是关于IPv4的控制协议
路由器严密监视Internet的操作。当路由器在处理一个数据包的过程中发生了意外,可以通过 Internet控制消息协议(ICMP,Internet Control Message Protocol) 向 数据包源端 报告有关事件;ICMP还可以用来测试Internet。已经定义的ICMP消息类型大约有10多种,每一种ICMP消息类型都被封装在一个IP数据包中。下面列举几个重要的消息类型:
还有其他的消息类型,详细的内容可以参考:Internet Control Message Protocol (ICMP) Parameters
仅有IP地址还不足以发送数据包,数据链路层硬件网卡,比如以太网卡并不理解Internet地址。在以太网的环境里,每一块NIC在出厂时都配置了一个唯一的48位以太网地址。以太网NIC的制造商从IEEE请求一块以太网地址,确保不会出现两块网卡有相同的地址。NIC根据其48位的以太网地址来发送和接收帧,它们对32位的IP地址完全一无所知。
ARP 解决了这个问题。可以参考 ARP协议原理
ARP(以及其他Internet协议)都做了这样的假设,即主机配置了一些基本信息,比如自己的IP地址。主机如何获得这些信息?手动配置是可能的,但是那样乏味而且容易出错。一个更好的解决办法是动态主机配置协议(DHCP,Dynamic Host Configuration Protocol)。
采用DHCP时,每个网络必须有一个DHCP服务器负责地址配置。当计算机启动时,它有一个嵌入在NIC中的内置以太网或其他链路层地址,但没有IP地址。像ARP一样,该计算机广播一个报文,请求IP地址,这个报文就是DHCP DISCOVER包,这个包必须到达DHCP服务器。当DHCP服务器收到请求,它就为该主机分配一个空闲的IP地址,并通过DHCP OFFER 包返回给主机。
这里有个问题,就是从服务器那里拿到的IP地址可以用多久,如果一个主机离开网络,并且没有把分配个它得IP地址返回给DHCP服务器,那么这个地址将永久丢失。为了防止这种情况发生,可以为每个分配的IP地址指定一段固定的时间,这种技术称为租赁(leasing),在租赁期满之前,主机必须请求DHCP续订。如果没有提出续订或者请求被拒绝,主机不能使用以前分配给它得IP地址。
DHCP被广泛使用于Internet,可以为主机配置除了IP地址以外的其它各种参数。它还被用于企业和家庭网络,ISP使用DHCP来设置Internet接入链路上的设备参数,因此客户不需要给他们的ISP打电话来获取这些信息。常见的配置信息包括网络掩码、默认网关得IP地址、DNS服务器和时间服务器的IP地址。
可以参考 DHCP工作过程详解 和 DHCP 详解
Internet由大量的独立网络或自治系统(AS,Autonomous System)组成,并由不同的组织运营,这些组织通常是公司、大学、ISP等。在自己的网络内部,一个组织可以使用自己的内部路由算法,叫做域内路由算法(Intradomain routing),也叫内部网关协议(exterior gateway protocol)。
早期得域内路由协议采用了Distense Vector得设计思想,基于分布式的Bellman-Ford算法,路由信息协议(RIP, Routing Information Protocol)是当时运行的一个主要例子。在小型网络系统中RIP运行良好,但随着网络规模越来越大,它工作地不那么好了,而且它还遭受无穷计数问题的困扰,收敛速度很慢。
由于RIP存在的诸多问题,一个Linked state protocol(链路状态路由协议) 被设计出来,它就是开放最短路径优先(OSPF, Open Shortest Path First),它借鉴了IS-IS(Intermediate-System to Intermediate-System,更多地应用在ISP网络)。
具体的内容可以参考 OSPF详解
在一个AS内部,推荐使用的是OSPF和IS-IS。在AS之间,则可以使用另外一个协议,称为边界网关协议(BGP,Border Gateway Protocol)。域内西医所需要做的只是尽可能有效地将数据包从源端传送到接收方,它不必考虑政治方面的因素。相反,域间路由协议则必须考虑大量和有关政治的因素。
参考:BGP-边界网关协议
ip数据报格式
IP地址的分类及范围详解:A、B、C、D、E五类是如何划分的
NAT地址转换原理
IPv6数据包格式
ARP协议原理
DHCP工作过程详解
DHCP 详解
OSPF详解
BGP-边界网关协议