计算机网络从上个世纪开始发展,到今天已经已经有了一套成熟的解决方案。

我们一般把计算网络分层五层,分别是应用层、传输层、网络层、数据链路层和物理层,结构如下图所示:

以上的这种分层是我们比较常用的一种方式,从下到上的过程也是一层一层的抽象过程,每上一层也增加了一层抽象。其实,除了这种分层之外,ISO也提供了一种分层方式,但是不太常用,我们只讨论以上这一种分层的方式。

1.物理层和数据链路层

物理层数据链路层提供了点到点的数据传输方式,这两个协议提供了点到点的数据传输。

物理层是用来传输数据的物理介质,一般是由光纤、双绞线、同轴电缆等物理材料构成,保证从节点 A 到节点 B 能够传输数据。因为信号的高低电平的保持时间不好计算,所以我们一般用信号的变化情况来传输信号(曼彻斯特编码)。

数据链路层则是用来控制数据在物理介质上面传输的一种方式,它尽可能的保证数据能够从节点 A 传输到节点 B。

2.网络层

网络层的主要目的是把所有节点的主机构建成为一张网,这样才能称之为网络,网络层的主要功能是对网络中节点进行操作。因为物理层和数据链路层已经保证了数据可以在节点到节点之间传输了,而网络层的作用就是保证数据从某一个节点出发,使信号可以传送到一条正确的数据链路上。

如上图所示,从节点 A 到节点 F 之间要经过多个路由器,那么当数据到达了某一个路由器节点之后,路由器应该怎么做呢?

其实,路由器会对数据进行解析,读取它的报文头部,分析应该把数据传送什么方向,然后把数据发送到和路由器相连的某一条链路上,数据就在链路上继续前进,遇到了新的路由器的时候,新的路由器会进行类似的操作,然后一直到数据被发送到目的地。在这里我们可以看到,数据最终是通过 A → C → E → F 这样的顺序被从源地址发送到了目的地址,中间经过了 2 个路由器。

在这里我们可以做一个类比,把网络类比成一个快递公司,而网络中的数据就是快递的包裹。

  1. 源主机打包数据,给源数据加上网络报文;寄件人给包裹写上收件地址,把包裹送到快递公司。
  2. 数据在网络中传输,这里传输的物理介质可能是光纤、双绞线等等;快递开始被运送,运送的交通工具可能是飞机、火车等等。
  3. 数据到达路由器,由路由器根据数据网络报文来判断数据接下来应该被发往哪条数据线路,这里使用到了路由选择的技术;快递到达城市快递中转中心,中转中心根据包裹的收件地址来判断接下来包裹应该被发往什么地方,随后被放到相应的交通工具上继续运送。
    • 有类网中的 IP 路由选择:当一个数据到达某一个路由器时,路由器读取数据报文中的目的地址,然后把目的地址与路由器内部的路由表进行比对,由该 IP 地址得出接下来应该把数据发往与当前路由器相连哪一个路由器,并且得出应该由当前路由器的哪一个接口发出数据。如果目的地址主机直接与当前路由器相连,则路由器不再把数据发往其他路由器,而是直接把数据发送给目标主机。(如果路由表中查不到该 IP 地址,则把该数据发往路由表中的默认路由器;如果路由表中未设置默认路由器,则丢弃该数据)如下图[1]
  4. 遇到新的路由器,重复步骤三;包裹送到了新的中转中心,重复步骤三。
  5. 数据到达最终节点,传输完成;包裹被送到收件人手中,快递完成。

下面这张图可以体现以上这种过程[1]

在网络层,我们最常使用的协议就是 IP 协议,IP 协议主要是给网络数据打上了一个 IP 报文,这个报文可以帮助路由器来决定把数据发送到哪里去。

IP 报文内容比较多,可以在查到,这里介绍几个比较常用的。

  1. TTL(TIME-TO-LIVE):即跳数(hop),用于限制数据报在因特网上所经过的路由器数,每经过一个路由器,就 -1,如果路由器发现心跳小于 0,就把该数据丢弃。
  2. 目标地址:数据应该被发送到的的目标主机的 IP 地址。

用 IP 来标识一个主机,会使用到 IP 地址,此时该主机拥有一个独一无二的 IP 地址,相当于日常生活中的门牌号,我们可以通过这个 IP 地址来给该主机发送数据。

IP 地址的组成:网络号 + 主机号

3.Wiki

  • NAT:网络地址转换技术

  • NAPT/PAT/过载NAT:端口地址转换技术,即一个子网络对应一个路由器端口号

  • ARP 协议:从某一个主机的 IP 地址得到它的 MAC 地址的方式。源主机通过广播的方式发送一个 IP 地址,然后在所有收到此 IP 地址的主机中,符合要求的主机(IP 地址和广播的 IP 地址一致的)就会把它的 MAC 地址发送回来

  • DHCP 协议:可以使客户机动态的获取一个 IP 地址

注[1]:图片摘自网易云课堂计算机网络之构造互联网 - 张永民