什么是远程通信?
远程通信,在java中主要是基于socket进行通过网络对信息进行传输。
java中怎么进行通信?
java中通信方式,基于BIO -阻塞IO ,NIO-非阻塞IO , AIO -
网络七层模型(TCP/IP)
物理层,数据链路层、网络层,数据传输层,会话,表示, 应用。
1,通过TCP头+数据报文
2,拼接对应的要发送给的ip地址+1
3, MAC头+2
4,通过高低点位对数据进行编码传输
5,接收到数据进行解包,找到MAC对应的机器
6,进行ip解析,如果不是当前ip进行数据转发
7,应用数据(TCP头+数据报文)
网络通信为什么要进行三次握手?
在网络中进行数据传输,为了保证数据传输的完整性,1)由客户端向服务端发起请求用来确认是否可以连接,2)服务端接收到客户端的消息,发送ack通知客户端已经接收到消息,3)客户端发起ack通知服务端已经接收到回执消息。
什么是BIO、NIO、AIO?
BIO 阻塞IO ,一个线程只能处理一个请求,可以使用线程池进行优化,但是并发量过高时不宜使用。会导致大量资源阻塞等待,导致用户体验性差。
NIO 非阻塞性IO ,默认为阻塞IO 可以调用xxxConfig(false),设置为非阻塞IO,
什么是NIO的多路复用?使用什么机制实现的?
NIO 主要是通过对连接注册到Selector中进行监控,当有消息直接调用消息进行处理,可以实现select()方法进行阻塞。
类似于多个鱼竿调用,当哪个鱼竿动了可以去处理相应的鱼竿。
什么是零拷贝?
在客户端用户空间和内核空间的抽象模型,客户端不会直接向服务端发送消息,而是通过将消息缓冲到内核缓冲区,然后内核空间通过网卡传输消息,(服务端接收消息同理),当客户端对本地的文件上传到服务端时,加载到用户空间的缓冲区,然后转换到客户端的内核空间缓冲区,再发送给服务端。零拷贝对消息不需要进行内存空间的缓冲加载,直接通过内核缓冲空间对数据进行发送处理。