网络编程基础

发布时间 2023-05-24 23:18:07作者: 彷佛昨天

OSI七层模型

应用层:Http协议、电子文件传输、文件服务器等

表示层:解决我们不同系统之间语法的通讯

会话层:建立与应用程序之间的通讯

传输层:提供了端口号和接口协议TPC/UDP

网络层:为数据包选择路由 路由器、交换机

定义了ip地址,可以根据ip地址找到对应的服务器

数据链路层:传输有地址的帧以及错误检测功能

物理层:以二进制形式,在物理机器上实现传输

TCPUDP协议

Socket

Socket(套接字)是两个程序之间通过双向信道进行数据交换的端,可以理解为接口。使用Socket编程也称为网络编程,Socket只是接口并不是网络通信协议。

TCPUDP区别

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议

TCP协议应用场景:HTTP、HTTPS、FTP协议

UDP是面向无连接通讯协议,udp通讯时不需要接受方确定,属于不可靠传输,可能会存在丢包的现象。

UDP协议应用场景:QQ语音、QQ视频

连接与短连接区别

短连接:每次请求完了之后都会关闭连接,如果频繁发送请求的情况下效率是非常低。

长连接:每次发送完请求之后,该请求不会立马断开,实现复用类似于线程池

Http协议1.0: 规定客户端与浏览器保持短暂的连接,服务器完成数据传输数据之后就会立马关闭连接,如果频繁的向服务器端发送请求的话,这时候是非常消耗服务器资源。

Http协议1.1: Http协议从1.1开始就支持长连接,会根据特定时间保持当前连接状态,不会立马关闭掉tcp连接; 

Http协议建立长连接之后,默认情况下300s为空闲状态情况下会主动断开连接;

BIONIOAIO 模型

1BIO(Blocking I O) 同步阻塞模型,一个线程对应一个客户端连接。

应用场景:

BIO 方式适用于连接数目比较小且固定的架构, 这种方式对服务器资源要求比较高, 但程序简单易理解。

 2NIO(Non Blockin g IO) 同步非阻塞,

服务器实现模式为一个线程可以处理多个请求(连接),客户端发送的连接请求都会注册到 多路复用器selector上,多路复用

器轮询到连接有IO请求就进行处理。

应用场景:

NIO方式适用于连接数目多且连接比较短(轻操作) 的架构, 比如聊天服务器, 弹幕系统, 服务器间通讯,编程比较复杂, JDK1.4 开始支持

 3AIO(NIO 2.0) 异步非阻塞,

由操作系统完成后回调通知服务端程序启动线程去处理, 一般适用于连接数较多且连接时间较长的应用。是在NIO的基础上进一步封装的。

应用场景:

AIO方式适用于连接数目多且连接比较长(重操作) 的架构,JDK7 开始支持

 

同步和异步的区别

 

同步也就是程序从上往下实现执行; 单线程

异步从新开启一个新分支,相互不会影响;多线程

站在Http协议上分析同步与异步区别:

我们的Http协议请求默认情况下同步形式调用,如果调用过程非常耗时的情况下 客户端等待时间就非常长 这种形式我们可以理解阻塞式;

解决办法:耗时的代码我们可以使用多线程或者MQ实现处理,但是不能立马获取结果 客户端可以主动查询