前言
今天和大家聊的是一个比较基础的问题,OSI七层模型和TCP/IP四层模型。
小伙伴们可能有疑问,这个东西还用写文章吗,太基础了吧,网上文章多的是,随便一搜索就能找到。
确实是这样,网上资料确实很多,但是如果面试官问你这个问题,你能很好的回答上这个问题吗?
本文就是用大白话来聊一聊这个话题,让你对它们有一个很清晰的认识。
照搬网上资料的简介
既然大家说网上资料很多,那王子也从网上给大家找到一张表格,如下:
OSI七层模型 | TCP/IP四层模型 | 对应网络协议 |
应用层(Application) | 应用层 | HTTP、TFTP, FTP, NFS, WAIS、SMTP |
表示层(Presentation) | Telnet, Rlogin, SNMP, Gopher | |
会话层(Session) | SMTP, DNS | |
传输层(Transport) | 传输层 | TCP, UDP |
网络层(Network) | 网络层 | IP, ICMP, ARP, RARP, AKP, UUCP |
数据链路层(Data Link) | 数据链路层 | FDDI, Ethernet, Arpanet, PDN, SLIP, PPP |
物理层(Physical) | IEEE 802.1A, IEEE 802.2到IEEE 802.11 |
看完之后,是不是觉得七层模型和四层模型也就这么多东西,没什么可讲的呢?
才怪!
你知道每个层具体都是做什么的吗?为什么这么分层呢?接下来我们就用大白话来聊一聊这些问题。
自底向上详解模型
1.物理层
首先我们来看一下物理层,物理层是做什么的?网上资料如下:
主要定义物理设备的标准,比如网线的接口类型,光纤的接口类型,各种传输介质的传输速率等,它的主要作用就是传输比特流(就是由1 0 转换为电流的强弱类进行传输,到大目的地后在转换为 1 0 就是通常我们说的数模转换和模数转换)这一层的数据叫做比特。
看完网上的资料是不是一脸懵逼,没关系,我们用白话解释一下。
物理层说白了就是怎么让电脑之间联网。比如插根网线、连接wifi、光缆等等方式。我们就理解成物理层负责怎么把电脑连接起来,形成一个网络,就完事了。它传输的是计算机最底层的0 1信号,学过计算机或者电子的应该都清楚0 1信号。
2.数据链路层
我们还是看一下网上的资料:
主要将物理层接受的数据进行MAC地址(网卡地址)的封装与解除封装。常把这一层的数据叫做帧。在这一层工作的设备叫做交换机,数据通过交换机来传输。
解析:
我们知道物理层把各个电脑连接起来了,互相之间发送0 1电路信号,那是不是得知道这些0 1信号代表啥意思?数据链路层就是翻译这个的。
以前,每个公司会定义自己的电路信号分组方式,后来出现了以太网。一组电信号就是一个数据包,也就是帧(frame),它分为两部分,标头(head)和数据(data),标头里一般会放一些说明的东西,比如发送者、接收者和数据类型等等。
那么数据包中是如何确定发送者位置的呢?
以太网规定每个网卡必须包含一个mac地址,mac地址就是这个网卡的身份证。接入网络的所有设备都得有网卡,数据包中就是通过mac地址进行网卡定位的。每块网卡出厂时就有一个唯一的mac地址。48位的二进制,但是一般用12个16进制数字表示,前6个16进制是厂商编号,后6个16进制是网卡流水号。
那么以太网的数据包是怎么从一个mac地址发送到另一个mac地址的呢?这个其实不是点对点的,而是会广播给局域网内的所有网卡,然后每个网卡会从数据包中获取接收者的mac地址进行比对,如果相同就说明是给自己的数据包。
当然这种广播的方式只针对于局域网。
3.网络层
网上资料:
主要从下层接受到的数据进行IP地址(192.168.0.1)的封装与解封装。在这一层工作的设备是路由器。把这一次的数据叫做数据包。
解析:
网络层是一个比较复杂的部分,上边我们介绍了局域网内发送数据包是通过广播的方式发送的,那么怎么来确定哪些电脑在一个子网内呢?这就要靠网络层了,于是引入了IP地址,它就可以区分出哪些电脑在一个子网。
网络层有IP协议,定义的地址就叫IP地址,分为IPv4和IPv6,目前我们一般使用的都是IPv4,由32个二进制数字组成,但是一般用4个十进制表示,范围从0.0.0.0到255.255.255.255。
每台计算机都会被分配到一个IP地址,前24位(也就是十进制的前三个)代表网络,后8为(十进制的最后一个)代表主机。
如果几台电脑在一个子网,那么前三个十进制数一定是一样的。
而实际上不单单是通过ip地址进行判断的,还需要ip地址配合子网掩码一起判断。
比如两个地址192.168.1.3和192.168.2.5,判断是否是一个子网,首先会分别与子网掩码255.255.255.0进行二进制的与运算,然后对比网络部分的数字是不是一样的。
那么如果发现不在一个子网了,要怎么传输信息呢?
这个时候就需要路由来发送数据包了。
说到路由一定会想到我们平时使用的路由器,家里的路由器其实连接的就是你自己家里的一个子网,如果你要访问外网的时候,其实是跟那个网站机器所在的子网进行通信的。
路由器其实就是配置了多个网卡的专用设备,可以通过不同网卡接入不同的网络。而网关就是路由器的一种,我们可以认为路由器的ip地址就是网关地址,路由器上每个网卡都有ip地址和mac地址,但只能通过ip寻址,不能通过mac寻址。
那网络交换机又是什么呢?它也是一种设备,是工作在数据链路层的,是通过mac地址寻址和传输数据的。网络交换机主要用在局域网的通信,通过mac地址进行广播通信。而路由器一般是用来让你连接外网的。
顺便我们再介绍几个概念作为扩展。
LAN,就是local area network,就是局域网;WAN,就是wide are network,就是广域网。WLAN是wireless local area network,就是无线局域网,也就是wifi。
家里的路由器是包含交换机和路由两个功能的,如果连接到局域网内的设备就把网线插入LAN接口,如果连接外网就把网线插入WAN接口。
那么路由器访问外网的过程是怎么样的呢?
举个例子,两个局域网之间如何通过一个路由器进行通信。
大概过程就是,路由器配置了两个网卡,每个网卡可连接到一个局域网内。
局域网1内的电脑想发送数据到局域网2内的电脑,在数据包中会写上自己的ip地址和对方的ip地址。但是他们不在一个局域网内,于是局域网1的电脑先通过交换机将数据包发送给路由器,这个过程需要将路由器的一块网卡的ip地址对应的mac地址写到数据包的头部,然后才能通过交换机广播出去,发送给路由器。
接着路由器接到数据包,就会在局域网2内将目标机器的ip地址对应的mac地址写入头部,然后通过局域网2的交换机发送给局域网2内的电脑。
一个局域网内的每台机器都有自己的ARP Cache,这个ARP就是用来让局域网内各个设备都知道每个设备的ip地址和mac地址的对应关系的。所以在一个子网内通信,就是在数据包里写上对方的mac地址,交换机广播就完了。不同子网的通信,就是写上对方的ip地址,然后先通过路由器的mac地址广播到路由器,路由器再根据另外一个子网的ip地址转换为另外一个子网机器的mac地址,再通过交换机广播,就是这样的流程。如下图:
4.传输层
网上资料:
定义了一些传输数据的协议和端口号(www端口 80等),如:TCP(传输控制协议。传输效率较低,可靠性强,用于传输可靠性要求高数据量大的数据),UDP(用户数据报协议,与TCP相反,用户传输可靠性要求低,数据量较少的数据,如QQ聊天就是通过UDP传输的)主要从下层接收的数据进行分段和传输,到大目的地后再重组。
解释:
上边我们已经了解了网络层的通信流程,但还有个问题,就是机器上很多的程序都在使用一个网卡进行网络通信,那么怎么区分是哪个程序的数据呢?
这时候就引入了端口号的概念,就是发送的数据包其实是到网卡的某个端口上去的,然后那台机器上监听这个端口的程序就可以提取发送到这个端口的数据了。
端口号范围是0-65536,0-1023被系统占用了,其他应用程序用的是1024以上的端口。
所以小伙伴们会发现,网络层是基于ip协议进行主机之间寻址和通信的,然后传输层其实是建立主机的某个端口到另一个主机的端口之间的连接和通信的。
udp和tcp都是传输层的协议,作用就是在数据包里加入端口号,进行点对点通信。
udp是不可靠的,发出去人家收到没有就不知道了;tcp是可靠的,要求三次握手确认,接收到消息必须回复。
tcp协议仅仅规定了一套基于端口的点对点通信协议,包括如何建立连接,如何发送和读取消息,实际开发一般使用的就是socket网络编程了。
说到这里相信小伙伴们对与socket网络编程的原理也就有了一个更深层的了解了。
5.应用层
网上资料:
会话层:通过传输层(端口号:传输端口与接受端口)建立数据传送的通路。主要在你的系统之间发起会话或者接收会话请求(设备之间需要互相认识可以是IP也可以使MAC地址或者主机名)
表示层:主要是对接收的数据进行解释 加密与解密压缩与解压缩等(也就是把计算机能够识别的东西转换成人能识别的东西,图片声音等)
应用层:主要是终端应用,比如说是FTP(各种文件下载),web浏览器,QQ(可以理解成我们在电脑上可以直接看到的东西就是终端应用)
解释:
在四层模型中,应用层包含了会话层、表示层、应用层。所以我们就放在一起解释了。这部分网上资料其实说的还是比较清楚的。
应用层中最常见的协议就是http协议。
上文中我们介绍了ip地址、子网掩码、网关地址,那我们在这里扩展一下DNS的概念吧。
DNS:Domain Name System,即域名服务系统。因为我们一般定位是通过ip地址+mac地址+端口号的,但是如果从浏览器上输入www.baidu.com咋办?
这个时候是先把www.baidu.com发送到DNS服务器的,然后DNS服务器会告诉你www.baidu.com对应的ip地址。
DNS就是做这个的。
总结
本篇文章篇幅比较长,如果多看两遍相信小伙伴们会有很大的收获的,那有关OSI七层模型和TCP/IP四层模型的大白话解释到这里就结束了,如果觉得哪里写的有错误,欢迎大佬评论区留言指正。
往期文章推荐: