网络OSI模型简介

一.七层?四层?

[OSI模型](Open System Interconnection Reference Model,缩写为OSI),全名“开放式系统互联通信参考模型”,是一个试图使各种计算机在全世界范围内互联为网络的标准框架。1983年,国际标准组织(ISO)发布了著名的ISO/IEC 7498标准,它定义了网络互联的7层框架,也就是开放式系统互联参考模型。
11111.png

1.为什么需要协议?

什么是协议(protocol)?通俗的来讲,协议是一种双方都明白或者必须遵守的事先约定,比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了“敌人入侵”这一抽象信号。这样一个“狼烟=敌人入侵”就是一个简单的协议。协议可以更复杂,比如摩尔斯码(Morse Code),使用短信号和长信号的组合,来代表不同的英文字母。
同样,计算机之间的通信也要遵循不同层次的协议,来实现计算机的通信。早期的计算机网络,都是由各厂商自己规定一套协议,IBM,Apple,和MicroSoft都有自己的网络协议,比如MicroSoft的两台电脑用网线连起来,互相说话能听懂。但是MicroSoft和Apple的电脑连接起来说话就听不懂了,想想你和我微信聊天,我是MicroSoft电脑,你是Apple电脑,你发送的消息到我这里显示不了或者解析成另一个意思,这样通讯就不能进行了(通过上面的图我们可以看到,表示层就是消除不同设备之间固有数据格式差异的)。
为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现这个目标,互联网协议簇(Internet Protocol Suite)就成为了通用协议标准。互联网协议包含了上百种协议,但是最重要的两个协议是TCP和IP协议,而我们通常把基于TCP和IP协议的所有协议统称为”TCP/IP协议(蔟)”。

2.OSI七层模型是干什么的?

互联网的实现,分成好几层,每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。我们在上图中已经大致标出了每一层的功能。OSI模型就是这样的一个分层,它是一个由国际标准化组织􏰁提出的概念模型,试图提供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的接口。

3.TCP/IP四层(参考)模型

TCP/IP和OSI模型组并不能精确的匹配,但是我们可以尽可能的参考OSI模型并在其中找到TCP/IP的对应位置。如上图所示,我们已经标出了TCP/IP对应的四层位置所在。通常人们认为OSI模型最上面三层(应用层、表示层、会话层)在TCP/IP中是一个应用层。由于TCP/IP有一个相对比较弱的会话层,由TCP和RTP下的打开和关闭连接组成,并在TCP/UDP下的各种应用提供不同的端口号,这些功能被单个的应用程序添加。

4.TCP/IP(参考)模型与OSI七层模型有什么异同?

前面我们说过,TCP/IP协议是互联网协议(簇)的统称,他是互联网标准通信的基础,它提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。而OSI模型是开放式系统互联通信参考模型——笔者的理解是:
OSI是一个完整的、完善的宏观模型,他包括了硬件层(物理层),当然也包含了很多上面途中没有列出的协议(比如DNS解析协议等);而TCP/IP(参考)模型,更加侧重的是互联网通信核心(也是就是围绕TCP/IP协议展开的一系列通信协议)的分层,因此它不包括物理层,以及其他一些不想干的协议;其次,之所以说他是参考模型,是因为他本身也是OSI模型中的一部分,因此参考OSI模型对其分层。

二.自底向上的网络分层

1.物理层

电脑要组网,第一件事要干什么?当然是先把电脑连起来,可以用光缆、电缆、双绞线、无线电波(WiFi)等方式。物理层的作用就是通过物理手段把电脑连接起来,它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。
这里说一下,通过物理手段将设备连接起来组网,物理手段就是光缆、电缆、双绞线、无线电波(WiFi)等,比如中美之间的网络通信是通过海底光缆;两个不同的局域网(电信的网络和移动的网络)通讯,嗯,稍微麻烦点,我的电信手机先连上电信的服务器,你的移动手机连移动服务器,他们两个ISP(Internet Service Provider 互联网服务提供商)之间是通过物理手段链接的,这样我们就能够间接的实现通讯了。
互联网可以说就是用物理设备将各个“局域网”相连组成的更大的“局域网“,更大局域网层层相连,最终就组成了”互联网“,比如小的互联网就是你家和我家的WiFi,一个省的每户家庭的WiFi组成这个省的局域网,各个省的局域网组成中国的局域网,各个国家之间的局域网通过物理手段互联就组成了横跨世界的”互联网“(当然天朝还有一堵墙)。

2.数据链路层

(1)定义
物理层就是传输电路的0和1信号的,但是单纯的0和1没有意义,必须规定解读方式:多少个0和1算一组?每个信号有什么意义?——这就是链路层的意义,它在物理层的上方,确定了0和1的分组方式。
(2)以太网协议
早些时候,各个公司都有自己的电信号分组方式,后来出现了“以太网”这种协议逐渐占据了主导的地位。“以太网”规定,一组电信号构成一个数据包,叫做“帧(Frame)”;每一帧分成两个个部分:标头(Head)和数据(Data)。
因此,数据链路层链路层的数据包就叫“以太网数据包”,他由“标头”和“数据”两部分组成——其中,“标头”包含数据包的一些说明项,比如发送者、接受者、数据类型等等。
(3)MAC地址
上面我们提到,以太网数据包的“标头”包含了发送者和接受者的信息,那么,发送者和接受者是如何标识的呢?
2.3.1 以太网规定,连入网络的所有设备,都必须具有“网卡”接口。数据包必须是从一块网卡,传送到另一块网卡,网卡的地址,就是数据包的发送地址和接受地址,也叫MAC地址。
2.3.2 每块网卡出厂的时候,都有全世界独一无二的MAC地址,长度是48位的二进制,通常用12个十六进制数表示。
2.3.3 前6个十六进制是厂商编号,后6个是该厂商的网卡流水号,有了MAC地址,就可以定位网卡和数据包的路径了。
(4)广播
定义地址只是第一步,后面还有更多步骤——首先,一块网卡怎么只带另一块网卡的MAC地址?回答是有一种ARP协议,可以解决这个问题。这个留到后面介绍,这里只需要知道,以太网数据包必须知道接收方的MAC地址,然后才能发送。
其次,就算有了MAC地址,系统怎样才能把数据包准确送到接收方?回答是以太网采用了一种很"原始"的广播式的方式,它不是把数据包准确送到接收方,而是向本网络(局域网)内所有计算机发送,让每台计算机自己判断,是否为接收方。
一台计算机向本局域网内的所有电脑均发送相同的数据包,其他计算机收到这个数据包之后,会读取这个数据包的“标头”,找到其中接收方(目标方)的MAC地址,然后与自身的MAC地址进行比对,如果两者相同,说明就是要发给自己的,然后接受这个包并做出进一步的处理,否则丢弃这个包。这种发送方式就叫“广播”,主要通过分组交换机或者网络交换机进行。

3.网络层

根据上面的讲解,理论上依靠MAC地址和广播技术,上海的网卡发出的数据包就可以找到洛杉矶网卡了——但是如果全世界的计算机都这么干,那么每一台计算机发出的数据包都同步广播到全世界其他电脑,再一一比对判断,这样显然是低效、不现实的。
因此,上面我们强调,广播是在发送者所在的局域网内广播的,不同也就是说,如果两台计算机没有在同一个子网(局域网)内,是无法通过广播直接传过去的。前面我们说过,互联网是由一个个子网组成的更大的子网,一级一级组网,最终构成的互联网。
因此我们必须找到一种方法,区分哪些MAC地址属于同一个子网。如果是同一个子网就采用广播的形式,如果不是,则采用“路由”的方式(后面会讲)发送——这就导致了网络层的出现,他的作用是引入一套新的地址,使我们能够区分哪些计算机属于同一个子网,这个套机制就叫做“网络地址”,也就是“IP地址”。
(1)IP协议
规定网络地址的协议,叫IP协议。他定义的地址,就叫做“IP地址”。IP地址目前有IPV4(Internet Protocol version 4,IPv4)和IPV6(Internet Protocol version 4,IPv6)两版,又称“互联网通信协议第四/六版”。2011年,IANA IPv4 pool地址完全用尽时,IPv6仍处在部署的初期,因此IPV4地址也是目前最为广泛的IP地址——这个版本规定,网络地址由32个二进制位组成,习惯上,我们分成四段十进制数表示IPV4地址,从0.0.0.0到255.255.255.255。
(2)子网掩码
问题在于单单从IP地址,我们无法判断网络部分。还是以172.16.254.1为例,它的网络部分,到底是前24位,还是前16位,甚至前28位,从IP地址上是看不出来的。那么,怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?这就要用到另一个参数"子网掩码"(subnet mask)。
所谓"子网掩码",就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.254.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
知道"子网掩码",我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
(3)路由/路由器/网关/交换机
上面我们已经确定了两台计算机是否遭同一个子网中,如果在,则采用广播+MAC寻址的的方式发送数据包,如果不是,则要采用“路由”的方式了,那么什么是“路由”呢?
就是通过互联的网络把信息从源地址传输到目的地址的活动。路由引导分组转送,经过一些中间的节点后,到它们最后的目的地。从“路由”的定义中可以看到,“路由”是一种活动,一种动作,一种行为,作用是是将信息从原地址传输到目的地址,比较特殊的是,原地址和目标地址是在两个不同的子网中的。那么如何传输呢?路由定义一条路径,经过因特网发送包到另一网络上的地址,但路由不定义完全路径,只定义从主机到可以将包转发到目的地的网关(子网)间的路径段(或从一个子网到另一个子网)。
路由器,简单理解就是实现路由功能的机器。路由器连接两个或多个网络并提供路由功能。
前面我们说过,网卡是计算机的一个硬件,它在接收到网路信息之后,将信息交给计算机。当计算机需要发送信息的时候,也要通过网卡发送。一台计算机可以有不只一个网卡,比如笔记本就有一个以太网卡和一个WiFi网卡。计算机在接收或者发送信息的时候,要先决定想要通过哪个网卡。路由器(router)可以通俗理解为一台配备有多个网卡的专用电脑,它让网卡接入到不同的网络中。

4.传输层

(1)端口号
有了MAC地址和IP地址,我们已经可以在互联网上的任意两台电脑之间建立通信了。接下来的问题是,同一台主机上许多程序(进程)都需要用到网络,比如你一遍浏览网页一遍聊天。当一个数据包从网上发送过来的时候,我们需要一个参数来区分,他到底是提供哪个进程使用的——这个参数就叫做“端口号”,他其实就是每一个使用网卡的程序的编号。每个数据包发送到主机特定的端口,所以不同的程序就能取到自己想要的数据包。
端口是0到65535之间的一个整数,正好16个二进制。0~1023的端口被系统占用,用户只能使用大于1023的端口。不管是浏览网页还是聊天,应用程序都会随机选用一个端口,然后与服务器简历相应的端口关系。这里需要补充一点,HTTP协议默认使用80端口,8080是用来访问代理服务的。
“传输层”的功能,就是建立“端口到端口”之间的通信。相比之下,“网络层”的功能是建立“主机到主机"的通信。只要确定主机和端口号,我们就能实现程序之间的交流。
(2)Socket
上面我们已经说了,传输层是建立“端口到端口”之间的通信,更具体一点,也就是程序和程序之间的通信,或者“进程间通信”。嗯,挺唬人的一个概念。
进程间通信分为两种——一种是主机内部(或终端内部)进程间通信,这个由终端或主机上的操作系统决定,比如在Android系统上面进程间通信就是AIDL;另一种是跨主机进程间通信或者网络进程间通信,也叫“socket通信”。我们可以先笼统的理解——Unix系统把主机+端口,叫做"套接字"(socket),当然,这样说是有失偏颇的。
(3)UDP/TCP协议
UDP和TCP协议都是传输层的协议,他们的主要作用就是在应用层的数据包标头加上端口号(或者在IP协议的数据包中插入端口号)。
4.3.1 UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。
4.3.2 TCP协议可以近似认为是有确认机制的UDP协议。每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。

5.应用层

应用程序收到"传输层"的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。“应用层"的作用,就是规定应用程序的数据格式。举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层”。这是最高的一层,直接面对用户。HTTP/HTTPS/FTP(文件传输协议)这些都是应用层的协议,并且这三者都是基于TCP的应用层协议。基于UDP的应用层协议有NFS(网络文件系统)。

三.数据包格式

1.应用层数据包

这里是请求简书的一个GET请求报文,请求谷歌的报文结构也是相同的,只是域名等内容不同罢了。我们假定这个部分的长度为4960字节,此时的数据包结构如下:
111.png
就是一个单纯的数据包,没有头部,数据部分就是上面的报文。

2.传输层数据包(TCP/UDP数据包)

TCP/UDP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为51775。
TCP数据包的标头长度为20字节,加上嵌入HTTP的数据包,总长度变为4980字节。
222.png
可以看到,TCP/UDP数据包就是在应用层数据包前面加上端口号的等必要的寻址信息作为头部。

3.网络层数据包(IP数据包)

下面就到了网络层,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是192.168.1.100(本机),接收方是172.194.72.105(Google)。
IP数据包的标头长度为20字节,加上嵌入的TCP数据包,总长度变为5000字节。
333.png

4.数据链路层数据包(以太网数据包)

最后,IP数据包嵌入以太网数据包。以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到)。
以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500、1500、1500、560。
444.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机网络OSI模型(Open Systems Interconnection model)是一种概念模型,用来标准化和表征电信或计算系统的通信功能,而不考虑其内部结构和技术。该模型的目标是实现不同通信系统之间的互操作性。原始版本的OSI模型定义了七个抽象层,每个层次提供特定的功能和服务,上层的服务由下层提供。例如,网络层提供无差错通信路径给上层的应用程序,而调用下层来发送和接收数据包。在同一层次上的两个实例通过该层次的水平连接进行可视化连接。OSI模型的七个层次依次是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [计算机网络——OSI 参考模型](https://blog.csdn.net/weixin_59796310/article/details/126926559)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [LeetCode-计算机网络面试突击](https://blog.csdn.net/Jiangtagong/article/details/115643442)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值