大白话聊OSI七层模型和TCP/IP四层模型
前言
今天和大家聊的是一个比较基础的问题,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四层模型的大白话解释到这里就结束了,如果觉得哪里写的有错误,欢迎大佬评论区留言指正。
往期文章推荐:
大白话聊OSI七层模型和TCP/IP四层模型的更多相关文章
- 网络知识学习1---(基础知识:ISO/OSI七层模型和TCP/IP四层模型)
以下的内容和之后的几篇博客只是比较初级的介绍,想要深入学习的话建议自己钻研<TCP/IP详解 卷1:协议> 1.ISO/OSI七层模型 下四层是为数据传输服务的,物理层是真正的传输数 ...
- 计算机网络漫谈之OSI七层模型和TCP/IP四层模型
在 什么是网络? 中,你已经知道计算机网络是物理连接的"局域网"和工作于这个局域网上的"网络协议",并且我们的重心是网络协议.有关网络协议,按照目前的分层方式主 ...
- OSI七层模型和tcp/ip四层模型对比
OSI 与TCP/IP 模型对比 OSI 协议层名称 TCP/IP 协议层名称 封装的单元 功能描述 TCP/IP协议 应用层(Application) 应用层(Application) 数据 应用程 ...
- OSI 七层模型和 TCP/IP 四层模型 及 相关网络协议
简介 OSI 是理论上的模型,也就是一个统一的国际标准,现在的很多网络设备或者是网络协议都不同程度的精简了自己的所谓的模型,那么他们为了自己的通讯兼容都会参考这个OSI模型 TCP/IP 包括: TC ...
- [TCP/IP]OSI七层模型和TCP/IP四层模型
OSI參考模型 在過去的電腦網路上,由於資料通訊系統涉及複雜的軟硬體,可是又沒有統一的標準,導致通訊軟體不僅龐大複雜,而且不易測式.修改或分享.為此,ISO(國際標準組織)發展出一套OSI參考模型(O ...
- OSI七层模型和TCP/IP四层模型
1)网络层负责点到点的传输(这里的“点”指主机或路由器),而传输层负责端到端的传输(这里的“端”指应用进程) 2)ARP协议介于数据链路层和网络层之间(IPv4专有,IPv6的地址映射功能在ICMPv ...
- 简述osi七层模型和TCP/IP五层模型
OSI七层模型 OSI七层模型的划分 应用层(Application).表示层(presentation).会话层(session).传输层(Transport).网络层(Network).数据链路层 ...
- OSI七层模型和TCP/IP五层模型详解
OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范.OSI模型有7层结构,每层都可以有几个子层. OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 ...
- OSI七层网络模型与TCP/IP四层模型介绍
目录 OSI七层网络模型与TCP/IP四层模型介绍 1.OSI七层网络模型介绍 2.TCP/IP四层网络模型介绍 3.各层对应的协议 4.OSI七层和TCP/IP四层的区别 5.交换机工作在OSI的哪 ...
随机推荐
- Linux实战(3):升级最新内核
# 先查看一下当前内核版本 uname -r # 升级内核 rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch. ...
- kolla部署openstack多节点高可用并对接ceph后端存储(17)
部署节点执行: 安装基础包和docker yum install python-devel libffi-devel gcc openssl-devel git python-pip -y 升级一下 ...
- 容器云平台No.2~kubeadm创建高可用集群v1.19.1
通过kubernetes构建容器云平台第二篇,最近刚好官方发布了V1.19.0,本文就以最新版来介绍通过kubeadm安装高可用的kubernetes集群. 市面上安装k8s的工具很多,但是用于学习的 ...
- 2.2 spring5源码 -- ioc加载的整体流程
之前我们知道了spring ioc的加载过程, 具体如下图. 下面我们就来对照下图, 看看ioc加载的源代码. 下面在用装修类比, 看看个个组件都是怎么工作的. 接下来是源码分析的整体结构图. 对照上 ...
- Processing 高效控制管理图形方法(一)
之前在CSDN上发表过: https://blog.csdn.net/fddxsyf123/article/details/62456299
- python_购物车
流程图 实现方式 #!/usr/bin/python3 __author__ = 'beimenchuixue' __blog__ = 'http://www.cnblogs.com/2bjiuji ...
- python3的基础数据类型
看了很多文档,想自己整理一下关于python的数据类型.说干就干,下面接上. 首先,了解 常量与变量. 常量是什么?常量是指在整个程序操作过程中其值保持不变的数据: 变量是什么?变量即在程序运行过程中 ...
- linux内核 idr机制
idr机制解决了什么问题?为什么需要idr机制(或者说,idr机制这种解决方案,相对已有的其他方案,有什么优势所在) ? idr在linux内核中指的就是整数ID管理机制,从本质上来说,这就是一种将整 ...
- 晚间测试3 B. 单(single)
题目描述 单车联通大街小巷.这就是出题人没有写题目背景的原因. 对于一棵树,认为每条边长度为 \(1\),每个点有一个权值\(a[i]\).\(dis(u,v)\)为点\(u\)到\(v\)的最短路径 ...
- c++ 在window下创建窗口的基本步骤
1. WinMain 函数的定义: 2. 创建一个窗口 2.1 设计一个窗口类 WNDCLASS 2.2 注册窗口类 2.3 创建窗口 2.4 显示及更新窗口 3. 进行消息循环 BOOL GetMe ...