avatar

计算机网络-网络层

计算机网络-网络层

1. 概述

计算机网络是基于的TCP/IP四层模型所实现的,层数可以理解为执行的每一个步骤。下图就反应了从某台计算机到另一台计算机要执行的步骤图。

TCP-IP四层模型.PNG

这个步骤图可以使用以太网(Ethernet)技术实现。以太网技术是一种局域网技术,应用于数据链路层的协议,相邻设备间的数据帧传输是可以实现的。

网络层01.PNG

上图中,计算机A与计算机B可以仅通过以太网技术就可以互相访问,但是计算机A与计算机C的访问就需要用到网络层的内容了。

网络层的主要任务是决定数据在网络中的路径,也就是数据路由,实际的网络世界是错综复杂的,物理设备之间通过网络层IP协议屏蔽掉了物理网络之间的差异,使网络中的主机不需要关心网络的细节。

网络层IP协议.PNG

IP协议将复杂的互联网变成一个简单的虚拟互联网络,使得网络层可以屏蔽底层细节专注网络层的数据传送。

2. IP协议

IP协议数据内容的详解就不在此赘述了。当计算机从应用层开始向下传递到硬件层的过程中,每经过一层就相当于戴了个新的套,即在较高一层传过来数据的基础上又封装了一层数据。反过来从硬件层向上的过程就是一层层套被剥开。

IP协议数据报文.PNG

图中红色的HeadData就是属于IP协议的,但是在以太网协议看来蓝色的Head是帧头,红色部分都是Data。当然,蓝色的Head中就包含了发送方与接收方的MAC地址,红色的Head就包含了发送方与接收方的IP地址(要注意这个IP地址是不变的)。下面直接进入具体的转发流程来解释为什么IP协议可以将网络简化

计网-IP协议转发流程.PNG

步骤①
  • A发出目的地为C的IP数据报,查询(A的)路由表发现下一跳为E
  • A将IP数据报交给数据链路层(这里用到了ARP协议以知道MAC地址,后面叙述),并告知目的MAC地址是E(数据链路层在IP数据报上再包装上MAC地址,每次从网络层到数据链路层的这一步都会改写MAC地址,但是从未改变IP地址
  • 数据链路层填充源MAC地址A和目的MAC地址E
  • 数据链路层通过物理层将数据发送给E
步骤②
  • E的数据链路层接收到数据帧,把帧数据交给网络层
  • E查询(E的)路由表,发现下一跳为F
  • E把数据报交给数据链路层,并告知目的MAC地址为F
  • E的数据链路层封装数据帧并发送
步骤③
  • F的数据链路层接收到数据帧,把帧数据交给网络层
  • F查询(F的)路由表,发现下一跳为C
  • F把数据报交给数据链路层,并告知目的MAC地址为C
  • F的数据链路层封装数据帧并发送

路由表的作用就是存储本地计算机(路由器)可以到达的网路目的地址范围和如何到达的路由信息
每次执行步骤就像是一跳一跳的,所以也被称作逐跳(hop-by-hop)。

在物理层上,主要实现硬件间01的传输,数据链路层负责对01信号进行分组。数据链路层中的以太网协议对一组电信号进行规定,这一组电信号包含标头(Head)数据(Data)标头中就包含接收、发送双方(其实就是两块网卡)的MAC地址。那负责发送的网卡如何知道负责接收的网卡的MAC地址呢?

3. ARP协议

ARP协议就可以帮助我们从IP地址的信息上得到MAC地址。

这里要分两种情况讲,一种是两台主机不在同一个子网络,那么是需要通过将数据包传送到两个子网络连接处的网关(gateway),让网关处理。

另一种是在同一个子网络下,可以用ARP协议得到对方的MAC地址。这一协议的可以运行的关键就是建立了一张ARP缓存表,表中缓存了IP地址到硬件地址之间的映射关系。

  • 如果A要找到B的MAC地址,A知道B的IP地址,那么A会将IP报文交给数据链路层,然后查询ARP缓存表,如果有就知道了B的MAC地址,数据链路层就会填充A的MAC地址(源地址)和B的MAC地址(目标地址),最后发送。
  • 如果ARP缓存表中没有MAC地址,ARP协议就会发出一个数据包(包含在以太网数据包中),数据包中包含他所要查询的主机的IP地址,对方的MAC地址这一栏中填FF:FF:FF:FF:FF:FF,这便是一次广播地址。所在的子网络的每一台主机都会收到这个数据包,取出要查询的IP地址与自己的IP地址比较,相同的话就做出回复,并报告自己的MAC地址。A会将MAC地址与IP地址登记在ARP缓存表中,但是不会永远保存,因为IP地址是逻辑地址,可能会发生变化。

ARP协议虽然用到了数据帧(位于数据链路层),但是因为ARP协议也用到了IP地址,所以归为网络层。有了ARP协议后,就可以得到同一子网络内的主机MAC地址,然后发送数据包了。

4. ICMP协议及其应用

ICMP协议(网际控制报文协议)是可以报告错误信息或者异常情况的一种协议协议是封装在IP数据报中的,由该协议衍生出的两个应用分别是pingtraceroute

4.1 Ping

通过pingIP地址,可以知道当前主机与要ping的IP地址间的连接情况,一般发生断网后还可以分别ping回环地址(127.0.0.1)、网关地址(192.168.1.1,这个不一定)、远端地址(www.baidu.com)。ping的原理是向目的IP地址发送ICMP Echo请求报文,目的主机收到后回复Echoping根据时间和成功响应的次数估算数据包往返时间以及丢包率。

4.2 Traceroute

traceroute可以探测到IP数据报在网络中走过的路径。如下图中从AB,具体的执行过程是开始封装一个TTL为1的数据报文发送,到达中型网络后减为0,中型网络会回送A一个ICMP不可达报文A会将中型网络的IP地址记录下来。A会再封装一个TTL为2的数据报文发送到大型网络,做重复上面的操作,直到到达BB回复给A一个ICMP不可达报文A就知道了到达B所经过的IP地址以及这些IP地址的往返时间。

Traceroute.PNG

但是如何找到最短路径从AB呢?如何构建最合适的路由表呢?路由器这么多,是如何同步工作的呢?这就需要引入图论算法以及自治系统来解决了。

Author: TheOutsider
Link: http://yoursite.com/2020/04/09/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%BD%91%E7%BB%9C%E5%B1%82/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.