计算机网络篇——网络层

96
Tamp_
2017.12.26 09:49* 字数 3166

计算机网络系列

IP协议

IP协议的作用

网络层的主要作用是“实现终端节点之间的通信”,也就是点对点的通信。IP协议主要负责将数据包发送给最终的目标计算机。前面我们讲过链路层主要是负责数据在链路中进行传输,那么网络层和链路层有什么联系呢?

举个栗子,把链路层比作各种交通轨道,它可以把世界各地的交通连接起来并传输,但是它并没有规定始发地和目的地, 而网络层就相当于你的车票,车票上有始发地和目的地,把车票交给链路层,它就知道你的需求,就把你运输到相应的目的地,而具体通过什么交通工具(采用什么链路层协议),网络层是不关心的,只要你能安全送达就可以了。

IP地址

IP地址(IPv4)由32位正整数来表示。通常每一个主机都被分配了一个这样的IP地址。IP地址分为“网络标识”和“主机标识”两部分,根据“网络标识”的位数对IP地址进行了分类。

IP地址的分类
  • A类地址从1到8位是网络标识,后28位是主机标识,以“0”开头,所以它的十进制表示范围是0.0.0.0~127.0.0.0。(十进制二进制的转换这个不用说吧)
  • B类地址从1到16位是网络标识,以“10”开头,所以它的十进制表示范围是128.0.0.1~191.255.0.0
  • C类地址从1到24位为它的网络标识,以“110”开头,它的十进制表示范围是192.168.0.0~239.255.255.0。
  • D类地址的32位都是网络标识,它没有主机标识,以“1110”开头,它常被用于多播。

多播:多播可以把数据包同时发送给指定的多台主机,因此它的效率高于广播,且它能穿透路由,所以可以向其它网络发送数据包。

用一张图来说明一下单播、多播与广播的区别:

单播、多播与广播的区别

子网掩码

由于IP地址的分类,对IP地址造成了极大的浪费(一个A类地址可以有1600多万的主机,但是一个B类地址只能有6万多的主机,而C类地址的主机上限则为254个),显然这样划分也是不够灵活的,所以就产生了一种子网掩码的技术,来对IP地址进行更加灵活、细粒度更高的划分。

子网掩码用二进制表示的话,也是32位,它对应IP地址网络标识的位全为1,主机标识位全为0。

使用子网掩码来划分IP地址

由图可以看到,子网掩码可以把一个B类IP地址的网络号扩展到了26位(10位子网掩码),此时根据网络号就可以划分不同的子网,每个子网也可以分配一定数量的主机。

路由控制

路由控制(Routing)是指将分组数据发送到目标地址的功能,这个功能一般由路由器完成。(不要与家里用的小型无线路由器混为一谈)

路由器通过保存路由表,来对路由进行控制。类似于你在旅行的时候,你想要从A到B,但是A和B中间还有很多其它的城市,你要通过哪些城市才能顺利从A到B呢,路由表就是保存着这些“航线”信息。

IP地址与路由控制

如图,主机A想把数据包发送给目标地址为10.1.2.10的主机B,它先通过查找它的路由,然后根据路由表的信息把数据包发送给默认路(IP地址为0.0.0.0/0表示默认路由)由10.1.1.1的路由器1。然后路由器1查找它的路由表,通过对比可以知道,目标地址10.1.2.10与圈出的地址最为吻合(一般采用最长匹配法则)。然后路由器1继续讲数据包转发给地址为10.1.0.2的路由器2,然后一直转发知道转发给目标主机B。

IP分割处理与再构处理

在数据链路层中,其实每一种数据链路都有它的最大传输单元(MTU),所以如果你传输的数据包大于了数据链路的最大传输单元,就需要对它进行分割。

IP报文的分片与重组

路径MTU发现

由于分片机制,会对路由器带来强大的负担,而且如果在分片处理中某个分片丢失,会造成整个IP报文作废。因此就产生了“路径MTU发现”技术。路径MTU发现其实就是从发送主机按照路径MTU的大小将数据报进行分片后进行发送。

路径MTU发现的机制

在发送端发送IP数据报时,会将其首部的分片禁止标志位设置为1,根据这个标志,途中的路由器即使遇到需要分片才能处理的打包,也不会去分片。而是将包丢弃,随后通过一个ICMP的不可达消息将数据链路上MTU值发送给发送主机。下一次发送主机就会根据这个MTU值进行分片

重组

接收端根据IP首部中的标志(Flag)和片偏移(Fragment Offset)进行数据重组。

IP的首部(IPv4)

IPv4的首部

首部结构比较复杂,说几个重要一点的吧。

  • 版本(Version):由4bit构成,标识IP首部的版本号。如IPv4的版本号位4,IPv6的版本号为6.

  • 总长度(Total Length):标识IP首部与数据部分合起来的总字节数。该字段长16bit,因此IP包的最大长度为65535(2^16)字节。

  • 标识:用于分片重组。同一个分片的标识值相同,不同分片的标识值不同。

  • 标志(Flags):由3bit组成,表示包被分片的相关信息。每一位的含义如下


    标志段各位含义
  • 片偏移:标识被分片的每一分段相对于原始数据的位置,单位为8字节。

  • 生存时间(TTL):记录当前包在网络上应该生存的期限。每经过一个路由器,它的值就会减一,当变为0则丢弃该包。

  • 协议:表示IP首部下一个首部的协议。即传输层的协议。

  • 首部校验和:用于检查首部部分是否被破坏。

IPv6

IPv6是为了解决IPv4地址耗尽而产生,它的长度是IPv4的4倍,即128bit,一般写成8个16位字节。

IPv6的特点

  • IP地址的扩大与路由表控制的聚合
    IP地址依然适应互联网的分层构造。分配与其地址结构相适应的IP地址,尽可能避免路由表膨大
  • 性能提升
    包首部长度采用固定的值(40字节),不再采用首部检验码。简化首部结构,减轻路由负荷。
  • 支持即插即用功能
  • 采用认证与加密功能
  • 多播、Mobile IP成为扩展

IP协议的相关技术

IP旨在让最终目标主机收到数据包,但是仅凭IP协议是无法完成这一工作的。如怎样解析主机名称和MAC地址,以及数据包在发送过程中产生异常如何处理。所以还有一些很重要的技术来帮助IP一起工作。

DNS(域名解析系统)

我们平常在访问某个网站的时候都不是使用的IP地址,而是通过“网址”来进行访问,那么计算机网络如何通过“网址”来寻找对应的主机呢?这就是DNS的工作了。所谓的“网址”,其中包含的最重要的信息就是域名,域名是指为了识别主机名称和组织机构名称的一种具有分层的名称。它和IP地址都可以对应一台主机,DNS协议的作用就是将域名转换为IP地址,以方便寻找对应的主机。

DNS查询

如图所示,计算机要访问某个网站时,它都是向DNS服务器查询IP地址,然后DNS服务器按层进行查询。

ARP

ARP是以目标IP地址为索引,来定位下一个应该接受数据分包的网络设备的对应的MAC地址,简单点说,ARP就是用来进行IP地址到MAC地址的对应。

ARP的工作原理:简单点说,ARP就是通过ARP请求与ARP响应两种包来确定MAC地址。

ARP工作机制

如上所示,每次发送请求前都需要先发送ARP请求来确定MAC地址,这样的效率就太低了。所以通常的做法是把获取到的MAC地址缓存一段时间。一般来说,一旦源主机向目标地址发送一个数据包,接下来继续发送多次的概率非常大,因此这种缓存非常容易命中。

为什么要同时有MAC地址和IP地址?

肯定有人会产生这样的疑问,明明通过IP地址就可以确定一条主机了,为什么还要有MAC地址?

如果在相同的链路中,确实通过广播就能发送到对应的主机,此时,仅仅使用IP地址也能工作。但是如果两台通信的主机处于不同的链路上,此时就得通过路由器来进行转发,而路由器是工作在链路层的,此时你想把数据报发送哦出去,必须得先发送给路由器的MAC地址。

MAC地址与IP地址的作用

此外,假如不适用IP地址,而是通过MAC地址连接世界上所有网络中的主机和结点,我们想象一下,网桥和交换机等设备得维护一张多么大的表格来保存所有MAC地址。

NAT和NAPT

NAT是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术,它实际上是为正在面临的IPv4地址枯竭而产生。

NAT

在NAT路由器内部,有一张自动生成的用来转换地址的表。当10.0.0.10163.221.120.9发送第一个包时生成这张表,并按照表中的映射关系进行处理。但是这样对应的话好像并没有完全减少全局IP地址的数量,如果私有网络中多台主机要和外部通信时,很可能造成全局IP不够用的情况,此时,就可以用包含端口号一起转换方式(NAPT)。

NAPT

此时,在转换IP地址的同时,再加上端口号进行区分,就可以节省很多全局IP地址了(同一全局IP地址对应不同端口号不同私有IP地址)。

不管是 NAT 还是 NAPT,都需要路由器路由器内部维护一张自动生成的地址转换表。以 TCP 为例,建立 TCP 连接首次握手的 SYN 包发出时会生成这个表,关闭连接时会发出 FIN 包,收到这个包的应答时转换表被删除。

日记本
Web note ad 2