Internet的网络层

目录

  • Internet 结构
  • IPv4
  • IPv4的主要问题
      • 传统IP地址
      • 子网划分和ICDR
      • NAT
  • IPv6
  • Internet 控制协议
      • ICMP——Internet控制消息协议
      • ARP——地址解析协议
      • DHCP——动态主机配置协议
  • 路由协议
      • OSPF——内部网关路由协议
      • BGP——外部网关路由协议
  • 参考

Internet 结构

  在网络层,可以把Internet看作是一种相互关联的网络或自治域集合。没有真正的结构,但存在几个主要骨干网。这些都是由高带宽线路和快速路由器组成。这些骨干网中最大的一个称为一级网络(Tier 1 netword),每个骨干网都与它相连,进而到达其他骨干网。连接到骨干网上的是Internet服务提供商(ISP),它为家庭和企业、数据中心和服务器团管设施,以及区域(中级)网络提供Internet接入服务。连接到区域网络的是更多的ISP、许多大学和公司的局域网、以及其他边缘网络。

Internet的网络层_第1张图片
  将整个Internet粘合在一起的证实网络层协议,Internet协议(IP, Internet Protocol)。与大多数老式网络层协议不同的是,IP协议在设计之初就把网络互连作为目标。应该这样看待网络成:IP的任务是提供一种尽力而为(best-effort) 地把数据包从源端传输到接收方的方法(即不提供任何保证),无序考虑这些机器是否在同一个网络,也不关心它们之间是否还有其他网络。

  Internet中的通信过程是这样的。传输层获取数据流,并将数据流拆分成段,以便作为IP数据包发送。理论上,每个数据包最多容纳64KB,但实际上,数据包通常不超过1500Byte,因为以太网帧的上限。IP路由器转发每个数据包穿过Internet,沿着一条路径把数据包从一个路由器转发到下一个路由器,直到到达目的地;选择使用那条路径是IP路由协议的任务。在接收方,网络成将数据交给传输层,再由传输层交给接收进程。当所有的数据段最终到达目标机器,它们被网络层重新组装还原成最初的数据报;然后该数据报被网络层传给传输层。

IPv4

  IPv4数据报包括头部和数据,格式如下:
Internet的网络层_第2张图片

  • 版本(Version) 字段记录数据报属于协议的哪个版本
  • 首部长度(IHL) 指明了头到底有多长。IHL的单位是4bytes,最小值为5,表示没有可选项。最大值为15,把头部的长度限制为60bytes,因此可选(options)字段最多为40bytes
  • 区分服务(Differentiated services,最初叫TOS,Type of service) 字段,前6位用来标记数据包的服务类型,比如加速服务和确保服务;后2位用来携带显式拥塞通知信息,比如数据包是否经历了拥塞。
  • 总长度(Total length) 字段包含了该数据报中的所有内容,即头和数据。最大长度是65535bytes。
  • 标识(Identification) 的用途是让目标机器确定一个信道大的分段属于哪一个数据报。同一个数据报的所有段包含同样的标识值。
  • 标志 字段有3bits,第一个bit没有用。第二个bit是DF(Don’t Fragment) 标志位,这是针对路由器的一条命令,不允许路由器拆分该数据报。最初,该字段用来支持没有能力组装还原数据包的主机。现在该字段可用在发现MTU(Path Maximum Transmission Unit) 的过程中。第三个bit是MF(More Fragments) ,除了最后一个段以外,其他所有的段都必须设置这一位。它的用途是接收方可以知道什么时候一个数据报的所有分段都已经到达了。
  • 分段偏移量(Fragment offset) 字段指明了该段在当前数据报中的位置。除了数据报的最后一个段以外,其他所有段的长度必须是8字节的倍数。offset的单位是8byte,由此支持Total length字段限制的最大数据报。Identifiation、MF、Fragment offset三个字段协调工作,完成了数据报的分割和重组工作。
  • 生存时间(Time to live) 字段是一个用于限制数据报生存期的计数器。每一跳该计数器递减,而且当数据报在一台路由器上排队时间较长时,该计数器必须多倍递减。当它减到0时,该数据包就被丢弃。
  • 协议(protocol) 字段。当网络层组装完成一个完整的数据包之后,它需要直到该如何对它进行处理。协议(protocol)字段指明了该将它交给哪个上层。TCP、UDP或其他都有可能。协议的编号在整个Internet是全球统一的。
  • 首部校验和(header checksum) 字段对头部进行保护。校验算法的执行过程是这样的:当数据到达时,所有的16bit累加起来,然后取结果的反码,结果应该为0。每一跳都要重新计算头校验和字段,因为至少有个字段在不断改变(TTL)。
  • **源地址(source address)和目的地址(Destination address)**字段表示源网络接口和目标网络接口的IP地址。
  • 可选(Options) 字段提供一种途径,允许后续版本协议包含一些原设计中没有出现的信息,以便实验人员尝试新的想法,避免为那些不常使用的信息分配头字段。例如:时间戳 选型,对于网络测量很有用。如今,IP Options已经失宠,许多路由器忽略它们或者不能有效地处理它们,它们作为一种罕见案例被搁置了起来。

IPv4的主要问题

  IPv4地址,32bit的地址。一个IP地址并不真正指向一台主机,而是指向一个网络接口,所以如果一台主机在两个网络上,它必须有两个IP地址。然而大多数主机都连接在一个网络,因而只有一个IP地址。与此相反,路由器有多个接口,从而有多个IP地址。

  IP地址具有层次性,由高位的可变长网络和低位的主机两部分数据组成。同一个网络上(比如以太局域网)的所有主机,其地址的网络值是相同的。

传统IP地址

  在1993年以前,IP地址被划分为五类:
Internet的网络层_第3张图片
  网络地址的管理是由一个称为Internet域名和地址分配机构(ICANN)的非营利性公司负责。ICANN一次性把部分地址空间授权给各个区域机构,这些机构再把IP地址发放给ISP和其他公司。ABCDE类IP地址的net-id和host-id都是固定死的,很难高效地利用IP地址空间。

子网划分和ICDR

  引入子网,是为了在一个组织内部灵活地分配地址块。引入CIDR(无类域间路由,Classless Inter-Domain Routing)技术是为了减少全局路由表的大小。两者本质上是同一个东西,利用子网掩码来实现,一个着重划分,一个着重聚合。所以传统的ABCDE的IP地址分类基本已经不再使用。

NAT

  但是,IP地址依旧十分匮乏。对于整个Internet而言,长期的解决方案是IPv6,但这需要很长的时间来完成。今天普遍使用的快速方案就是网络地址转化(NAT,Network Address Translation)

  NAT的基本思想是ISP为每个家庭或每个公司分配一个IP地址,用这个IP地址来传输Internet流量。在客户网络内部,每台机器有唯一的IP地址,该地址主要用来路由内部流量。然而,当一个数据包需要离开客户网络,它必须执行要给地址转换,把唯一的内部IP地址转换成那个公共的IP地址。这种地址转换使用了IP地址的三个范围,这些地址已经被声明为私有化,任何网络可以在内部随意地使用这些地址。仅有的规则是不允许包含这些地址的网络包出现在Internet上。这3个保留的地址范围是:

  • 10.0.0.0 - 10.255.255.255/8 (1677216个主机)
  • 172.16.0.0 - 172.31.255.255/12 (1048576个主机)
  • 192.168.0.0 - 192.168.255.255/16 (65536个主机)

  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

  IPv6与IPv4并不兼容,但与其他一些辅助性的Internet协议则是兼容的,包括TCP、UDP、ICMP、IGMP、OSPF、BGP和DNS。下面讨论IPv6的主要特性:

  • 128bit地址,这提供了有效的无限量的Internet地址
  • 对头部进行简化,仅包含7个字段。使得路由器可以更快地处理数据包,从而提高了吞吐率,并缩短延迟
  • 更好地支持Options。IPv4中那些必须的字段现在变成了可选,选项的表达方式也有所不同,使得路由器可以非常简单地跳过那些与它无关的选项
  • 安全方面的改进。在新的IP中,认证和隐私是安全方面的特征。然而,后来这些特征也被引入了IPv4
  • 服务质量

  IPv6头结构:
Internet的网络层_第4张图片

  • 版本(version) 字段总是6
  • 区分服务(Differentiated services,traffic class) 字段主要是区分数据包的服务类别。使用方法与IPv4数据包的同名字段一样。最低2bit用来发送显示拥塞指示,也与IPv4使用方法一致
  • 流标签(Flow Label) 字段为源端和接收方提供了一种建立伪连接的方式。
  • 有效载荷(payload length) 字段指明了紧跟在头部40bytes后面还有多少字节数。
  • 下一个头(Next header) 字段显示了IPv6的与众不同关键之处。IPv6头得以简化的原因在于它可以有额外的(可选)扩展头,该字段指明了当前头之后还会有哪些扩展头(当前已经定义了6中扩展头),如果有的话。如果当前是最后一个IP头,那么next header字段指定了该数据包将被传递给哪个传输层协议处理(TCP、UDP等)
  • 跳数限制(hop limition) 用来避免出现数据包永垂不朽的情形。实际上它和IPv4中的TTL是一样的
  • 源地址和目标地址 128bit长

  取消的字段:

  • IHL:IPv6头没有固定的长度
  • Protocol:Next Header字段指明了IP头后面跟的是什么
  • 和分段有关的字段(identification、fragment offset、DF/MF):让主机一开就发送大小合适的数据包,避免在包传输过程中分段。通过路径MTU发现过程就能够做到这一点
  • Checksum:计算校验和极大地降低性能。现在使用的大多是可靠网络,而且数据链路层和传输层通常有他们自己的校验和,在网络层再进行校验和,相比于它付出的代价是不值得的

  去掉了这些特性之后,得到的是一个精简的网络层协议。因此这份设计方案满足了IPv6的目标,即一个快速,但灵活,并且具有足够大地址空间的协议。
  有关扩展头在这里不做描述

Internet 控制协议

  网络层除了用于数据传输的IP协议以外,Internet还有几个辅助控制协议。包括ICMP、ARP、DHCP。这里介绍都都是关于IPv4的控制协议

ICMP——Internet控制消息协议

  路由器严密监视Internet的操作。当路由器在处理一个数据包的过程中发生了意外,可以通过 Internet控制消息协议(ICMP,Internet Control Message Protocol)数据包源端 报告有关事件;ICMP还可以用来测试Internet。已经定义的ICMP消息类型大约有10多种,每一种ICMP消息类型都被封装在一个IP数据包中。下面列举几个重要的消息类型:

  • DESTINATION UNREACHABLE(目的地不可达:数据包无法传递):当路由器不能定位一个目标,或者当一个设置了DF标志位的数据包由于途径一个“小数据包”网络而不能被递交时,罗尤其可以使用目的地不可达消息来报告这种情况
  • TIME EXCEEDED(超时:TTL字段减为0):当一个数据包由于它的TTL(生存期)达到0而被丢弃时,路由器发送超时消息。这个错误消息可巧妙地用于Traceroute工具(Traceroute可以发现从主机到目的地路径上的IP地址,而且不需要任何特权网络的支持就能够发现这种信息。方法是这样的:向目的地发送一系列数据包,分别将TTL设置为1,2,3,…,这样沿途的路由器就会乖乖地发送一个超时消息给发送主机。这样主机就可以确定沿途的路由器IP地址,以及跟踪路径各部分的统计数据和时间开销,这不是超时消息的本意,但它也许是最有用的网络调试工具)
  • PARAMETER PROBLEM(参数问题):这个消息表示在头字段中检查到一个非法值。这个问题说明了发送主机的IP软件中存在错误,或者也可能是中途路由器软件存在错误。
  • SOURCE QUENCH(源抑制):以前用来抑制那些发送太多数据包的主机。当一台主机接收到这条消息时,它应该将发送速度减慢下来。这种消息现在很少使用了,因为当拥塞发生时,再发送这些包无疑是火上浇油。现在,Internet的拥塞控制任务主要由传输层完成
  • REDIRECT(重定向):当路由器注意到一个数据阿波看起来被错误地路由时,它使用重定向消息将可能的错误信息告诉源端主机
  • ECHO(回显)和ECHO REPLY(回显应答):可以用来判断一个指定的目标是否可达,以及是否还活着。目标主机接收到回显消息之后,应该例及送回一个回显应答消息。这些消息主要被ping 工具用在探测Internet上是否存在某一台特定的主机
  • TIMESTAMP REQUEST(请求时间戳)和TIMESTAMP REPLY(应答时间戳):在应答消息中包含了请求消息的到达时间和应答消息的发出时间,此项设施可以用来测量网络性能。
  • ROUTER ADVERTISEMENT(路由通告)和ROUTER SOLICITATION(路由器恳求):使得主机拥有寻找附近路由器的能力。主机至少需要学习一个路由器的IP地址才能发送离开本地网络的数据包

  还有其他的消息类型,详细的内容可以参考:Internet Control Message Protocol (ICMP) Parameters

ARP——地址解析协议

  仅有IP地址还不足以发送数据包,数据链路层硬件网卡,比如以太网卡并不理解Internet地址。在以太网的环境里,每一块NIC在出厂时都配置了一个唯一的48位以太网地址。以太网NIC的制造商从IEEE请求一块以太网地址,确保不会出现两块网卡有相同的地址。NIC根据其48位的以太网地址来发送和接收帧,它们对32位的IP地址完全一无所知。
  ARP 解决了这个问题。可以参考 ARP协议原理

DHCP——动态主机配置协议

  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 详解

路由协议

OSPF——内部网关路由协议

  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详解

BGP——外部网关路由协议

  在一个AS内部,推荐使用的是OSPF和IS-IS。在AS之间,则可以使用另外一个协议,称为边界网关协议(BGP,Border Gateway Protocol)。域内西医所需要做的只是尽可能有效地将数据包从源端传送到接收方,它不必考虑政治方面的因素。相反,域间路由协议则必须考虑大量和有关政治的因素。
  参考:BGP-边界网关协议

参考

ip数据报格式

IP地址的分类及范围详解:A、B、C、D、E五类是如何划分的

NAT地址转换原理

IPv6数据包格式

ARP协议原理

DHCP工作过程详解

DHCP 详解

OSPF详解

BGP-边界网关协议

你可能感兴趣的:(网络)