网络理论,程序通信过程

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

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm