0
点赞
收藏
分享

微信扫一扫

(网络初识)

萧让听雪 2024-05-10 阅读 41
网络

网络发展史

独立模式

在最开始计算机被发明出来,但网络还未普及的情况下,每个计算机之间都是相互独立的:

假设现在有一份数据需要处理,然后这份数据的处理又分给三个人分别处理。假设小松处理进行第一部分的处理,当小松处理完后,就需要将数据交给小竹。但是小竹处理数据的计算机是另一台,此时又没有网络,所以小松就需要通过硬件的方式,将数据拷贝到一个硬件,例如软盘中:

通过这类硬件,将数据从一台计算机拷贝到另一台计算机。这种数据交换的方式无疑是非常麻烦耗时的。


网络互联

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

业务,就有了网络互连。

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

局域网LAN

局域网内的主机之间能方便的进行网络通信,又称为内网局域网和局域网之间在没有连接的情况下, 是无法通信的。

广域网WAN

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

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

局域网都属于其子网。

网络通信基础 

IP地址

IP 地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说, IP 地址用于定位主机 的网络地址

就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。

IPv4的ip地址是用4字节的无符号整数表示的,一共可以表示出2^32,即42亿左右的ip地址。但是根据2022年的数据,当今世界的网民已经有接近50亿人了,假设人手一台网络设备,ip地址就已经不够用了,更不用说当今推行的物联网时代,越来越多的物品可以联网,这也就导致继续采用IPv4协议的话,ip地址已经严重不足了。当然,有人可能会问,既然ip地址已经严重不足了,那为什么当前的网络使用却没有什么问题呢?这其实就涉及到IPv4的公网ip、私网ip等问题。在这里,大家只用知道,IPv4所能提供的ip地址已经无法满足未来的网络发展需求即可。

IPv6的ip地址是采用16位的无符号整数来表示的,根据指数爆炸的概念我们可以知道,IPv6所能表示的ip地址数量就远远超过IPv4。但是,当今时代主要使用的ip协议是IPv4的版本。一个原因是网络发展的时间太久了,大家已经使用了数十年的IPv4了,所以现今存在的大部分网络设备都是采用的IPv4。另一个重要原因就是,IPv6无法兼容IPv4。因此如果想将I已经存在的全部网络设备从Pv4切换为IPv6,其需要付出非常巨大的代价,大家普遍无法接受。还有一个原因就是IPv6的发展时间并不长,所以稳定性还存在问题,比不上IPv4。因此现存的大部分网络设备都是采用的IPv4。

但是,IPv4提供的ip地址数量逐渐无法满足需求的现象也是客观存在的,所以现在越来越多的新出现的网络设备都开始使用IPv6了,而一些比较老的网络设备也在尝试从IPv4切换到IPv6。可以预见的是,在不远的将来,IPv6将替代IPv4成为ip协议中的主流版本。


端口号

概念

在网络通信中, IP 地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简

单说: 端口号用于定位主机中的进程

类似发送快递时,不光需要指定收货地址( IP 地址),还需要指定收货人(端口号)。

格式

端口号是 0~65535 范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数

据。

问题:

有了 IP 地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制

0/1 数据来传输,如何告诉对方发送的数据是什么样的呢?

网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如

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

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

认识协议

 

概念

协议,网络协议的简称,网络协议是网络通信(即网络数据传输) 经过的所有网络设备 都必须共同遵从

的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

通常由三要素组成:

协议(protocol)最终体现为在网络上传输的数据包的格式。

协议作用

为什么需要协议?

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

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

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

计算机生产厂商有很多;

计算机操作系统,也有很多;

计算机网络硬件设备,还是有很多;

如何让这些不同厂商之间生产的计算机能够相互顺畅的通信 ? 就需要有人站出来,约定一个共

同的标准,大家都来遵守,这就是 网络协议

知名协议的默认端口

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

用的应用层协议,如:

22 端口:预留给 SSH 服务器绑定 SSH 协议

21 端口:预留给 FTP 服务器绑定 FTP 协议

23 端口:预留给 Telnet 服务器绑定 Telnet 协议

80 端口:预留给 HTTP 服务器绑定 HTTP 协议

443 端口:预留给 HTTPS 服务器绑定 HTTPS 协议

需要补充的是:

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

65535 范围内的端口来绑定知名协议。

餐厅的 VIP 包房是给会员使用,但会员也可以不坐包房,坐其他普通座位。


协议分层

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

什么是协议分层

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

在这一过程中,其实就存在两层协议。

因此,协议分层实际上就是指在不同主机之间进行传输时,会将具有很强关联性的内容放在同一层,每一层都有一份单独的协议。

分层的作用

协议分层实际上就是指在不同主机之间进行传输时,会将具有很强关联性的内容放在同一层,每一层都有一份单独的协议

所以,分层好处,一个是“解耦”,一层中出现了问题,不会影响其他层,能在不影响其他层的情况下更快速的定位错误;另一个是“封装”。在调整时,调整对应层中封装的内容即可。

在上面的例子中,仅仅分了两层。但在实际中,网络通信是非常复杂的,需要分为更多的层次。

在过去,大家可能以为在整个网络中都只使用同一个协议,这个认知其实是错误的。在网络中是进行了分层的,每一层都有一份对应的协议。 

分层

假设我们现在在上海,想去云南旅游。要实现这个目标,我们首先要考虑的第一个问题,就是我们如何从上海到达云南,是开车去,还是跟旅游团,还是步行?要从上海到达云南,需要经过一个又一个城市,并不是说我们嘴巴动一下,就可以直接从上海瞬移到云南,这之间是需要有方法和路径的。同样的,在网络中要将一台主机的数据传给另一个主机,首先需要解决的问题就是“如何将数据从一台主机传递给另一台主机”。

当我们决定好怎么去云南后,就要面临第二个问题了。整个中国这么大,交通路线众多,但我们在前往云南的时候,怎么确定我们的路线呢?这就要求我们在旅游的过程中,要有判断和选择路线的方法,或是看导航,或是询问路人。同样的,在网络中,一台主机加入的局域网或广域网中存在大量的主机和路由器,所以当一份数据在网络中传输时,这份数据要有路径选择的能力,选择前往目标主机的路径。

尽管我们在旅游的过程中可以依靠导航和询问路人的方法来选择路线,但是也可能出现导航出问题、或者路人记错路了的情况导致我们选择的路线出现问题。此时,我们就会可能原路返回或跟着这条路线去找其他的路。这就是我们在旅游的过程中,要有对路线的容错和纠错能力。在网络中,数据传输时也可能选择错误的路线,此时就要求数据有容错纠错的能力,比如让主机重新发一份。

解决了上面的三个问题后,我们终于可以顺利到达云南了。但是,到达云南是我们此行的目的吗?并不是,我们的目的是到云南玩,而到达云南,则只是实现玩这一目标的手段。因此,当一份数据被从一台主机传达到另一台主机的时候,就要求接收数据的这台主机,有利用这份数据解决应用方面的问题的能力。 

总结起来,在网络通信中,一共需要解决一下四个问题:

在这4个问题中,前3个问题都是为了实现成功传输数据的手段;最后一个问题则是为了解决数据应用的问题.

OSI七层模型

概念

模型形式

在OSI七层模型,它认为在网络传输中一共会遇到7个问题,所以它将这些问题划分为七层。在实际中的网络中,也确实会遇到这7个问题,但是在实际的工程中,我们并不会将这七层全部实现。

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

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

物理层 :负责光 / 电信号的传递方式。比如现在以太网通用的网线 ( 双绞 线 ) 、早期以太网采用的的同

轴电缆 ( 现在主要用于有线电视 ) 、光纤,现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理

层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器( Hub )工作在物理层。

数据链路层 :负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步 ( 就是说从网线上 检测到什么信号算作新帧的开始) 、冲突检测 ( 如果检测到冲突就自动重发 ) 、数据差错校验等工作。 有以太网、令牌环网,无线LAN 等标准。交换机( Switch )工作在数据链路层。

( 如何将数据从一台主机传输到另一台主机)

网络层 :负责地址管理和路由选择。例如在 IP 协议中,通过 IP 地址来标识一台主机,并通过路由表

的方式规划出两台主机之间的数据传输的线路(路由)。路由器( Router )工作在网路层。

( 如何让数据传输的过程中拥有路径选择能力 )

传输层 :负责两台主机之间的数据传输。如传输控制协议 (TCP) ,能够确保数据可靠的从源主机发

送到目标主机。

( 当数据传输出现问题时,如何让数据有容错或纠错的能力)

应用层 :负责应用程序间沟通,如简单电子邮件传输( SMTP )、文件传输协议( FTP )、网络远程访问协议(Telnet )等。我们的网络编程主要就是针对应用层。

( 当数据成功传输到另一台主机中时,这台主机如何利用这份数据解决应用方面的问题 )

在这五层里面,除了物理层外的其他四层就分别对应了上文中所说的网络传输中会遇到的4个问题。

 

网络传输基本流程

协议报头

在上文中说过了,网络中是进行了分层的,每一层都有自己的协议。而每一个协议的最终表现就是,协议都要有报头。这个协议报头大家可能不是很了解,这里举一个例子。

假设今天我们从网上买了一个水杯,商家通过顺丰快递给我们发货。当水杯到的时候,我们去拿快递时,拿到的不仅仅有水杯,还有一个快递盒子和一张贴在上面的快递单。但是,我们从网上买的东西仅仅是水杯,并没有买快递盒子和快递单。这也就说明,在我们网上购物时,商家发货过来的东西并不仅仅是我们买的物品,还会多一部分。而这多出来的东西,其实就叫做“报头”。更准确来讲,这里的“快递单”才是“报头”。

但是顺丰快递是如何确保他们的快递员可以看懂快递单上的内容的呢?其实就是通过“格式”来实现的。例如快递单的左边是收货人的信息,右边是发货人的信息,通过这些规定,就可以让全国各地的每一个快递员都认识这个快递单上的内容。如果没有这些规定,就可能有人发货的时候就在快递单上写个张三,然后下面带一串数字。快递员看了怎么知道这些信息到底是收货人的还是发货人的信息呢?所以,协议通常是通过协议报头来进行表达的。

虽然在这个例子中只有快递站这个传输层,但如果在快递站之下又进行了外包,例如顺丰把快递外包给韵达,那么在韵达这一层也会一份快递单。即在网络传输中,每一份数据最终在被发送或者在不同的协议层中时,都要有自己的报头

注意,虽然在现实中收快递时我们会接触和看到快递单,即快递站的协议报头,但这是现实中为了图方便省事和验货而导致的。在网络中,上层是看不到下层的协议报头的。即用户层是看不到快递站的协议报头的。

每一个协议的最终表现就是,协议都要有报头——报头在网络通信过程中起到关键作用,使得源和目的主机能够理解数据包的内容、目的地以及如何处理这些数据。

协议报头有如下三个特点:

数据包封装和分用 

不同的协议层对数据包有不同的称谓,在传输层叫做“数据段”(segment),在网络层叫做“数据报”(datagram),在链路层叫做“数据帧”(frame)

封装

首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。

数据封装成帧后就发送到传输介质上,到达目标主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。

分用

 局域网通信

局域网,其实就可以看成是在同一台路由器下运行的主机组成的网络。在同一个局域网中的主机,是可以直接通信。即可以不通过路由器完成数据的传输。

在同一个局域网中的主机,可以看成是用网线连接起来的。假设现在有如下一个由七台主机组成的局域网: 

假设此时mac1向mac7发送一条“你好”的信息,此时在这个局域网中的所有主机其实都看到了这条信息。但是由于mac1在发送信息时指定了向mac7发送,所以虽然其它几台主机都看到了这条消息,但是它们通过对比mac地址(MAC地址是网络设备的物理地址,它是唯一的,可以帮助网络设备进行自我定位。在同一个局域网(LAN)中,MAC地址可以用来唯一标识网络中的每一个设备)发现并不是向自己发送的,于是什么都不做。而mac7对比mac地址后发现是向自己发送的,于是接收这条消息。

通过上面的内容就可以知道局域网的数据是如何正确传输到目标主机了。但是,这两台主机在通信时,是如何通信的呢?首要要知道,因为协议分层的缘故,所以两台主机在通信时,势必要经过多层协议。

假设我们现在作为用户,向另一个人发送了一条“你好”的消息。这条消息首先会进入应用层,而应用层有自己的协议,所以此时就要添加应用层的协议报头。添加完成后,再这这份数据向下传输到传输层,传输层也有自己的协议,所以也要添加自己的协议报头,依次往下,每经过一层都要添加对应层的协议报头:

 

当数据在传输时,这份数据应该被叫做“报文”最外层的协议报头被称为“报头”,而报头后面的内容,即后面的协议报头和要发送的信息被总称为“有效载荷”。即报文 = 报头 + 有效载荷

当数据到达数据链路层后,这份数据就会通过以太网传输到另一台主机。当数据从一台主机被传输到另一台主机上时,并不是直接传输到应用层,而是传输到它的最底层,数据链路层。此时该主机的数据链路层会拿走最外层的协议报头,然后将剩下的数据向上传输到网络层。网络层再拿走最外层的协议报头,继续将剩下的数据向上传输,直到传输到应用层后,应用层拿走最后一个协议报头进行解析,最后将“你好”这条数据反馈给用户:

在这个传输过程中,用户A的数据向下传输添加协议报头的过程,就被叫做“封装”;而用户B中拿走协议报头进行解析过程,就被叫做“解包”。而将数据向上传输的过程,叫做“分用”::

通过上面的图我们可以发现,在同一层中,它们所拿到的数据都是一样的。所以在网路协议中,我们可以认为同层协议在直接通信,也可以理解成是向下交付的

在有了上面的认知后,大家可能就会有如下2个问题。

这两个问题是每一层协议都需要面对的问题,都需要解决这两个问题。

 广域网通信

广域网通信和局域网通信的方式是差不多的,唯一的区别就是在广域网中使用了路由器来完成数据包的转发,换句话说,路由器中一定存在两个或以上的网络接口来实现不同局域网的数据转发

假设现在有以上两个不同局域网的主机要通信,左边的主机向右边的主机发送了一条“你好”的消息,这条消息同样会按照协议分层逐层往下传递,并在每层协议中获取协议报头:

当到达数据链路层时,这份数据就需要通过路由器转发到另一个局域网中的主机。此时,这份数据首先会传输到路由器中的驱动程序,即数据链路层,然后再这里进行解包,解包出的数据传递到路由器内,然后路由器再将其传到另一个驱动程序内并封装一层协议报头,再传到目标主机的数据链路层。即将数据传到路由器和将数据从路由器转发到另一台主机的过程中还要经历一次解包和封装: 

如果大家观察仔细点,就会发现在上面的图中,左侧主机所处的是以太网,而右侧主机所处的是令牌环网。虽然它们所处局域网的标准不同,但是却可以没有阻碍的进行通信,这其实就是协议分层带来的优势,即“屏蔽底层网络差异”。通过在路由器中进行解包和封装的过程,就在无形中将以太网的标准替换为了令牌环网的标准,实现了双方的通信。

补充

举报

相关推荐

网络初识

网络编程--初识网络

网络基础---初识网络

初识网络协议

网络原理初识

初识网络原理~

初识网络原理

0 条评论