文章目录
前言:
早期使用计算机的大多是进行实验的科学家,他们需要将数据从一个计算机传输到另一个计算机时,常通过软盘拷贝,这种方式非常低效。于是世界各地的实验室都开发了自己的通信方式,但随着时间的推移,只有那些经过竞争筛选出的更优秀的网络通信方式被保留下来。计算机作为人类的工具,人们需要协同工作,这决定了网络的产生是必然的。
其中网络分为局域网和广域网,局域网:计算机的数量太多通过交换机和路由器连接在一起网络;广域网:通过多个路由器相互连接起来的网络。当然,所谓的局域网和广域网是一个相对的概念,广域网可以看作一个较大的局域网。
局域网通信原理
首先我们要知道,不同主机之间是通过各自的网卡来进行通信的,而网卡都有自己的地址,这个地址就是Mac地址。在局域网中,每台主机使用唯一的Mac地址保证在局域网中的唯一性。数据要转发到其他主机,首先需要的是将数据转发到工作在IP层和数据链路层的路由器中,路由器再把数据发送到对方网卡中。
Mac地址具有以下特点:1、识别节点:Mac地址用于识别数据链路层中相连的节点,它是网络接口卡(NIC)在制造时被赋予的物理地址。
2、长度和表示:Mac地址长度为48位,即6个字节。通常以六组两位十六进制数字表示(如:11:aa:bb:cc:dd:ee)
3、唯一性:每个网卡的MAC地址在出厂时就被确定,并且是全球唯一的,由IEEE负责分配和管理。
4、不可修改性:标准的Mac地址是不可修改的,以确保网络中每个设备的唯一标识。然而,某些网卡可能允许用户配置Mac地址,这种做法应谨慎使用,以避免地址冲突。
5、虚拟机Mac地址:虚拟机中的Mac地址是由虚拟化软件生成的,可能不是唯一的,有时可能会在虚拟机之间发生冲突。
如上,主机 A 向主机 E 发送信息的时候,数据就会在以太网上传输,但是对于这个信息以太网中的主机都可以接收到。但是各主机会对照自己网卡中的Mac地址,只有目标主机才会处理该数据,其它主机只会将这个信息给忽略。
局域网中通信的特点:1、在任何时刻,只会允许一台机器向网络中发送数据。若有多台同时发送,会发生数据干扰,也就是数据碰撞。对此,所有发送数据的主机要进行碰撞检测和碰撞避免;
2、可以使用交换机来可以划分碰撞域,局域网越大,发生数据碰撞的概率就越高。如上图,若把A发送数据给B,交换机判定两台机子都在自己左边,就不把数据传到自己右边,降低数据碰撞概率。
3、任何主机都可以往局域网发消息,且任何时刻只能有一台主机发消息,局域网可以看作一个大的临界资源。但访问网卡的最终是OS,即便是进程调用,也是通过系统调用访问的,访问硬件资源不存在临界资源的问题,因为只有一个人在访问,就是OS
OSI七层网络模型和网络协议
局域网(LAN)只能进行短距离的通信,长距离通信时,不同主机之间会面临以下几个问题:
1、如何定位目标主机?
2、如何保证数据传输的可靠性?
3、收到数据后如何处理数据?
协议就是为了处理以上问题而诞生的,起初各个实验室定下的的网络协议不同,需要将它们统一起来提高通信效率。在1977 年国际标准化组织提出了 OSI 七层网络模型,为什么要进行分层呢?因为在网络数据传输的过程中,问题是层状的,各层都有各自需要解决的网络传输问题,而分层其实就是进行解耦,每一层都是功能比较集中,用于处理该层面临的网络传输问题,达到高内聚低耦合的效果。
该OSI 七层网络模型也可以称为 TCP/IP 四层模型,正是因为TCP 和IP 这两层太重要了,才以它们的名字命名。工程中我们常把567三层合为一层,这三层可以被个性化设计,提供业务性功能,而物理层我们编程时不过多关心。我们的网络编程主要就是针对应用层,必须要调用操作系统给我们提供的系统调用接口来访问底层的硬件,因为操作系统是硬件的管理者。
各层主要作用:
数据链路层: 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线 LAN 等标准。交换机 (Switch)工作在数据链路层。
网络层: 负责地址管理和路由选择。例如在 IP 协议中, 通过 IP 地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器 (Router)工作在网路层。
传输层: 负责两台主机之间的数据传输。如传输控制协议 (TCP),,能够确保数据可靠的从源主机发送到目标主机。
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
数据包的封装和分用
当一个主机要向另一个主机发送信息的时候,信息会从应用层向下一直传递。由于问题是分层的,每一层都有自己要解决的问题,此时,数据在实际发送的时候都会多发一部分数据,这部分数据称为协议报头。除了报头,剩下的叫做有效载荷,即报文 = 报头 + 有效载荷。 封装完自己的有效数据后,依次向下推送,最后通过网卡传输到另一个主机中。当另一个主机接收到之后,因为同层使用的是相同的协议,所以它具有把报头和有效载荷分离的能力,即解包能力。解包后依次向上传递,到达应用层后进行数据处理。
这样的每一层封包,然后在每一层的解包,其实很像入栈和出栈,所以就有了网络协议栈的由来。在每一层中,将数据报文分为报头和有效载荷,只有本层的数据报头才为报头,上层的报头和数据共同组成有效载荷。 不同的协议层对报文有不同的称谓,在传输层叫做数据段,在网络层叫做数据报,在数据链路层叫做数据帧。
在接收方,在对数据解包后,还会面临一个问题:就是把数据交付给上层的哪一个协议?(因为每层中都会有很多的协议,且封装的时候也是不同的协议进行封装的),这就涉及数据的分用了,分用就是将数据拆包之后将数据向上层对应的协议递交。
跨网络通信
前面我们用Mac地址来标识一张网卡,而IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单来说,IP地址用于定位主机的网络地址。IP地址分为IPv4和IPv6(16字节)两种版本,其中IPv4是目前最广泛使用的,而IPv6则设计用于解决IPv4地址耗尽的问题。对于 IPv4 来说,IP 地址是一个 4 字节,32 位的整数。我们通常也使用 "点分十进制" 的字符串表示 IP 地址(例如 192.168.0.1),用点分割的每一个数字表示一个字节,范围是 0 - 255。
当主机A需要向主机B发送数据时,如果B不在A的局域网内,数据包会先发送到连接A的路由器。在这个过程中,数据包的MAC地址会被设置为路由器的Mac地址,以便路由器接收。路由器收到数据后,根据数据包中的IP地址,通过其路由表确定最佳的传输路径。传输过程中,路由器通过不断更新数据包的Mac地址并利用IP路由,最终使其指向B的Mac地址。这样,数据就可以跨越多个网络,到达目的地B。
在数据传输过程中,目的IP地址作为路由选择的关键,始终保持不变,而Mac地址则随着数据在不同局域网间的转发而变化,作为局域网内设备通信的依据。路由器负责解封装、处理数据包,并重新封装,确保数据包能够跨越多种底层网络技术,如以太网或令牌环网。IP网络层的作用就是创建一个统一的网络虚拟层,使得所有底层网络的差异对上层应用透明化,上层无需关心底层网络的具体实现细节或技术差异,即可进行通信和数据传输,从而构建了一个全球统一的IP网络环境。
对此网络通信的宏观流程如下: