目录
[1. 网络的出现](#1. 网络的出现)
[2. 协议](#2. 协议)
[2.1 何为协议](#2.1 何为协议)
[2.2 协议分层](#2.2 协议分层)
[3. OSI七层模型](#3. OSI七层模型)
[4. TCP/IP四层(五层)协议](#4. TCP/IP四层(五层)协议)
[5. 为何要有TCP/IP协议](#5. 为何要有TCP/IP协议)
[6. 网络传输](#6. 网络传输)
[6.1 局域网通信](#6.1 局域网通信)
[6.2 数据包包装和分用](#6.2 数据包包装和分用)
[6.3 IP地址](#6.3 IP地址)
[6.4 跨网段传输](#6.4 跨网段传输)
1. 网络的出现
在计算机技术的早期阶段,这些精密的设备主要被科学家们用于复杂的计算任务。然而,科学研究往往需要团队合作,而团队协作则意味着数据的共享是必不可少的。为了实现有效的合作,科学家们必须找到将数据从一台计算机传输到另一台计算机的方法,由此催生了网络互联的初步构想。
最初,两台主机之间的通信相对简单,只需通过数据线直接连接即可完成数据传输。然而,随着网络规模的扩大,主机数量增多,多台主机同时发送消息时,数据冲突和碰撞现象频发,这导致了数据传输的丢失和效率低下。为此,交换机应运而生,有效地解决了这一问题。而当主机之间的距离逐渐拉大,为确保数据能够准确无误地抵达目的地,路由器便承担起了定位和指引数据传输路径的重任。交换机和路由器将多台主机连接起来,形成了我们所说的局域网。
局域网的普及和发展,进一步推动了网络的扩展。广域网便是由若干个较大的局域网相互连接而成的网络体系,它跨越了地理界限,实现了更大范围的数据交换和资源共享。
2. 协议
2.1 何为协议
何为协议?协议是经过谈判、协商而制定的共同承认的约定或者标准。例如,摩斯电码便是一种早期的通信协议。
摩斯电码是一种基于时间序列的信号编码系统,它通过点(短信号)、划(长信号)以及它们之间的间隔(空格)来编码字母和数字。这种编码方式使得信息可以通过电报线路进行传输,构成了一种早期的电报通信协议。然而,如果使用摩斯电码传输的是中文和英文这两种不同的语言,因为上层通信语言协议不相同,编码和解码参照系不同,即便有摩斯电码的辅助,信息的传递也会遇到障碍。
在计算机通信领域,数据可以通过光纤以光信号的形式,或通过电缆以电信号的形式进行传输。由于计算机数据存储采用二进制系统,无论是光信号还是电信号,最终都需要将数据转换为0和1的形式。
- 光信号和电信号可以通过不同的频率和强度来表示二进制的0和1。因此,通信双方必须就数据传输的格式达成一致。
- 首先,处理光电信号的硬件设备,如交换机和路由器,其信号处理方式需要保持统一。
- 其次,计算机上的软件和硬件,包括操作系统、CPU、内存、显卡和网卡等,都需要就数据格式进行协定。例如,大端序和小端序的机器之间如何进行数据格式的转换,这类问题都需要明确的协议来规范。
硬件制作厂商有许多家,软件操作系统也有好几类,导致每台主机类型不尽相同。因此,网络协议,需要有若干个硬件协议和软件协议构成。那么需要具有广泛认可的国际组织或者有威望的大公司站出来,牵头制定网络协议。
- ISO,即国际标准化组织,它标准定义了开放系统互连(OSI)参考模型,OSI模型定义网络通信的七层协议结构。虽然OSI模型没有得到广泛的应用,但在学术和理论研究中占有重要地位
- IETF(互联网工程任务组)制定和维护TCP/IP协议栈的核心部分。TCP/IP协议公有五层协议结构,并且在实际应用中更普遍。
2.2 协议分层
协议本质上也是软件,软件架构纵向往往采用分层策略,横向是模块化策略。通过合理的分层结构,可以实现不同功能之间的解耦合,从而提升整个系统的稳定性和扩展性。当系统面临新的需求或变化时,只需在现有架构的基础上增加一个新的软件层,确保系统持续稳定运行。
以操作系统为例,其架构通常可以分为多个层次:
- 用户界面层:这一层直接与用户交互,提供了命令行、图形用户界面等操作方式,允许用户进行各种操作和管理任务。
- 系统调用接口层:位于用户界面层之下,为上层应用提供了访问操作系统核心功能的途径。这包括文件管理、进程控制、内存管理等基本服务。
- 内核层:这是操作系统的核心部分,负责处理最底层的资源管理和调度工作,如内存分配、设备驱动管理等。
- 硬件抽象层:介于内核层和物理硬件之间,运用类似于面向对象语言的多态特性,屏蔽了不同类型硬件的差异,使得上层软件可以以一种统一的方式与硬件交互。
下面是摩斯电码传输信息的过程。电报机设备负责接收信号,内部有解码器,可以做信号和信息之间的转换。在这个过程中,总共有三个协议。我们变动任何一层协议都会导致通信失败。
在实际的网络通信中,设计会更加复杂,需要分更多的层。
我们可以得出一个结论:
- 不懂技术的使用者会认为同层协议,直接通信。不会关心下层的功能。
- 而工程师会认为同层协议,不直接通信。这是各层使用下层提供的能力,完成通信。
3. OSI七层模型
OSI模型,开放式系统互联通信参考模型(Open Systems Interconnection Model),是由国际标准化组织(ISO)在1984年发布的一个概念性框架,用于理解和设计网络体系结构。OSI模型将网络通信的过程抽象为七个层次,每一层都负责处理不同的通信任务,并且为上层提供服务。
但正如之前所说,它既复杂又不实用,实际通信中会采用TCP/IP协议,下面会着重介绍。
4. TCP/IP四层(五层)协议
TCP/IP协议族是一组网络通信协议的集合,它是互联网的基础。该协议族由多个不同的协议组成。TCP/IP通讯协议采用4层的层级结构,每一层都呼叫塔下一层所提供的功能来完成该层需求。其中网络接口层也会被分为数据链路层和物理层,那么此时TCP/IP协议是5层结构。
- 应用层(Application Layer):TCP/IP模型的最高层,它包含了为用户提供服务的应用程序和协议。这一层的主要作用是为用户提供网络服务和访问方法。常见的应用层协议包括万维网的数据传输(HTTP)、文件传输(FTP)、电子邮件传输(SMTP)、域名转换为IP地址(DNS)等。
- 传输层(Transport Layer):负责端到端的通信,它确保数据包能够从源主机正确地传送到目的主机。这一层提供了两种主要的协议:TCP协议提供可靠的、面向连接的数据传输服务,UDP协议提供不可靠的、无连接的数据传输服务,速度较快但可靠性较低。
- 网络层(Internet Layer):负责路由选择和数据包转发,它使数据能够在不同的网络之间传输。该层的主要协议是IP协议,其负责逻辑寻址并为数据包选择到达目的地的最佳路径。
- 数据链路层(Link Layer):负责节点之间的数据帧传输,它定义了如何在相邻节点间传输数据。这一层通常由硬件来实现,如网卡和交换机。ARP协议将IP地址解析为MAC地址,RARP协议将MAC地址解析为IP地址。
- 物理层(Physical Layer):物理层规定了数据的实际传输方式,包括电压信号、电缆类型等。这一层涉及实际的硬件设备和介质。
- 对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
- 对于一台路由器, 它实现了从网络层到物理层;
- 对于一台交换机, 它实现了从数据链路层到物理层;
- 对于集线器, 它只实现了物理层;
5. 为何要有TCP/IP协议
计算机普遍遵循冯诺依曼架构设计,CPU和内存通过总线直接进行数据交互,而磁盘,网卡等外设,则无法直接与CPU进行通信,它们必须通过内存作为中介来完成数据的传输。
- 设想这样一个场景:现在,张三携带CPU北上坐车到俄罗斯,李四拿着磁盘向南前往东南亚某国,王五拿着内存向东行进,赵六拿着输出设备往西边走了。他们四个人分布在中国的东西南北四个方向。假设连接线线是可以无限延展的,那么我们会发现整个计算机就是一个小型的网络结构。
- 那么我们在单机的情况下,为什么不谈网络结构呢?因为CPU和内存的距离可能不到10厘米,磁盘和内存的距离可能有几十厘米,这些距离十分短。通过主板上的总线连接,数据传输和处理能够迅速且高效地完成,不容易出现问题。
如下图,主机A想要发送消息给主机D,但是他们相隔千里。物理上距离变长,就会带来许多问题,有问题产生,那么就要解决问题,解决问题就需要新的协议。
- 主机A发送消息,得先发送给路由器,如何发送呢?
- 网络上这么多台主机,怎么定义并找到目标主机呢?
- 如果发出去的数据丢失了,怎么办?
- 最后确保数据的传输,不是目的,如何使用数据才是目的。那么主机D怎么处理我发出去的数据呢?
所以,为何要有TCP/IP协议族呢?本质上就是通信主机之间的距离变远了。
6. 网络传输
6.1 局域网通信
局域网通常指的是一个局限在较小地理范围内的网络,如家庭、办公室或校园内的网络。局域网内部设备可以直接通信。
原理类似于线下上课。老师在台上点名张三,最后只有张三站起来答话。在这个过程中,所有人都听见了老师的声音,再判断是否是点自己的名。
而在局域网中标识每台主机的唯一性的值是Mac地址。MAC地址(Media Access Control address)是烧录在网卡上的一个唯一序列号,一般网卡出厂就确定一个MAC地址。
MAC地址是一个48比特位的(6个字节)地址,通常以十六进制格式表示,并用冒号(:)或短横线(-)分隔,例如:00:1A:2B:3C:4D:5E。
如下图所示,五台主机连通在一个局域网内。主机A发送"hello"消息给主机E,会附上源MAC地址和目标MAC地址,可以先让其他主机判断该数据是否发送给自己,目标主机接送到还可以通过源MAC地址知道是谁发的。局域网通信仅在物理层和数据链路层就能实现。
6.2 数据包包装和分用
实际上,不是主机A要发送消息给主机E,而是某个用户发送消息。以下是在同一局域网内,两台主机间消息传递的详细过程。
想象一下,张三在网上购买了一件商品。当快递员准备派送时,他会将商品放入一个盒子中,并在盒子上贴上快递单。这张单子上记录了重要的信息,如发货地址和收货地址。虽然张三最终只想要商品本身,而非盒子和快递单,但快递单的存在却是他和快递员之间的一种默契和共识。
而在网络通信的世界里,用户发送信息,会向下层交付,每一层都会增添特定的数据。发送的信息相当于张三购买的商品,增添的数据相当于快递单。
- 用户A发消息"hello",向下层交付。应用层会在消息后加上应用层的报头,继续向下交付。传输层会在应用层报文前加上传输层的报头,直到数据链路层加完链路层报头,最后交给网卡。
- 其中每一层的报文由报头和有效载荷组成,以数据链路层为例,链路层报头为该层报头,而有效载荷则包含了从上层传递下来的实际数据。
- 当数据到达目标主机时,网卡接收到数据,向上层交付给数据链路层。数据链路层解析数据中的报头部分,以判断这条信息是否确实应该由该主机接收。确认无误后,它将有效载荷部分继续向上传递给网络层,这个过程不断重复,直至信息到达最终的应用层,这就是所谓的解包和分用过程。
- 每一层的报头数据,实质上是该层协议定义的结构体类型数据。这些结构体类型数据包含了众多属性,它们为接收方的主机同层提供了必要的信息,以便进行详细的分析和判断。这个过程,就像是将快递单上的信息一一解读,确保货物能够准确无误地送达张三手中。
所以,对于协议,我们可以有个朴素的理解。协议本质上是通信双方都认识的结构化数据类型,或者是一段代码。
6.3 IP地址
当两台主机处于不同局域网,就要通过IP地址,让路由器进行路由并定位,实现通信。
IP协议有两个版本IPv4和IPv6,我们以IPv4为例详细介绍。
- IP地址,即互联网协议地址(Internet Protocol Address),是分配给每一台连接到互联网的设备的数字标签。
- IP地址有两个主要的功能:一是标识主机的网络地址,二是定位主机在网络中的位置。
- IPv4地址是一个32位的二进制数字,通常被分为四个8位的字节(也称为八位组)。
- 使用点分十进制表示。例如,一个典型的IPv4地址可能看起来像这样:192.168.1.1。
MAC地址与IP地址之间的区别,可以通过一个形象的例子来加以阐述。
假设张三计划从香港长途跋涉至北京。他首先到达深圳,并向当地的老人询问前往北京的路线。老人会询问他的出发地和目的地,张三回答是从香港出发,目的地是北京。基于这些信息,老人为张三指明了方向,建议他前往长沙作为中途的休息和换乘点。当张三抵达长沙后,他会再次向当地的路人打听接下来的路线,同时再次告知他们自己的出发地和目的地。在这个旅程中,张三的起始地和目的地始终保持不变,但他的中转站却可能多次更换。
- 将这个例子类比到网络数据传输的过程中,我们可以发现,那些始终如一的"出发地和目的地"信息,就相当于网络中的IP地址。当主机A向主机B发送数据时,数据的源IP地址是主机A的IP,而目标IP地址则是主机B的IP。
- 然而,与这些不变的IP地址相比,数据包在传输过程中可能会经过多个不同的网络节点,这些节点就相当于张三在旅途中经过的中转站。这些转发过程中所使用的地址,就是MAC地址。
- 在这个过程中,路由器起到了类似于路人的角色。它们根据数据包中的IP地址信息,将数据包从源地址路由到目标地址。同时,路由器还会根据当前的网络环境和路由表,选择最佳的传输路径,并将数据包转发到下一个网络节点。值得注意的是,MAC地址的适用范围仅限于局域网内。
6.4 跨网段传输
当用户在主机上发送消息"hello"时,这个消息首先被封装在网络层的数据包中,并向下传递至数据链路层。在这个过程中,网络层 会在数据包的头部添加目标IP地址和源IP地址等信息。当主机的网络层检查目标IP地址时,它发现这个地址并不属于当前局域网的地址范围,因此需要将数据包发送到路由器,以实现跨网段的传输。
接下来,数据包被传递到主机的数据链路层 ,这里会添加目标MAC地址和源MAC地址。目标MAC地址是路由器网卡的MAC地址,因为数据包需要通过路由器转发。主机底层的硬件网卡将这个数据包转换为电信号,并通过物理媒介(如以太网电缆)发送给路由器。
路由器收到这个数据包后,其数据链路层会首先检查数据包的帧头,确认MAC地址是否与自己的网卡地址匹配。一旦确认,数据链路层会将数据包向上传递至网络层。网络层会解析数据包的IP头部,提取出目标IP地址,并根据路由表来确定下一个跳转的目的地 。这个过程称为路由选择。
在确定了下一个跳转的目的地后,路由器会将数据包再次向下传递至数据链路层,以便进行下一跳的传输。此时,数据链路层会为数据包添加新的目标MAC地址,这个地址是下一跳路由器或目标网络的网关的MAC地址。然后,数据包通过路由器的硬件网卡发送出去,继续其在网络中的旅程。
这个过程会一直重复,直到数据包到达目标网络。在目标网络中,最终的路由器会将数据包转发到目标主机。目标主机的数据链路层检查数据包的MAC地址,确认地址匹配后,将数据包传递给网络层。网络层检查IP地址,如果地址匹配,最终将数据包传递给传输层,然后是应用层,最终用户接收到的"hello"消息。
在整个过程中,无论数据包穿越了多少个网段,每个网段的数据链路层协议(如以太网或令牌环网) 都负责确保数据包在该网段内的正确传输。而网络层则负责跨网段的寻址和路由,确保数据包能够跨越不同的网络,最终到达目的地。路由器在这个过程中扮演着至关重要的角色,它不仅要能够处理各种数据链路层协议,还要能够识别并正确转发基于IP地址的数据包。
创作充满挑战,但若我的文章能为你带来一丝启发或帮助,那便是我最大的荣幸。如果你喜欢这篇文章,请不吝点赞、评论和分享,你的支持是我继续创作的最大动力!