前言

今天和大家聊的是一个比较基础的问题,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四层模型的大白话解释到这里就结束了,如果觉得哪里写的有错误,欢迎大佬评论区留言指正。

往期文章推荐:

Windows下使用Nginx+Tomcat做负载均衡

聊聊分布式下的WebSocket解决方案

从SpringBoot源码看资源映射原理

大白话聊OSI七层模型和TCP/IP四层模型的更多相关文章

  1. 网络知识学习1---(基础知识:ISO/OSI七层模型和TCP/IP四层模型)

    以下的内容和之后的几篇博客只是比较初级的介绍,想要深入学习的话建议自己钻研<TCP/IP详解 卷1:协议> 1.ISO/OSI七层模型    下四层是为数据传输服务的,物理层是真正的传输数 ...

  2. 计算机网络漫谈之OSI七层模型和TCP/IP四层模型

    在 什么是网络? 中,你已经知道计算机网络是物理连接的"局域网"和工作于这个局域网上的"网络协议",并且我们的重心是网络协议.有关网络协议,按照目前的分层方式主 ...

  3. OSI七层模型和tcp/ip四层模型对比

    OSI 与TCP/IP 模型对比 OSI 协议层名称 TCP/IP 协议层名称 封装的单元 功能描述 TCP/IP协议 应用层(Application) 应用层(Application) 数据 应用程 ...

  4. OSI 七层模型和 TCP/IP 四层模型 及 相关网络协议

    简介 OSI 是理论上的模型,也就是一个统一的国际标准,现在的很多网络设备或者是网络协议都不同程度的精简了自己的所谓的模型,那么他们为了自己的通讯兼容都会参考这个OSI模型 TCP/IP 包括: TC ...

  5. [TCP/IP]OSI七层模型和TCP/IP四层模型

    OSI參考模型 在過去的電腦網路上,由於資料通訊系統涉及複雜的軟硬體,可是又沒有統一的標準,導致通訊軟體不僅龐大複雜,而且不易測式.修改或分享.為此,ISO(國際標準組織)發展出一套OSI參考模型(O ...

  6. OSI七层模型和TCP/IP四层模型

    1)网络层负责点到点的传输(这里的“点”指主机或路由器),而传输层负责端到端的传输(这里的“端”指应用进程) 2)ARP协议介于数据链路层和网络层之间(IPv4专有,IPv6的地址映射功能在ICMPv ...

  7. 简述osi七层模型和TCP/IP五层模型

    OSI七层模型 OSI七层模型的划分 应用层(Application).表示层(presentation).会话层(session).传输层(Transport).网络层(Network).数据链路层 ...

  8. OSI七层模型和TCP/IP五层模型详解

    OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范.OSI模型有7层结构,每层都可以有几个子层. OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 ...

  9. OSI七层网络模型与TCP/IP四层模型介绍

    目录 OSI七层网络模型与TCP/IP四层模型介绍 1.OSI七层网络模型介绍 2.TCP/IP四层网络模型介绍 3.各层对应的协议 4.OSI七层和TCP/IP四层的区别 5.交换机工作在OSI的哪 ...

随机推荐

  1. 移动web开发之rem适配布局

    移动web开发之rem适配布局 方案: 页面布局文字能否随着屏幕大小变化而变化 流式布局和flex布局主要针对于宽度布局,那高度如何布局? 怎样让屏幕发生变化的时候元素高度和宽度等比例缩放? 1. r ...

  2. [记录点滴]授人以渔,从Tensorflow找不到dll扩展到如何排查问题

    [记录点滴]授人以渔,从Tensorflow找不到dll扩展到如何排查问题 目录 [记录点滴]授人以渔,从Tensorflow找不到dll扩展到如何排查问题 0x00 摘要 0x01 引言 0x02 ...

  3. Docker之使用Dockerfile创建定制化镜像(四)

    Dockerfile简介 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么哪些无法重复的问题.镜像构建 ...

  4. JVM学习(二)JVM加载类

    一.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...

  5. Android开发中导入第三方库所遇问题记录

    1.重复循环依赖的问题 (1)需求 如下图所示: 在Android 项目中,采用模块化开发,一个是主跑application--Mudule A,另外一个是library--Library B 1)M ...

  6. Linux常用字段

    cd 切换路径 vim,vi 打开文档 ls  查看文件信息 chmod 修改文件或目录的权限 useradd 添加用户 cat 查看纯文本文件(少内容) rm 删除文件或目录 mv 剪切文件或文件重 ...

  7. MySQL中的临时表到底什么是?

    Author:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,原创文章, B站技术分享 B站视频 : Bilibili.c ...

  8. 【性能监控-Perfmon工具】Perfmon工具使用教程

    一.Perfmon工具简介 Perfmon是一款Windows自带的性能监控工具,提供了图表化的系统性能实时监视器.性能日志和警报管理.通过添加性能计数器可以实现对CPU.内存.网络.磁盘.进程等多类 ...

  9. Python正则表达式 re.sub()函数:标志位flags与参数个数问题

    这两天在写爬虫程序,涉及英文文本处理,需要规范化英文标点符号的写法.正常情况下,英文句号「.」后面需要保证有且只有一个空格,但也有例外情况,比如「i.e.」.「e.g.」.「P.S.」这种.由于无法预 ...

  10. 开始在Windows上开发Android

    介绍 鉴于您正在阅读这篇文章,您很可能已经知道android是什么了.可能.在科幻小说和电影中,机器人本质上是具有拟人化特征的机器人.还记得<星球大战>里的C-3PO吗?那<星际迷航 ...