计算机网络-网络层
1. 概述
计算机网络是基于的TCP/IP四层模型所实现的,层数可以理解为执行的每一个步骤。下图就反应了从某台计算机到另一台计算机要执行的步骤图。
这个步骤图可以使用以太网(Ethernet)技术实现。以太网技术是一种局域网技术,应用于数据链路层的协议,相邻设备间的数据帧传输是可以实现的。
上图中,计算机A与计算机B可以仅通过以太网技术就可以互相访问,但是计算机A与计算机C的访问就需要用到网络层的内容了。
网络层的主要任务是决定数据在网络中的路径,也就是数据路由,实际的网络世界是错综复杂的,物理设备之间通过网络层IP协议屏蔽掉了物理网络之间的差异,使网络中的主机不需要关心网络的细节。
IP协议将复杂的互联网变成一个简单的虚拟互联网络,使得网络层可以屏蔽底层细节专注网络层的数据传送。
2. IP协议
IP协议数据内容的详解就不在此赘述了。当计算机从应用层开始向下传递到硬件层的过程中,每经过一层就相当于戴了个新的套,即在较高一层传过来数据的基础上又封装了一层数据。反过来从硬件层向上的过程就是一层层套被剥开。
图中红色的Head
、Data
就是属于IP协议的,但是在以太网协议看来蓝色的Head
是帧头,红色部分都是Data
。当然,蓝色的Head
中就包含了发送方与接收方的MAC地址,红色的Head
就包含了发送方与接收方的IP地址(要注意这个IP地址是不变的)。下面直接进入具体的转发流程来解释为什么IP协议可以将网络简化。
步骤①
- 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)。
在物理层上,主要实现硬件间0
和1
的传输,数据链路层负责对0
、1
信号进行分组。数据链路层中的以太网协议对一组电信号进行规定,这一组电信号包含标头(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数据报中的,由该协议衍生出的两个应用分别是ping
和traceroute
。
4.1 Ping
通过ping
IP地址,可以知道当前主机与要ping
的IP地址间的连接情况,一般发生断网后还可以分别ping
回环地址(127.0.0.1
)、网关地址(192.168.1.1
,这个不一定)、远端地址(www.baidu.com
)。ping
的原理是向目的IP地址发送ICMP Echo
请求报文,目的主机收到后回复Echo
,ping
根据时间和成功响应的次数估算数据包往返时间以及丢包率。
4.2 Traceroute
traceroute
可以探测到IP数据报在网络中走过的路径。如下图中从A
到B
,具体的执行过程是开始封装一个TTL为1的数据报文发送,到达中型网络后减为0,中型网络会回送A
一个ICMP不可达报文,A
会将中型网络的IP地址记录下来。A
会再封装一个TTL为2的数据报文发送到大型网络,做重复上面的操作,直到到达B
。B
回复给A
一个ICMP不可达报文,A
就知道了到达B
所经过的IP地址以及这些IP地址的往返时间。
但是如何找到最短路径从A
到B
呢?如何构建最合适的路由表呢?路由器这么多,是如何同步工作的呢?这就需要引入图论算法以及自治系统来解决了。