前言
本系列的内容出自《图解TCP/IP》、《图解HTTP》、《图解网络硬件》三本书。
读完本系列,你将会了解路由器、交换机、中继器等设备的工作原理,了解TCP、IP、HTTP协议的内容。
网络分层模型
在介绍众多协议之前,我们先介绍下分层模型。
在计算机诞生之初,每家计算机的厂商生产仅仅能和自家产品通信的电脑,导致市面上的电脑大多数即使在物理层面上连接起来也无法通信。
随着计算机重要性的不断提高,很多公司意识到兼容性的重要性,人们开始着手研究让不同厂商生产的电脑能够互相通信的方法,ISO(国际标准化组织)制定了一个国际标准OSI(open System Interconnection
开放式通信系统参考模型)用于不同类型设备的网络通信,这一模型将网络通信协议必要的功能划分为7层。
分层 | 名称 |
7 | 应用层 |
6 | 表示层 |
5 | 会话层 |
4 | 传输层 |
3 | 网络层 |
2 | 数据链路层 |
1 | 物理层 |
遵循这种模型标准生产的设备之间就可以互相通信了。
❝分层是一种模块化的思想,好处是当其中一种环节出现问题,不会影响别的模块运行。缺点是过度的分层会导致相同的逻辑可能会在多个地方实现。
❞
OSI参考模型各个分层的作用
每个分层的都专注实现自己应该做哪些事,实现哪些功能,互不干扰。
网络设备
计算机网络是指计算机与计算机相连而组成的网络。计算机之间的通过电缆连接,电缆包括:双绞线电缆、光纤电缆、同轴电缆、串行电缆等。不同的数据链路对应的电缆类型也不相同。
❝我们要用发展的思维学习互联网,计算机是发展了很多年的产物,在不同的发展阶段,产生了不同的物理设备以及网络协议,即使发展至今,部分古老的设备和协议还是在迭代使用中。
❞
如果组建一个完整的网络,会涉及到更多的设备。
这些设备也可以根据OSI分层模型分类。
分层 | 名称 | 硬件 |
7 | 应用层 | 4-7层交换机 |
6 | 表示层 | 4-7层交换机 |
5 | 会话层 | 4-7层交换机 |
4 | 传输层 | 4-7层交换机 |
3 | 网络层 | 网卡、路由器 |
2 | 数据链路层 | 网桥 |
1 | 物理层 | 中继器 |
而TCP/IP分层模型与此类似,
分层 | 名称 | 硬件 |
5 | 应用层 | 4-7层交换机 |
4 | 传输层 | 4-7层交换机 |
3 | 网络层 | 网卡、路由器 |
2 | 数据链路层 | 网桥 |
1 | 物理层 | 中继器 |
同时,每种设备都会有一种协议规定它应该实现哪些功能。
分层 | 名称 | 硬件 | 协议(举例) |
7 | 应用层 | 4-7层交换机 | HTTP、SSH |
6 | 表示层 | 4-7层交换机 | ASCII、Unicode |
5 | 会话层 | 4-7层交换机 | SQL、TLS |
4 | 传输层 | 4-7层交换机 | TCP、UDP |
3 | 网络层 | 网卡、路由器 | IP、ARP |
2 | 数据链路层 | 网桥 | Wan、Lan、PPP |
1 | 物理层 | 中继器 | -- |
下面介绍下各种网络设备:
- 传输介质:不同的数据链路对应不同的传输介质,每种传输介质的传输速率以及工作原理也不尽相同。
- 中继器:在物理层上延长网络的设备,将电缆传过来的电信号或者光信号经过中继器波形放大后再传给另一个电缆
- 网桥(L2交换机):网桥是数据链路层上连接两个网络的设备,它能够识别数据链路层上的数据帧(后文会详细介绍数据帧),并将这些数据帧临时储存再内存中,再重新生成信号作为全新的数据帧发送给相连的另一个网段。网桥以MAC地址进行转发数据帧。
- 路由器(L3交换机):路由器是网络层上连接两个网络、并对分组报文转发的设备。路由器根据IP地址转发报文。
- 负载均衡器(L4~7层交换机):负载均衡器负责传输层到应用层的数据。
- 网关:网关也是处理从传输层到应用层数据的设备,不同的网关除了转发还会对数据进行转换,一个很好的例子,互联网邮件可以和手机邮件互相发送邮件是因为再互联网和手机之间建立了网关,网关负责将不同的邮件类型进行翻译和转发。
通信示例
接下来,我们以发送一个电子邮件为例展示通信的简单流程。
发送端:
- 应用程序处理:首先,应用程序中会进行编码(例如UTF-8)处理。编码转化后,将数据发送给下一层的TCP,再做实际的转发处理。
- TCP模块的处理:在邮件实际发送的的那一刻建立TCP连接,在发送完毕后断开连接。为了实现TCP的可靠传输,会在数据的前端附加一个TCP首部。TCP 首部中包括源端口号和目标端口号以及校验和(判断数据是否损坏)。随后将附加了TCP首部的包再发送给IP
- IP模块的处理:IP在TCP传过来的TCP首部首部的前端加上IP首部。IP首部中包含接收端地址以及发送端地址。紧随IP首部的还有用来判断其后面数据是TCP还是UDP的信息。包生成后,参考路由控制表决定接受此IP包的路由或主机。随后,包将被发送给连接这些路由器或主机网络接口的驱动程序,以实现真正发送数据。
- 网络接口(以太网驱动)的处理:以太网驱动给这传过来的数据附加上以太网首部并进行发送处理。以太网首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据的协议。根据上述信息产生的以太网数据包将通过物理层传输给接收端。
发送的实际数据帧格式如下:
接收端:
在接收端包的接收流程是发送流程的逆序过程。
- 网络接口(以太网驱动)的处理:主机收到以太网包以后,首先从以太网的包首部找到MAC地址判断是否为发给自己的包。如果不是发给自己的包则丢弃数据。而如果接收到了恰好是发给自己的包,就查找以太网包首部中的类型域从而确定以太网协议所传送过来的数据类型。在这个例子中数据类型显然是IP包,因此再将数据传给处理IP的子程序,如果这时不是IP而是其他诸如ARP的协议,就把数据传给ARP处理。
- IP模块的处理:IP模块收到IP包首部及后面的数据部分以后,也做类似的处理。如果判断得出包首部中的IP地址与自己的IP地址匹配,则可接收数据并从中查找上一层的协议。如果上一层是TCP就将IP包首部之后的部分传给TCP处理;如果是UDP则将IP包首部后面的部分传给UDP处理。对于有路由器的情况下,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送达的主机或路由器以后再转发数据。
- TCP模块的处理:在TCP模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。最后检查端口号,确定具体的应用程序。数据接收完毕后,会发送一个确认回执给发送端。如果发送端未收到,则会反复发送。数据完整的接收以后,会根据端口号,将数据发送给特定的应用程序。
- 应用程序的处理:接收端应用程序会直接接收发送端发送的数据。通过解析数据可以获知邮件的收件人地址是乙的地址。如果主机B上没有乙的邮件信箱,那么主机B返回给发送端一个“无此收件地址”的报错信息。但在这个例子中,主机B上恰好有乙的收件箱,所以主机B和收件人乙能够收到电子邮件的正文。邮件会被保存到本机的硬盘上。如果保存也能正常进行,那么接收端会返回一个“处理正常”的回执给发送端。反之,一旦出现磁盘满、部件未能成功保存等问题,就会发送一个“处理异常”的回执给发送端。
由此,用户乙就可以利用主机B上的邮件客户端,接收并阅读由主机A上的 用户甲所发送过来的电子邮件——“早上好”。
接下来我们根据每个分层,详细的了解对应的物理设备和相关协议。
物理层与传输介质
物理层的任务是将数字数据转换为传输介质上的模拟信号,并将模拟信号转换回数字数据。
传输介质
不同的数据链路对应不同的传输介质,每种传输介质的传输速率以及工作原理也不尽相同。
我们以以太网的双绞线电缆为例,了解下数据的传输原理:
以太网的双绞线电缆采用差分信号进行传输:将单端信号进行差分处理,处理后的是一个和原信号相同的发送数据+、一个与原信号相反的发送数据-。双绞线电缆将这两组信号通过一对线缆绕对传输,可以对信号的变化相互抵消,从而提高抗干扰能力。
转换过程会因为不同的标准采用不同的编码方式,常见的编码方式有:曼彻斯特编码、MLT-3编码等。
🎉 总结
本文介绍了OSI参考模型和基于该模型的简单通信示例。最后介绍了以太网双绞线电缆的传输机制。本文作为该系列的开篇,涉猎的内容比较广,但是不够深,后面几篇将会深入介绍每层的内容。
🚀 最后
本文的分享就到这了,后面几篇文章我会分享数据链路层、网络层、传输层、应用层的相关技术,例如:mac地址与寻址转发、以太网帧格式、路由控制表与路由转发、DNS解析、HTTP协议等内容。关注我不迷路。