JavaEE初阶(8)网络初识(网络发展史、网络通信基础、IP地址、端口号、认识协议、五元组、协议分层、OSI七层模型、TCP/IP五层(或四层)模型、网络设备所在分层、网络分层对应、封装和分用 )

接上次博客:JavaEE初阶(7)(认识文件、Java针对文件的操作、文件系统的操作【File】、文件内容的操作——流对象【Reader、Writer、InputStream、OutputStream】)_di-Dora的博客-CSDN博客 

目录

网络初识

网络发展史

独立模式

网络互连

局域网LAN

广域网WAN

网络通信基础

IP地址

概念

格式

特殊IP

端口号

概念

格式

知名协议的默认端口

注意事项

认识协议

概念

作用

五元组

协议分层

什么是协议分层

分层的作用

OSI七层模型 

TCP/IP五层(或四层)模型

网络设备所在分层

网络分层对应

封装和分用 


网络初识

网络发展史

独立模式

"独立模式"(Standalone Mode)通常指的是计算机或系统在运行时相互独立,不依赖于其他计算机或系统进行协作。这个术语可以在多个上下文中使用,以下是一些常见的情况:

  1. 独立计算机:一个计算机在独立模式下运行,意味着它不与其他计算机或服务器进行通信或协作。它执行本地任务,不涉及分布式计算或网络通信。

  2. 独立应用程序:一个独立应用程序是一个在用户的本地计算机上运行的程序,通常不需要与远程服务器或其他计算机进行交互。它可以在本地执行任务,例如文档编辑、图像处理等,而无需网络连接。

  3. 独立模式的数据库:在某些情况下,数据库可以运行在独立模式下,意味着它不与其他数据库服务器进行通信,而只在本地计算机上存储和管理数据。

总的来说,独立模式强调了在某一时刻计算机、应用程序或系统在运行时的独立性,不依赖于其他计算机或系统的协作。这与分布式系统或网络应用程序等需要多个计算机或系统相互协作的情况形成对比。

网络互连

随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互连。

网络互连:将多台计算机连接在一起,完成数据共享。

数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。

在现代社会中,计算机之间的互相通信和数据共享是至关重要的。这种能力不仅改变了业务和工作方式,还推动了科技、教育、医疗、娱乐等多个领域的发展。网络互连提供了以下关键好处:

  1. 数据共享与协作:多个计算机之间可以轻松地共享数据和资源,使得团队协作更加高效,业务流程更加流畅。

  2. 远程访问:通过网络,用户可以远程访问和控制其他计算机上的应用程序和文件,这对于远程办公、远程学习等场景非常重要。

  3. 信息传递:网络互连使得信息的传递变得即时和全球化。人们可以通过电子邮件、社交媒体、即时消息等方式快速沟通。

  4. 云计算:云计算基于网络提供了计算和存储资源,为用户提供了弹性和可扩展的计算能力,从而降低了IT成本并提高了效率。

  5. 全球连接:互联网是一个全球性的网络,将世界各地的计算机连接在一起。这为跨国界的合作、国际贸易和文化交流提供了平台。

根据网络互连的规模不同,可以划分为局域网和广域网。 

局域网LAN

局域网,即 Local Area Network,简称LAN。

局域网内的主机之间能方便的进行网络通信,又称为内网;

局域网和局域网之间在没有连接的情况下, 是无法通信的。 局域网组建网络的方式有很多种:

(1)基于网线直连Local 即标识了局域网是本地,局部组建的一种私有网络。 

直接相连就要求你的电脑上有多个网口,而一般的家用电脑上只有一个网口。

(2)基于集线器组建: 

(3)基于交换机组建 :

交换机可以扩展路由器的端口。

(4)基于交换机和路由器组建 :

一般家用路由器,常见是5个网口,一个WAN口,四个LAN口。

要想让这几个电脑能够在同一个局域网中上网,就需要把他们连接到LAN口,WAN口是用来脸上级的路由器的。

在上述设备层层连接下就可以构成更复杂的网络结构…… 

广域网WAN

广域网,即 Wide Area Network,简称WAN。

通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。

这个时候的构成的网络可能更加庞大,已经覆盖了一个城市/国家全世界。

局域和广域之间没有明确的界限。

广域网内部的局域网都属于其子网。 

网络通信基础

网络互连的目的是进行网络通信,也即是网络数据传输。更具体来说,网络通信是指在不同网络主机之间进行数据交流的过程,其中包括了在这些主机中运行的不同进程之间基于网络传输数据的操作。

那么,在组建的网络中,如何判断数据应该从哪台主机传输到哪台主机呢?这就需要使用IP地址来标识。 IP地址是一种独特的数字标识,它被分配给每个网络主机,以便在网络中唯一识别它们。通过IP地址,数据可以被准确地路由到目标主机,确保信息能够安全可靠地传输。

IP地址

概念

IP地址主要用于标识网络主机以及其他网络设备(如路由器)的网络位置。简而言之,IP地址充当了网络上每个主机的住址,使其在网络中能够被唯一识别和定位。 类似于寄送快递时需要知道收件人的详细地址,IP地址也是网络通信的“邮寄地址”,它告诉网络设备数据应该送到哪里。

格式

IP地址是一个32位的二进制数,通常被分割为4个"8位二进制数",也就是4个字节,以便于人们理解和使用,如下所示的示例IP地址:

01100100.00000100.00000101.00000110。

通常用 “ 点分十进制 ” 的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如: 100.4.5.6。

这个32位二进制地址可以分为两个部分,网络部分和主机部分。网络部分用于确定数据应该通过网络的哪个路径传输,而主机部分则用于唯一识别特定网络中的设备。 IP地址的结构使得数据可以正确地寻找到目标主机,实现了可靠的网络通信。

特殊IP

127. * 的IP地址用于本机环回(loop back)测试,通常最常见的本机环回地址是127.0.0.1。这个地址是用来实现本地主机到本地主机之间的网络通信(系统内部为了性能,不会走网络的方式传输),而无需通过物理网络传输数据。

本机环回地址主要用于以下几个方面:

  1. 本地测试:开发人员可以使用本机环回地址来测试他们的网络应用程序,确保应用程序在本地环境中正常工作,而不需要连接到真正的网络。

  2. 自我诊断:管理员可以使用本机环回地址来诊断本地主机的网络问题。通过发送数据包到127.0.0.1,管理员可以检查网络协议栈和网络服务是否正常运行。

  3. 虚拟化环境:在虚拟化环境中,本机环回地址也非常有用。虚拟机可以使用本机环回地址来与主机以及其他虚拟机进行通信,而不必经过物理网络。

  4. 本地代理服务:某些网络应用程序或代理服务可能会监听本机环回地址上的特定端口,以提供本地服务或代理请求。

总之,127.0.0.1 和其他127.* 的本机环回地址对于本地网络通信和测试非常重要,它们允许开发人员和管理员在不依赖于外部网络的情况下进行测试和故障排除。

IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。

端口号

概念

在网络通信中,IP地址用于标识主机的网络地址,而端口号则用于标识主机中正在发送数据或接收数据的特定进程。简单来说,端口号用于定位主机中的进程,就像发送快递时除了需要知道收货地址(IP地址)外,还需要知道具体的收货人(端口号)。

格式

端口号是一个介于0到65535之间的数字(2个字节,相对较小),在网络通信中,进程可以通过绑定一个端口号来指定其用于发送和接收网络数据。端口号的范围从0到65535,其中1到1023(0通常不使用)通常被称为“系统端口”或“知名端口”,是系统留作特殊用途的,我们不能占用,用于一些常见的服务(如HTTP的80端口、FTP的21端口,HTTPS的443端口等),而大于1023的端口号则可以由用户或应用程序自由使用。

知名协议的默认端口

系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使用的应用层协议,如:

  • 22端口:预留给SSH服务器绑定SSH协议
  • 21端口:预留给FTP服务器绑定FTP协议
  • 23端口:预留给Telnet服务器绑定Telnet协议
  • 80端口:预留给HTTP服务器绑定HTTP协议
  • 443端口:预留给HTTPS服务器绑定HTTPS协议

需要补充的是,以上只是说明 0 ~ 1023 范围的知名端口号用于绑定知名协议,但某个服务器也可以使用其他 1024 ~ 65535 范围内的端口来绑定知名协议。

注意事项

两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。

也就是说,不同的程序可以关联/绑定到不同的端口号,一个端口号只能被一个程序绑定,但是一个程序可以绑定多个端口。

比如我们之前学的MySQL,3306这个端口号就被MySQL服务器绑定了。与此同时,MySQL还可以绑定到别的端口,但是其他的程序就不能绑定3306。

了解:

当一个进程启动后,操作系统通常会为该进程随机分配一个可用的端口号,这个端口号可以称为启动端口或临时端口。这个临时端口通常用于临时网络通信需求,例如,客户端程序与服务器进行短期通信。

在程序代码中进行网络编程时,通常需要显式地绑定一个端口号,这个端口号用于接收和发送数据。这个过程将指定进程与一个特定的端口号关联起来,以便其他进程可以通过该端口号与它通信。

虽然一个进程可以绑定一个端口号,但在某些情况下,可以 fork 出多个子进程,并让它们共享相同的端口号。这通常用于实现多线程或多进程服务器,其中多个子进程或线程可以同时监听相同的端口,以处理来自客户端的请求。这种情况下,不同的进程或线程可以接收并处理不同的连接,但同一个端口号通常不能同时被多个不同的进程绑定。

总之,端口号在网络编程中是非常重要的,它们用于唯一标识一个进程或服务,并确保数据可以正确地路由到目标进程。不同的进程可以绑定不同的端口号,但通常情况下,同一端口号不能被多个不同的进程同时绑定。在多线程或多进程的情况下,可以共享相同的端口号来处理多个连接。

在实际的网络通信过程中,IP地址和端口号通常被视为一对,类似于快递的 "收件人地址--收件人电话" 以及 "发件人地址--发件人电话"。

具体来说,源端口(Source Port)和目的端口(Destination Port)与IP地址一起,用于唯一标识网络通信中的源和目标。这样的组合允许网络设备和路由器正确地将数据包从源主机路由到目标主机,并确保它们被正确地交付给目标进程。

  • 源端口:它标识了数据包的来源,也就是发送数据的进程或应用程序。就像发件人电话号码一样,它告诉接收方如何回复或响应数据包。

  • 目的端口:它标识了数据包的目标,也就是接收数据的进程或应用程序。就像收件人电话号码一样,它告诉网络设备将数据包交付给哪个进程或应用程序。

这种端口号和IP地址的组合方式确保了在网络上能够同时运行多个不同的应用程序,并且它们都能够正确地识别和处理自己的数据。这种灵活性是网络通信中非常重要的,因为它允许多个应用程序在同一主机上共享相同的IP地址,而通过不同的端口号来区分彼此。

总之,IP地址和端口号一起构成了网络通信中的重要地址信息,确保数据包能够准确地路由到目标进程,从而实现了有效的网络通信。

问题:

有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制 0/1数据来传输,如何告诉对方发送的数据是什么样的呢?

网络通信传输的数据类型可能有多种:图片,视频,文本等。

同一个类型的数据,格式可能也不同,如发送一个文本字符串“你好!”:如何标识发送的数据是文本类型,及文本的编码格式呢?

基于网络数据传输,需要使用协议来规定双方的数据格式。

认识协议

网络通信的本质是通过物理信号(通常是电信号或光信号)来传输数据。这些物理信号的变化和属性用于表示二进制数据,其中通常使用高电平和低电平(或高频光信号和低频光信号)来表示1和0。

在计算机和网络通信中,信息通常被编码为二进制位,这些位可以是0或1。这些位被组合成字节、字、帧和数据包,以便在网络中传输和处理。这个过程包括了将数字数据转换为物理信号以及将接收到的物理信号解码为数字数据的步骤。

具体的物理媒介(如电缆、光纤、电波等)和信号传输技术(如调制解调、编码解码等)会影响到数据的传输速度、可靠性和距离。不过,无论使用何种物理媒介和传输技术,最终的目标都是将数字信息在网络中传递,并确保数据在发送和接收之间正确地转换和传输。

概念

协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

协议通常包括三个重要要素

  1. 语法:语法规定了数据和控制信息的结构或格式,它确保数据的正确传输和解析。就像打电话时需要使用相同的语言或通信协议,以便双方能够理解对方的消息。

  2. 语义:语义规定了通信双方应该如何交互,包括发送何种控制信息、执行何种动作以及如何响应对方的操作。这确保了通信的目的和行为得以明确定义。

  3. 时序:时序规定了事件的实现顺序,包括何时开始通信、消息的发送顺序、消息传输的速度等。时序规则有助于协调通信双方的操作,确保数据按照正确的顺序传递。

网络协议最终映射到传输的数据包的格式,这些数据包包含了遵循协议的信息。不同的协议用于不同的网络通信需求,例如,HTTP用于在Web上传输超文本,SMTP用于电子邮件传输,TCP/IP用于Internet上的数据传输,OSPF是一种网络层协议,通常用于路由器之间的路由信息交换,以帮助确定数据包在网络中的最佳路径等。

我们才学过的文件,以下是一些常见的文件传输协议:

  1. FTP (File Transfer Protocol) - 文件传输协议,用于在网络上传输文件。有多个变种,如FTP、SFTP和FTPES,它们提供了不同级别的安全性和功能。

  2. HTTP/HTTPS (Hypertext Transfer Protocol) - 用于在Web上传输数据的协议。HTTP用于传输非加密数据,而HTTPS通过加密数据传输,更安全。

  3. SCP (Secure Copy Protocol) - 用于通过SSH(Secure Shell)安全协议传输文件的协议。

  4. SMB (Server Message Block) - 用于在本地网络中共享文件和打印机的协议,通常与Windows共享文件夹相关。

  5. NFS (Network File System) - 用于在UNIX和Linux系统之间共享文件和目录的协议。

  6. SMTP (Simple Mail Transfer Protocol) - 用于电子邮件传输,尤其是附件的传输。

  7. BitTorrent - 用于点对点文件共享的协议,通常用于大型文件的分发。

  8. AS2 (Applicability Statement 2) - 一种用于安全和可靠地传输EDI(Electronic Data Interchange)文件的协议。

作用

为什么需要协议?

就好比见网友,彼此协商胸口插支玫瑰花见面,这就是一种提前的约定,也可以称之为协议。

计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。

要想传递各种不同的信息,就需要约定好双方的数据格式。

  • 计算机生产厂商有很多;
  • 计算机操作系统,也有很多;
  • 计算机网络硬件设备,还是有很多;
  • 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?
  • 就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是 网络协议; 

五元组

在TCP/IP协议中,五元组是用来唯一标识网络通信的重要概念。

五元组包括了以下五个要素:

  1. 源IP地址:源主机的IP地址,标识了通信的发起者。

  2. 源端口号:源主机中用于发送数据的进程的端口号。它标识了发起通信的应用程序或进程。

  3. 目的IP地址:目标主机的IP地址,标识了通信的接收者。

  4. 目的端口号:目标主机中用于接收数据的进程的端口号。它标识了接收通信的应用程序或进程。

  5. 协议号:协议号标识了发送进程和接收进程之间约定的通信协议或数据格式,例如,TCP协议的协议号是6,UDP协议的协议号是17。

这五个元素一起构成了唯一的标识,确保了数据能够正确地路由到目标进程,从而实现了网络通信的可靠性和准确性。五元组是计算机网络中非常重要的概念,它们在数据包的传输和路由中起着关键的作用。

可以在cmd中,输入命令 netstat -ano 可以用于查看正在进行的网络连接,并显示与每个连接相关的五元组信息,包括源IP地址、源端口号、目标IP地址、目标端口号以及进程的PID(Process ID)。这对于监视网络连接和识别网络活动非常有用。

如果需要过滤特定的网络连接,可以使用管道 | 将 netstat -ano 的输出传递给 findstr 命令,以便根据特定的条件进行过滤。

查找特定端口号的连接:

netstat -ano | findstr "特定端口号"

将 "特定端口号" 替换为你要查找的实际端口号。

查找特定进程的连接(使用PID):

netstat -ano | findstr "特定PID"

将 "特定PID" 替换为要查找的实际进程的PID。

这些命令允许我们在命令行中快速筛选和查看网络连接信息,有助于网络故障排除和监视网络活动。

协议分层

平时写代码,如果一个代码越写越多,越写越复杂,往往需要把代码拆分成几个部分,以便我们更好的理解,这是基于人脑的基本认知规律。

所以对于网络协议来说,往往分成几个层次进行定义。

什么是协议分层

协议分层类似于打电话时,定义不同的层次的协议。

协议分层是一种将网络通信任务划分为多个逻辑层次的方法,每个层次执行特定的功能。这种分层的方法使得网络协议更加模块化和可维护,类似于将一个大型程序分解成小的、独立的模块以提高代码的可理解性和可维护性。每个层次都有特定的责任,而不同层次之间通过定义好的接口进行通信,就像不同模块之间通过接口函数进行交互。

分层的作用

为什么需要网络协议的分层?

分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。

在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类 (使用方,使用服务):

  • 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
  • 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。 这样能更好的扩展和维护。

网络通信的场景,可能会比较复杂,我们有很多的问题需要通过协议来进行解决.

如果搞一个大的协议来解决所有问题,此时这个协议就会非常庞大、非常复杂,就不利于人们去学习和理解。

相比之下,我们也可以把大的协议拆分成多个小的协议,让每个小的协议只专注于做一小块事情,使每个小的协议,都不会太复杂(化繁为简)。

由于网络通信实在太复杂,拆分就拆出来太多的小的协议,这么多小的协议,也就不好管理了,此时就需要对协议进行分层了。

按照协议的定位/作用分类,并且约定了不同层次之间的“调用关系”, 这样,这么多协议就不容易混乱。

分层结构有点像组织中的领导层次。

一开始,就像一个刚刚创办的小公司,只有一个大老板(Boss)和一些底层员工。在这个阶段,Boss可以直接与每个员工交流,了解每天的工作内容、需求和问题,因为公司规模较小,交流相对容易。

然而,随着时间的推移,公司的业务逐渐扩大,员工数量增多,而Boss的工作量和责任也急剧增加。Boss逐渐意识到,他不可能个别管理每个员工,否则会变得非常繁杂和低效。此时,Boss开始认命一些中层领导,让他们负责管理各自的小组或部门。这些中层领导成为了公司内部的“层次”,他们了解员工的工作,协调团队,向Boss汇报整体进展。

随着公司继续增长,中层领导层次也进一步扩展,可能出现不同职能部门,如销售、研发、市场营销等。每个职能部门的中层领导负责管理和协调特定领域的工作,以确保组织高效运作。这种层级结构有助于提高公司的效率和专业化,因为不同的中层领导可以专注于各自领域的任务,而不必全盘负责所有事务。 

协议分层具有以下几个重要作用:

  1. 模块化设计:协议分层允许将复杂的网络通信任务分解成相对独立的子任务,每个层次专注于特定功能。这使得系统更易于设计、开发和维护。

  2. 互操作性:通过明确定义的接口,不同的网络设备和实现可以在不同供应商之间互操作。这使得不同供应商的硬件和软件能够一起工作,提高了网络的灵活性和可选择性。

  3. 隔离和抽象:每个层次隐藏了底层的复杂性,只向上一层提供抽象的接口。这使得不同层次的实现可以独立地演化,而不会影响其他层次。

  4. 易于扩展:由于每个层次都定义了清晰的接口,可以方便地添加新的功能或升级特定层次的实现,而不必重新设计整个系统。

使用协议分层的好处: 

  1. 封装和解耦:协议分层将网络通信划分为多个层次,每个层次负责不同的功能。这意味着每个层次只关注自己的任务和责任,将底层的复杂性封装在上层之下。这种封装使得上层协议不必深入了解底层协议的细节,而只需使用底层提供的抽象接口。同样,底层协议也不必关心上层协议的具体应用,因为它们只需要负责将数据传递给上一层。

  2. 每一层的协议都可以根据需要灵活替换。

  3. 独立开发和维护:由于每个层次都是相对独立的,不同的团队可以同时开发和维护不同层次的协议。这使得系统更容易扩展和升级,因为更改一个层次的实现不会影响其他层次。这种独立性有助于降低开发和维护的复杂性。

  4. 互操作性:通过清晰定义的接口,不同供应商和组织可以使用相同的协议来实现互操作性。这意味着不同的设备和系统可以在网络中协同工作,而无需了解彼此的实现细节。

  5. 故障排除:当出现问题时,协议分层结构有助于确定问题发生在哪个层次。这使得故障排除更加高效,因为可以快速定位和解决问题的根本原因。

分层举例

协议分层的经典例子是OSI(开放系统互联)模型,它将网络通信分为七个不同的层次,包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每个层次具有特定的功能和责任,并通过定义好的接口进行通信。这种分层模型在网络通信领域得到了广泛应用。 

OSI七层模型 

1. OSI的定义和目的

  • OSI代表Open Systems Interconnection,即开放系统互连。
  • OSI七层模型是一个逻辑上的网络框架,用于定义和规范网络通信。
  • 它的主要目的是将网络通信任务分解为不同的层次,以便不同类型的主机和网络设备可以互相通信和协作。

2. 分层结构

  • OSI模型将网络通信分为七个不同的逻辑层次,从底层到顶层分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
  • 每个层次负责特定的功能和任务,但都与其他层次建立了清晰的接口和关系。

3. 概念的明确性

  • OSI模型的最大优点之一是将服务、接口和协议明确地区分开来。
  • 服务表示每个层次提供的功能,接口定义了不同层次之间的交互方式,而协议则规定了数据在每个层次上的传输方式和格式。

4. 七层模型的作用

  • OSI模型的主要作用之一是为不同类型的主机和网络设备提供一种共同的通信和协作方式。
  • 通过七个层次的结构模型,不同的系统和网络可以实现可靠的通信,因为它们遵循相同的标准和接口规范。

5. 每个层次的功能

  • 物理层:处理物理传输介质,如电缆、光纤等,负责位的传输,包括数据的编码和调制。
  • 数据链路层:处理数据帧的传输和物理寻址,提供物理层的错误检测和纠正。还包括访问控制,以协调多个设备共享同一物理介质的访问。
  • 网络层:负责数据包的路由和转发,实现跨网络的数据传输。该层的主要功能包括寻找最佳路径、路由选择和逻辑寻址(如IP地址)。
  • 传输层:提供端到端的数据传输,负责流控制、差错恢复和数据的分段与重组。通常包括两种主要协议,即TCP(面向连接)和UDP(无连接)。
  • 会话层:负责建立、管理和终止会话,处理会话层协议,以确保通信的可靠性和一致性。这包括对话的起始、终止和同步。
  • 表示层:处理数据的编码、加密和压缩,确保不同系统之间的数据格式兼容。它还负责数据的转换、解释和格式化,以便应用层能够正确处理数据。
  • 应用层:提供各种应用程序访问网络的接口,包括HTTP(用于Web浏览器)、FTP(文件传输协议)、SMTP(用于电子邮件)等。应用层协议定义了应用程序如何交换数据和进行通信。

OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。

实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层(或四层)模型来实现。 

TCP/IP五层(或四层)模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

  • 应用层:如何使用这个数据?负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程 访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
  • 传输层:关注起点和终点,负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
  • 网络层:进行路径规划,负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表 的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
  • 数据链路层:两个相邻节点之间的数据传输情况。负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上 检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。 有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
  • 物理层:描述的是网络通信的硬件设备。负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同 轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。

物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。  

比如我在某宝上买了一件衣服,我需要提供收件人地址和收件人电话。商家也有发件人地址和发件人电话。站在商家的角度,他只关心自己的发件人地址和发件人电话以及我的收件人地址和收件人电话。

商家发货需要把衣服交给快递公司。快递公司就需要对这个包裹如何运输来进行路径上的规划。

此时快递公司会根据需要规划出一条最合适的路径(考虑传输效率?传输成本?传输时间最短?传输过程最方便?)

路径规划完毕,就得考虑每一阶段怎么走(相邻节点如何传输?)

网络设备所在分层

  1. 主机:主机的操作系统内核通常实现了从传输层到物理层的内容,即TCP/IP五层模型的下四层,包括:

    • 应用层
    • 传输层
    • 网络层
    • 数据链路层(某些情况下,主机的网卡驱动程序也在数据链路层执行)
  2. 路由器:路由器工作在TCP/IP五层模型的下三层,包括:

    • 网络层
    • 数据链路层
    • 物理层
  3. 交换机:针对路由器的端口进行扩展。传统的交换机通常工作在TCP/IP五层模型的下两层,包括:

    • 数据链路层
    • 物理层
  4. 集线器:集线器只实现物理层,它仅关注电信号的传输。

注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。

随着现在网络设备技术的不断发展,也出现了很多3层或4层交换机,4层路由器。我们以下说的网络设 备都是传统意义上的交换机和路由器。 

网络分层对应

网络数据传输时,经过不同的网络节点(主机、路由器)时,网络分层需要对应。

以下为同一个网段内的两台主机进行文件传输:

驱动程序(Driver)是一种计算机程序或软件,它允许计算机的操作系统与硬件设备或外部附件进行通信和协作。驱动程序的主要功能是充当操作系统与硬件之间的中间层,使操作系统能够识别、控制和与硬件设备交互,以便实现各种功能和任务。

以下是驱动程序的主要作用和特点:

  1. 硬件交互:驱动程序充当操作系统与硬件设备之间的翻译器,使得操作系统能够理解和控制不同类型的硬件设备,如打印机、显卡、声卡、网络适配器等。

  2. 设备管理:驱动程序负责设备的初始化、配置和管理。它们确保硬件设备在计算机启动时正确初始化,并在需要时进行适当的资源分配和释放。

  3. 性能优化:驱动程序可以通过优化硬件设备的性能,提供更高的效率和响应速度。这包括优化显卡驱动以提供更好的图形性能,或者优化网络驱动以提供更快的数据传输速度。

  4. 错误处理:驱动程序能够检测和处理硬件设备可能遇到的错误和异常情况。它们可以向操作系统报告问题,以便及时采取纠正措施。

  5. 兼容性:操作系统通常支持多种硬件设备,每种设备可能有不同的制造商和型号。驱动程序确保操作系统可以与各种不同类型的设备兼容,从而提供更大的硬件选择。

  6. 升级和维护:随着硬件设备的更新和演进,制造商会发布新的驱动程序版本,以支持新功能、修复问题或提高性能。用户可以通过更新驱动程序来保持硬件设备的最新状态。

总之,驱动程序是连接计算机操作系统与硬件设备之间的关键组成部分,它们确保硬件设备与操作系统协同工作,以实现计算机的各种功能和任务。不同的操作系统和硬件设备通常需要特定版本的驱动程序来确保兼容性和稳定性。

 两台计算机通过TCP/IP协议通信的过程如下:

以下为跨网段的主机的文件传输:数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器: 

封装和分用 

封装和分用是计算机网络通信中的两个重要概念,它们有助于数据在不同协议层之间进行有效的传输和处理。

封装(Encapsulation)

封装是指在数据包传输过程中,每一层协议都会在数据上添加一个特定的首部(header)。这个首部包含了关于数据包的信息,如首部长度、载荷长度、上层协议类型等。封装的主要目的是为了在不同协议层之间传递数据时,能够使数据包包含足够的信息以便正确处理和路由。

封装的过程通常从应用层开始,逐层向下进行。每一层都会添加自己的首部信息,形成一个包含多个首部的数据包。这个过程有点像俄套娃,每一层的首部包裹着上一层的数据。最终,整个数据包就被完整地封装起来,准备发送到网络上。

分用(Demultiplexing)

分用是指在接收端,当数据包到达目的主机后,每一层协议都会根据首部中的信息将数据包交给相应的上层协议进行处理。这个过程有点像将多层的包裹逐一拆开,将每一层的数据交给对应的处理程序。

分用的关键是首部中的 "上层协议字段"。这个字段告诉接收端的每一层协议,这个数据包是属于哪一层的数据,并且应该交给哪个上层协议来处理。这个过程确保了数据包能够按正确的顺序传递给不同的协议层,并最终交付给应用程序进行处理。

总的来说,

封装和分用是网络通信中的关键步骤,它们确保了数据在不同协议层之间的正确传输和处理。封装将数据包装成多层首部信息,分用根据首部中的信息将数据包交给正确的上层协议。这个过程使得网络通信能够高效、可靠地进行,同时确保了数据的完整性和安全性。

以上内容描述了网络通信过程中,基本的数据传输流程。为了方便理解,我们还是来举个例子:
现在,我们考虑A通过QQ把一个 hello 传递给 B

封装——对于发送方:

1.应用层

在QQ 应用程序,QQ就会把用户输入的 " hello ",给打包成一个应用层的数据报(这个数据报的格式,只有上帝和 qq 的程序员才能知道~~)

咱们假设是按照这样的格式:

源QQ: 123456
目的QQ: 654321
发送时间: 2023-09-24 12:00:00
消息内容: hello

四个字段.使用 “ , ”来分割。    

这里就构成了一个简单的应用层数据包报(字符串拼接)

上述描述的规则就是此处我们约定的应用层协议。

具体使用几个字段,顺序如何,使用什么符号分割……都是可以自由调整的,所以应用层协议往往是根据具体的场景、具体的需要,由程序猿自主决定。 

接下来,我们就可以把应用层数据报,通过操作系统的API把数据交给传输层。

2、传输层:

传输层就要对刚才的应用层数据再进行打包,使之变成传输层的数据报。这里的打包过程本质上还是字符串的拼接

在传输层,数据被进一步封装,通常使用传输层协议(例如TCP或UDP)来确保数据的可靠传输。

把刚才的应用层数据,基础上拼接上传输层的报头。

A的计算机将消息封装成传输层数据报,例如使用TCP协议,添加了源端口和目的端口等信息,形成如下的传输层数据报:

源IP地址: A的IP地址
源端口号: 随机分配的端口号
目的IP地址: B的IP地址
目的端口号: QQ的目标端口号(示意)
消息内容: (来自应用层的数据包)

这个传输层数据报包含了源IP地址、源端口号、目的IP地址、目的端口号以及来自应用层的消息内容。传输层的主要任务是确保数据可靠地从发送方传输到接收方。

那如果是UDP呢?

传输层数据报搞好了之后,这个数据又会进一步的交给网络层。 

3. 网络层:

在网络层,数据报需要进一步封装以确定如何到达目标主机B。这一层主要关注路径规划、地址管理和路由选择。在这个过程中,源主机A会根据目标主机B的IP地址和路由表等信息,确定如何将数据报发送到目标主机的路径。

数据报会被添加网络层的首部信息,其中包括源IP地址、目标IP地址和其他路由信息。这个过程确保数据报按照正确的路线传输,以达到目标主机B。

网络层最主要的协议就是IP协议:

网络层的数据打包好之后,继续把数据交给“数据链路层”进一步打包。 

4. 链路层:

最后,在链路层,数据报会继续封装,以适应特定的物理传输介质(如以太网、Wi-Fi等)。这一层负责设备之间的数据帧传输和识别。在这个过程中,数据报会添加链路层的首部信息,如源MAC地址和目标MAC地址,以确保数据能够在物理层传输。

数据报被发送到物理层后,最终通过网络传输介质(如以太网电缆或Wi-Fi信号)传输到目标主机B。

总之,网络通信涉及多个协议层,每一层都负责添加必要的信息和处理,以确保数据能够成功传输到目标主机。在上述例子中,应用层、传输层、网络层和链路层的部分过程被展示出来,但实际通信涉及更多细节和处理步骤。

咱们初心是为了传输“hello”,但是为了达成目的又做了很多额外的工作。 

5、物理层:

 把上述数据转换成二进制的0和1序列,通过光信号/电信号去传输。

以上,从上层到下层协议,层层给数据添加报头,这个过程就叫做封装。注意,这里的封装就不是面向对象的封装了。

数据发出去之后就会经过一系列的交换机和路由器进行转发,A和B一般来说就不是直接网络连接的,中间还要经过很多的交换机/路由器设备进行转发。

  1. 数据包传输: 当源主机A发送数据包到网络上时,数据包首先到达与A直接相连的交换机或路由器。

  2. 路由决策: 该设备根据目标IP地址和路由表等信息,决定数据包的下一跳。这个下一跳可以是另一个路由器或交换机。

  3. 数据包转发: 数据包被发送到下一个设备,然后在每个设备之间不断重复这个过程,直到数据包达到目标主机B所在的网络。

  4. 路由选择: 在路由器之间,数据包可能需要经过多次路由选择,以确定最佳路径。这涉及考虑各种因素,如距离、延迟、网络拥塞等。

  5. 到达目标主机: 最终,数据包到达目标主机B所在的网络,然后被传递到B的网络接口。

这个过程是网络通信中非常重要的一部分,它确保了数据可以穿越复杂的网络架构,从源到目标。每个交换机和路由器设备都有自己的路由表和转发策略,以决定数据包的最佳路径。网络的结构和拓扑可以非常复杂,但网络协议和设备的工作使这一切变得无缝。

当数据到达B这里,B就要针对上述数据进行“分用”(针对上述数据进行层层解析):

分用——接收方:

1、物理层:

拿到的光电信号,转换成二进制数据,再得到以太网数据报。

这个数据要交给数据链路层对应的协议处理。

2、数据链路层:

通过以太网的协议,针对以太网数据报进行解析。这个解析过程就会解析出报头和报尾,以及中间的载荷。把载荷部分再进一步交给网络层的协议来处理。

3、网络层: 

通过IP协议,进一步针对网络层的数据进行解析,去掉报头,拿到载荷,再进一步把载荷数据交给上层(传输层):

4、传输层: 

此处使用 UDP 协议,针对这个数据报进行解析拿到载荷,去掉报头,把载数据进一步的交给上层(应用层了):

5、应用层:

 把上述数据根据端口号,交给 QQ 这个程序:

QQ 这个程序就要进一步解析这里的数据,这个解析过程也就是按照前面程序员自定义的应用层协议来展开的。

数据报在网络中间还会经历一定的转发过程:

数据报经过路由器:

  1. 封装到网络层: 当数据报到达路由器时,路由器会解析数据报头中的目标IP地址,并根据路由表确定下一跳路由器或目标网络。此时,路由器需要将数据报重新封装到网络层。这个过程包括将数据报的源IP地址和目标IP地址设置为适当的值。

  2. 网络层传输: 经过网络层封装后,数据报会按照网络层协议(通常是IP协议)的要求传输到下一个路由器或目标网络。在这个过程中,数据报在网络层被路由器转发。

  3. 重新封装: 当数据报到达下一个路由器或目标网络时,类似的过程会再次发生。数据报在网络层被重新封装,源和目标IP地址被更新,以便继续传输。

  4. 最终到达目标主机: 数据报通过多个路由器经过一系列网络层封装和传输后,最终到达目标主机。目标主机上的网络协议栈会解析数据报,并将其传递给上层应用程序。

数据报经过交换机:

  1. 封装到数据链路层: 当数据报通过交换机时,交换机通常不涉及IP地址的路由操作。相反,它操作在数据链路层。交换机根据目标MAC地址来决定数据报的传输。

  2. 数据链路层传输: 数据报在交换机的数据链路层进行传输。交换机根据目标MAC地址将数据报传递到正确的接口。

  3. 不涉及网络层: 与路由器不同,交换机不涉及网络层(IP层)的操作,因此它不解析或更改数据报的IP地址。它只关心数据链路层的数据帧传输。

  4. 最终到达目标设备: 数据报通过交换机传输,最终到达目标设备,该设备的网络接口会解析数据报,并将其传递给上层协议栈。

总之,路由器和交换机在网络中的不同位置和不同操作层级上起作用,根据需要执行不同的封装和转发操作。路由器涉及网络层(IP层)的路由操作,而交换机操作在数据链路层,主要根据MAC地址进行数据帧的传输。这两种设备在网络中协同工作,确保数据能够有效地传输到目标设备。

下图为数据封装的过程:

下图为数据分用的过程:

上述内容,我们只是简单讨论一下网络传输的基本流程。

后面的网络原理,我们会再讨论到这里的一些具体细节。

理解网络原理最主要就是为了能够进行编程,接下来就来讲讲网络编程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值