OSI代表开放系统互联(Open Systems Interconnection),这是国际标准化组织(ISO)提出的一个概念模型,用于描述网络通信的功能划分。简单来说,OSI模型把复杂的网络通信过程分成了七个不同的层次,每一层都有其特定的功能和角色。
每一层都有自己的头数据,在封装和解封的时候需要处理每一层的头部,通常头部定义了发送源和目标的一些信息,比如数据链路层,数据链路层的头部封装了源MAC和目标MAC等信息
简单点说,物理层就是负责传输“1”和“0”的地方。比如我们家里上网用的网线、光纤、WiFi信号,这些都属于物理层的范畴。它主要管的是“怎么把电信号或者光信号从一个地方传到另一个地方”。所以,网线里传的其实就是一串串的电信号,你可以理解成一堆小电流在网线里“跑步”,这些小电流的组合就形成了数据。
在物理层,我们不用考虑数据是什么,只需要保证这些信号能准确地传输过去。就像我们打电话的时候,电话线传的只是声音的振动,不关心你说的具体内容是什么。所以,物理层的任务就是把这些“振动”准确地传到对方那里,不管这个“振动”是用来干什么的。
WiFi信号其实就是一种电磁波,电脑和路由器通过这些电磁波来传输数据。这里的电磁波就是物理层的“工作工具”。另外,你家里网线插到电脑上,那根网线也是物理层的一部分。再比如光纤宽带,光纤里传输的就是光信号,这也是物理层在工作。
数据链路层就像是网络通信中的“邮递员”。它负责把数据打包成一个个“包裹”(我们叫做“帧”),然后负责把这些“包裹”送到正确的地方,同时还要确保这些“包裹”在传输过程中不出错。
想象一下,你要寄一个包裹,你需要把东西装进一个盒子里,写上收件人的地址,然后交给快递员。数据链路层的工作也是类似的,它把数据装进一个“框架”里,这个框架里包括了收件地址(MAC地址)和发送地址,还有一些用于检测错误的东西,就像包裹里的防震材料一样,确保东西安全送达。
数据链路层用的是MAC地址,这有点像每个设备的身份证号码。每个网卡都有一个独一无二的MAC地址,网络中的交换机就是根据这些地址来判断数据应该送到哪里。
交换机是数据链路层中一个重要的设备。它会根据设备的MAC地址,把数据转发到正确的设备上。可以想象一下交换机是一座大楼里的前台,所有的信件先送到前台,然后前台根据收件人的名字和房间号,把信件分发到各个房间。
网络层就像是“导航系统”。它负责决定数据包要走哪条路,从发送方到接收方。这个过程叫做“路由选择”。网络层最重要的概念之一就是IP地址。你可以把IP地址想象成网络中的“地址”,每个设备都有一个唯一的IP地址,就像每栋房子都有一个唯一的门牌号一样。当你在网上发信息,数据包就像邮件一样,要根据IP地址找到收件人。
在网络层中,有一个重要的设备叫做路由器。路由器的作用就像是高速公路上的路标,指引数据包从一台设备走到另一台设备。如果有多条路可以到达目的地,路由器会选择最快的一条。这就像你开车时,GPS会帮你选择最短时间到达目的地的路线一样。
在网络层,数据被称为数据包。数据包包含了发送地址和接收地址,就像邮寄包裹上的寄件人和收件人地址。网络层负责把这些数据包从发送方的IP地址送到接收方的IP地址,中间可能经过很多路由器,就像包裹在寄送过程中经过很多中转站一样。
因为网络中的数据传输效率问题,有时候一个大的数据会被分成多个小的数据包传输。网络层负责把这些小数据包分开发送,到达目的地后再重新组合起来,就像拼图一样。
网络层在网络通信中起着至关重要的作用。它确保数据能够找到最优路径,从一个设备传输到另一个设备。如果没有网络层,我们的数据就像没有导航系统的车辆,很容易迷路,无法到达目的地。
传输层就像是网络通信中的“可靠搬运工”。它的主要任务是确保数据能够从一个地方安全、完整、准确地搬运到另一个地方。
传输层有一个很重要的概念叫做端口号。你可以把端口号理解为“房间号”。在一个IP地址下,端口号帮助确定具体是哪一个应用程序要接收数据。比如你的电脑有一个IP地址,但你同时在用浏览器上网、用QQ聊天、用邮件客户端收邮件,这些应用程序通过不同的端口号来区分接收到的数据。端口范围0-65535,0-1023为系统占用端口
在传输层中,有两个主要的协议,分别是TCP(传输控制协议)和UDP(用户数据报协议)。这两个协议就像是两种不同的搬运工,有着不同的工作方式。
TCP可以理解为“讲究的搬运工”。它在搬运数据时非常仔细,确保每一块数据都能准确无误地送到目的地。如果在搬运过程中有任何数据丢失或者出错,它会重新搬运。这就像你寄包裹时选择了带有追踪和保险的快递服务,确保包裹安全送达。
一个TCP连接通常经历以下几个阶段:
建立连接(SYN-SYN/ACK):客户端发送SYN包,服务器回应SYN-ACK包,客户端再发送ACK包,完成三次握手。
数据传输:双方开始交换数据。
断开连接(FIN-ACK):当一方准备结束连接时,发送FIN包,对方回应ACK包,然后等待对方也发送FIN包。
等待关闭(TIME-WAIT):在双方发送完FIN包并确认对方已接收后,发起关闭的一方进入Time-Wait状态。
UDP可以理解为“随意的搬运工”。它在搬运数据时不做过多检查,直接把数据发出去,不管对方有没有收到、有没有出错。这样做的好处是速度快,缺点是可靠性低。它就像你寄包裹时选择了普通的平信,没有追踪和保险,只能祈祷包裹顺利到达。
UDP适用于那些对速度要求高、对可靠性要求不那么高的应用,比如视频直播、在线游戏等。
话的建立和结束,在分开的计算机上的两种应用程序之间建立一种虚拟链接,这种虚拟链接称为会话(session)。会话层通过在数据流中设置检查点而保持应用程序之间的同步。允许应用程序进行通信的名称识别和安全性的工作就由会话层完成。
数据的表示、压缩和加密。定义由应用程序用来交换数据的格式,该层负责协议转换、数据编码和数据压缩。转发程序在该层进行服务操作。
用户接口、应用程序。 应用层向应用进程展示所有的网络服务。当一个应用进程访问网络时,通过该层执行所有的动作。
如果你对网络通信有更多的疑问或者感兴趣的话题,欢迎在评论区留言