OSI七层模型
应用层:ttp协议、电子文件传输、文件服务器等
表示层:解决我们不同系统之间语法的通讯
会话层:建立与应用程序之间的通讯
传输层:提供了端口号和接口协议TPC/UDP
网络层:为数据包选择路由器、交换机
定义了ip地址,可以根据ip地址找到对应的服务器
数据链路层:传输有地址的帧以及错误检测功能
物理层:以二进制形式,在物理机器上实现传输
TCP与UDP协议
SocketSocket(套接字)是两个程序之间通过双向信道进行数据交换的端,可以理解为接口。使用Socket编程也称为网络编程,Socket只是接口并不是网络通信协议。
TCP与UDP区别TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议
TCP协议应用场景:HTTP、HTTPS、FTP协议
UDP是面向无连接通讯协议,udp通讯时不需要接受方确定,属于不可靠传输,可能会存在丢包的现象。
UDP协议应用场景:QQ语音、QQ视频
长连接与短连接区别
短连接:每次请求完了之后都会关闭连接,如果频繁发送请求的情况下效率是非常低。
长连接:每次发送完请求之后,该请求不会立马断开,实现复用类似于线程池
Http协议1.0: 规定客户端与浏览器保持短暂的连接,服务器完成数据传输数据之后就会立马关闭连接,如果频繁的向服务器端发送请求的话,这时候是非常消耗服务器资源。
Http协议1.1: Http协议从1.1开始就支持长连接,会根据特定时间保持当前连接状态,不会立马关闭掉tcp连接;
Http协议建立长连接之后,默认情况下在300s为空闲状态情况下会主动断开连接;
BIO,NIO,AIO 模型
1、BIO(Blocking I O) 同步阻塞模型,一个线程对应一个客户端连接。
应用场景:
BIO 方式适用于连接数目比较小且固定的架构, 这种方式对服务器资源要求比较高, 但程序简单易理解。
2、NIO(Non Blockin g IO) 同步非阻塞,
服务器实现模式为一个线程可以处理多个请求(连接),客户端发送的连接请求都会注册到 多路复用器selector上,多路复用
器轮询到连接有IO请求就进行处理。
应用场景:
NIO方式适用于连接数目多且连接比较短(轻操作) 的架构, 比如聊天服务器, 弹幕系统, 服务器间通讯,编程比较复杂, JDK1.4 开始支持
3、AIO(NIO 2.0) 异步非阻塞,
由操作系统完成后回调通知服务端程序启动线程去处理, 一般适用于连接数较多且连接时间较长的应用。是在NIO的基础上进一步封装的。
应用场景:
AIO方式适用于连接数目多且连接比较长(重操作) 的架构,JDK7 开始支持
同步和异步的区别
同步也就是程序从上往下实现执行; 单线程
异步从新开启一个新分支,相互不会影响;多线程
站在Http协议上分析同步与异步区别:
我们的Http协议请求默认情况下同步形式调用,如果调用过程非常耗时的情况下客服端等待时间就非常长这种形式我们可以理解阻塞式;
解决办法:耗时的代码我们可以使用多线程或者MQ实现处理,但是不能立马获取结果客服端可以主动查询
同步与异步描述的是被调用者的。
譬如A调用B。
如果是同步,B在接到A的调用后,会立即执行要做的事。A的本次调用可以得到结果。
如果是异步,B在接到A的调用后,不保证会立即执行要做的事,但是保证会去做,B在做好了之后会通知A。A的本次调用得不到结果,但是B执行完会通知A。
阻塞与非阻塞描述的是调用者的。
如果是阻塞,A在发出调用后,要-直等待,等着B返回结果。
如果是非阻塞, A在发出调用后,不需要等待,可以去做自己的事情。
同步不-定阻塞,异步也不一定非阻塞。没有必然关系。
举个简单的例子,老张烧水:
1.老张把水壶放到火上, - -直在水壶旁等着水开。(同步阻塞 )
2.老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞 )
3.张把响水壶放到火上,- 直在水壶旁等着水开。(异步阻塞)
4.老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞 )
1和2的区别是,调用方在得到返回之前所做的事情不一样。
1和3的区别是,被调用方对于烧水的处理不-样。
标签:异步,调用,协议,编程,基础,阻塞,网络,同步,连接 From: https://www.cnblogs.com/lsnotbug/p/17429839.html