什么是远程通信?

远程通信,在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()方法进行阻塞。

类似于多个鱼竿调用,当哪个鱼竿动了可以去处理相应的鱼竿。

什么是零拷贝?

在客户端用户空间和内核空间的抽象模型,客户端不会直接向服务端发送消息,而是通过将消息缓冲到内核缓冲区,然后内核空间通过网卡传输消息,(服务端接收消息同理),当客户端对本地的文件上传到服务端时,加载到用户空间的缓冲区,然后转换到客户端的内核空间缓冲区,再发送给服务端。零拷贝对消息不需要进行内存空间的缓冲加载,直接通过内核缓冲空间对数据进行发送处理。