网络理论,程序通信过程

2024-01-11 17:40

本文主要是介绍网络理论,程序通信过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

作为软件工程师,如果要实现机器间通信,对我们来只是获取到socket就可以了,但是我们不能只看表面,应该尽量多问下自己,为什么是这样?这是我的领导炬哥教我,因为工作了3年,如果还停留在根据产品原型进行CRUD。那么很多人在3-5年就没有太多的突破,而工作了3-5年,很多人都会遇到技术瓶颈,至于怎么突破,只能靠自己。平时多问自己几个为什么,靠自己去查找资料去学习。做为一个搞技术,不应该局限于语言,java,python这些对你来说只是实现的工具,也不应该局限于岗位,什么前端,后端,大数据,运维等,对于搞技术的人来说都应该要会。当然,我们是要有比较擅长的一项,这样以后我们才有强大的基础,让我们在技术这条道路上越走越远。
回到正题,要学习网络,最好的方式是去系统学习思科的CCNA到CCIE的课程体系,但是对我们软件开发来说,我觉得把CCNA学完基本就可以应付大部分网络问题了,听我以前考到CCIE的同学讲,平时工作,他们CCNA的水平基本就够用了。那么更何况我们呢!

一、OSI七层模型

下面这张图是OSI七层模型
在这里插入图片描述

1.下面我们讲下为什么会出现OSI七层模型?

ISO组织为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。
这里的OSI七层模型只是个概念,相当于咱们JAVA中的接口,他只是个定义。

2.为什么要分层

理由很简单,这跟咱们java后台为什么也要分controller service dao分层的道理一样。好处就是解耦,每层把自己的事情做好,提供接口给其他层调用就好,出现问题,我们好定位问题。

3.每一层的概念含义

<1> 应用层
OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。
实际公司A的老板就是我们所述的用户,而他要发送的商业报价单,就是应用层提供的一种网络服务,当然,老板也可以选择其他服务,比如说,发一份商业合同,发一份询价单,等等。
<2> 表示层
表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。
由于公司A和公司B是不同国家的公司,他们之间的商定统一用英语作为交流的语言,所以此时表示层(公司的文秘),就是将应用层的传递信息转翻译成英语。同时为了防止别的公司看到,公司A的人也会对这份报价单做一些加密的处理。这就是表示的作用,将应用层的数据转换翻译等。

<3> 会话层
会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
会话层的同事拿到表示层的同事转换后资料,(会话层的同事类似公司的外联部),会话层的同事那里可能会掌握本公司与其他好多公司的联系方式,这里公司就是实际传递过程中的实体。他们要管理本公司与外界好多公司的联系会话。当接收到表示层的数据后,会话层将会建立并记录本次会话,他首先要找到公司B的地址信息,然后将整份资料放进信封,并写上地址和联系方式。准备将资料寄出。等到确定公司B接收到此份报价单后,此次会话就算结束了,外联部的同事就会终止此次会话。

<4> 传输层
传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCP UDP就是在这一层。端口号既是这里的“端”。
传输层就相当于公司中的负责快递邮件收发的人,公司自己的投递员,他们负责将上一层的要寄出的资料投递到快递公司或邮局。

<5> 网络层
本层通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。就是通常说的IP层。这一层就是我们经常说的IP协议层。IP协议是Internet的基础。
网络层就相当于快递公司庞大的快递网络,全国不同的集散中心,比如说,从深圳发往北京的顺丰快递(陆运为例啊,空运好像直接就飞到北京了),首先要到顺丰的深圳集散中心,从深圳集散中心再送到武汉集散中心,从武汉集散中心再寄到北京顺义集散中心。这个每个集散中心,就相当于网络中的一个IP节点。

<6> 数据链路层
将比特组合成字节,再将字节组合成帧,使用链路层地址 (以太网使用MAC地址)来访问介质,并进行差错检测。

<7> 物理层
实际最终信号的传输是通过物理层实现的。通过物理介质传输比特流。规定了电平、速度和电缆针脚。常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。
快递寄送过程中的交通工具,就相当于我们的物理层,例如汽车,火车,飞机,船。

二、TCP/IP五层模型

下面是OSI七层模型和TCP/IP五层模型对照图
在这里插入图片描述

这里会有几个问题

1.为什么TCP/IP不按照OSI七层进行划分

有一句话叫做理想很丰满,现实很骨感。TCP/IP五层模型经过市场检验得出最适合市场使用的。也就是说,虽然OSI七层模型虽然很完美,但是对于市场使用来说,成本较高。

2.TCP/IP五层模型和OSI模型减少了哪些层

由上图可知,TCP/IP模型将应用层,表示层,会话层归纳为应用层。

三、举例两个机器间通信数据包传输的过程

假设我们自己研发了一款类似QQ的软件,假设两个安装了QQ软件的机器A,B在同个局域网内。
比如用户甲在A机器的QQ上输入“hello”给机器B的乙用户,并且按下回车
这个时候按照OSI七层模型来分析
我们甲看到的QQ界面就是应用层
按下回车后,表示层会把"hello"进行编码,并且加密
然后表示层把数据交给会话层,会话层会记录下,当前需要进行会话的信息
然后会话层会把信息交给传输层,这里我们举例TCP可靠传输,这个时候传输层会与机器B进行TCP三次握手。
TCP三次握手建立连接后,后面传输层将数据丢给网络层**,网络层**经过路由找到机器B的下一跳地址。

网络层将数据交给了数据链路层,然后链路层通过ARP协议获取到机器B的MAC地址,然后将数据传输到机器B上。

机器B收到信息后,在QQ界面给用户乙显示出来,这个时候,如果乙也要回消息,则这个过程和上面一致,只是TCP如果没有进行四次分手,则机器B就不需要在传输层再进行一次三次握手的过程。

总结

这些都是简单的理论基础。如果需要详细学习,需要系统学习下CCNA的知识

这篇关于网络理论,程序通信过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/595176

相关文章

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优