| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 初识网络基础《网络七层模型详解》 -> 正文阅读 |
|
[网络协议]初识网络基础《网络七层模型详解》 |
坚持原创输出,点击蓝字关注我吧目录
一、初识网络基础其实网络刚刚开始发展的时候,它并没有这么一个复杂的模型,它最开始只有一层。随着网络的发展,网络上的功能越来越复杂,单一的网络结构就不能再满足人们的需求了。 所以呢,人们就开始对网络进行分层。让每一层都执行工作,各司其职,来实现网络上复杂的工作流程。 发展下来就出现了2个非常重要的模型:OSI七层模型、TCP/IP四层协议栈。这两个模型所定义出来的层级,工作都差不太多。 「OSI七层模型:」 是ISO组织在1985年研究的网络互联模型。 「目的:」 刚开始提出来只是为了实现2台机器的互联,怎么实现互联? 提出了一个统一的规范,两台机器使用统一的一个规范标准进行通信。可以把范围扩大,可以实现很多台机器的「互联」。 形成了互联网最早的形态。「互联网」的形态其实就是这个时候提出来的。所有的网络活动基本上都在这七层中间来实现的。 在浏览器里输入百度的网址,按下回车就返回了百度的页面,这个过程就基本都可以在OSI七层模型中找到每一层的实现历程。 为了详细知道,输入百度网址返回一个页面,这个过程具体怎么实现的,就需要详细了解下这七层分别做什么样的工作。 二、网络七层模型详解1.物理层1.1实现两台机器互联,机器和机器之间如何通信?最开始的需求是把两台机器联接起来,让它们通信。物理层就根据这个需求运用而生。
它提供了肉眼可见的物理介质,比如网线(双胶线)、光纤、无线电波,这些都可以实现机器之间的基本连接。 1.2机器间的通信是以什么样的形式存在呢?像这样的一个信息在物理介质里面其实就是一个计算机语言,比如说:0101二进制的一个形式存在。 在专业名词里这个二进制也叫做电信号(比特流)。物理层的出现能够让两台电脑通过物理介质发送比特流了。 比特流还是0101这样一个机器的语言,这种0101的比特流其实是一个没有什么意义的一个数据。怎么让它变成一个有意义的数据呢? 2.数据链路层针对这个需求,就产生了数据链路层。对无意义的比特流进行分组,这些0101的二进制的电信号,对这些二进制以8个为一组。8位一组形成了一个字节,这样的一个数据被它进行分组之后,然后根据这个分组,依次按顺序发送数据。 2.1这样的数据就会变成一个有特殊意义,上面层级能够认识的数据,这就是数据链路层实现的第一个需求。虽然数据变成机器间可以认识的一个有意义的数据,但是机器收到这个数据怎么知道这个数据是发给我的呢? 2.2怎么确认这个数据是发给我的呢?网络中是怎么去定义这个事情?数据链路层定义了mac地址。机器都有一个网卡,(电脑-以太网-适配器-详细信息,可以看到无线网卡的物理地址,其实就是每一块网卡的独有的地址,理解成这个网卡的身份证)。mac地址是唯一的,mac地址就是标识这台机器的物理地址,现在如果电脑a发给电脑b一个信息,需要带上mac地址。 就像寄信,寄信的时候需要写寄件人的地址和收件人的地址。 对应物理网卡,物理网卡其实也有个原mac地址,把自己mac地址带上,也会带上收件人的地址(目的地址),就知道我要发给谁并告诉对方是谁发的,方便对方给我回信。 那它就知道应该向谁去回复。这个就是通过mac地址解决的。 2.3数据链路层的数据格式:帧。通过数据链路层,计算机之间可以正常传数据包,但是现在有2个主机,一个主机a,主机f,两台主机间通信,但是中间隔着bcde主机,它们两个不是直接连接的机器,它们两个怎么实现直接通信呢? 如果两个主机离得特别远,中间可以实现通信的路径有很多条,怎么选择最近的路径通信呢? 数据链路层通过mac地址识别对方主机和自身的主机,怎么知道对方的mac地址? 3.网络层3.1第一个解决怎么知道对方的mac地址?定义了一个协议: 3.2第二个需求:主机a和主机f之间隔着很多别的主机,两个主机可能不在一个子网里面,就没办法直接通信。去判断它们两个是否在一个子网,怎么判断?定义了一个协议: 3.3路径很多,怎么选择最优的路径?网络层同样定义了一组协议,就是 一组路由协议:静态路由协议,动态路由协议(rip,ospf,bgp协议)。这些都是常用的动态路由协议。 这三个需求都是网络层给大家解决的问题。网络层是最关键的一层,实现的功能特别多。 数据包在网络里可以正常发送了,如果发送的数据特别的多或者单个数据包特别大,在网络中传输需要很长的时间,中间的网络中断了,怎么才能保证重传? 如果重传,怎么确定数据包完整且正确? 4.传输层实现的第一个功能,对发送的数据进行一个封装。 通过 这样封装能够保证数据包是完整且准确的。还有一个功能,就是两台主机,都是用两个应用进行通信(例如两个人qq聊天)。 所以,怎么判断我的电脑上的qq发送给你的,你就是用qq回应的呢? 我的电脑上不止一个应用程序,那我怎么判断你是用qq接收数据而不是用别的呢? 也是通过传输层实现,定义了端口的概念,实现应用程序的寻找。 当数据包到达传输层后,会有一个端口,然后呢,我们的应用程序通过端口寻找到对应的程序,就去发给对应程序进行数据处理。 5.会话层如果数据特别大,中断需要重传,是不是不应该重头开始传,应该断点续传,就由会话层实现的。 会话层:
6.表示层计算机有很多的操作系统: 各种系统间的语法不一样的。不同系统间进行通信的话,这个就是表示层的工作了。 其实就是一个 表示层和会话层没有定义协议的功能,所以没有定义协议。 7.应用层有了6个层级的工作,都是为了应用层服务的。 用户在浏览器访问百度界面,属于应用层的操作。 数据已经从一个主机上的应用传到另一个主机上的应用了,这样一个基本的功能是可以实现的。 但是数据包从底层传上来,只有物理层的时候进行了一个组装,在数据链路层形成了一个字节流。 上面层级并没有重新进行一个数据的组装,到了上面依然是一个字节流的格式,不好被应用识别和操作。 所以应用层通过定义了各种应用协议来规范一个数据的格式。 比如最熟悉的 以上就是七层模型的工作流程。 三、总结掌握网络基础知识是为了应对面试、进入公司遇到搭建测试环境或调试测试环境的时候需要用到网络基础知识。这是测试工程师需要掌握的必备技能。 公众号「清菡软件测试」首发,更多原创文章:清菡软件测试148+原创文章,欢迎关注、交流,禁止第三方擅自转载。如有转载,请标明出处。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 7:23:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |