网络知识点总结

RPC(Remote Procedure Call)
远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解 底层网络技术的协议。比如两个不同的服务A,B部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个 方法该怎么办呢?使用 HTTP请求 当然可以,但是可能会比较慢而且一些优化做的并不好。 RPC 的出现就是为了解 决这个问题。
在这里插入图片描述

  1. 服务消费方(client)以本地调用方式调用服务;
  2. client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
  3. client stub找到服务地址,并将消息发送到服务端;
  4. server stub收到消息后进行解码;
  5. server stub根据解码结果调用本地的服务;
  6. 本地服务执行并将结果返回给server stub;
  7. server stub将返回结果打包成消息并发送至消费方;
  8. client stub接收到消息,并进行解码;
  9. 服务消费方得到终结果。

HTTP和RPC的区别:
RPC(基于HTTP或TCP连接)主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。
HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。

服务端推送
客户端长轮询:客户端起一个定时器,定时向服务端发送HTTP请求查询最新数据,以此实现客户端与服务端的数据保持一致。(好处是实现简单,坏处就是性能损耗过高,而且数据更新也不及时,如果数据没有更新频繁,会做很多无用功。)

WebSocket:是一种在单个TCP连接上进行全双工通讯的协议,其使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。WebSocket使用和 HTTP 相同的 TCP 端口,可以绕过大多数防火墙的限制。默认情况下,WebSocket协议使用80端口;运行在TLS之上时,默认使用443端口。支持服务端推送(实时从服务端推送更新消息给客户端)。但是使用WebSocket服务端与客户端还要关注心跳检测、自动重连等细节。

SocketIO:是一套支持实时、双向、事件驱动的服务端与客户端通信的解决方案,或者说规范。其基于WebSocket协议,天生支持服务端推送。此外,其还封装了连接检测、自动重连等细节,并且支持命名空间与群聊。不仅如此,它还支持基于反向代理来搭建服务器集群(搭建支持服务端推送的集群)。
服务端-java:https://github.com/mrniko/netty-socketio
客户端-java:https://github.com/socketio/socket.io-client-java
服务端maven

<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>1.7.17</version>
</dependency>

服务端SocketIO代码

public class Server {

public static void main(String[] args){
    Configuration config = new Configuration();
    config.setPort(1337);//设置监听端口
final SocketConfig socketConfig = new SocketConfig();
    socketConfig.setReuseAddress(true);//tcp参数
    config.setSocketConfig(socketConfig);
    SocketIOServer server = new SocketIOServer(config);
    server.addConnectListener(new ConnectListener() {
@Override
public void onConnect(SocketIOClient socketIOClient) {
        System.out.println(socketIOClient.getSessionId()+" has connected.");
      }
    });
    server.start();
  }
}

客户端maven

<groupId>io.socket</groupId>
<artifactId>socket.io-client</artifactId>
<version>1.0.0</version>
</dependency>

客户端SocketIO代码

public class Client {
public static void main(String[] args) throws Exception{
final Socket socket = IO.socket(**"http://localhost:1337"**);//ip地址和端口
    socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
        System.out.println("I have connected to server.");
      }
    });
    socket.connect();
  }
}

如果再客户端的ip地址改为WebSocket的地址:ws://localhost:1337,会出现未知异常。
所以客户端建立连接的时候只能先使用HTTP协议,再升级到WebSocket协议进行通信。

通信网络:
通信延迟主要是指:处理延迟和网络传输延迟。处理延迟开销指的就是消息在发送和接收阶段的处理时间。网络传输延迟指的就是消息在发送和接收方的网络传输时延。

高性能网络通信历史发展主要有以下四个方面:高性能网络通信历史发展主要有以下四个方面:TCP Offloading Engine(TOE)、User-Net Networking(U-Net)、Virtual interface Architecture(VIA)、Remote Direct Memroy Access(RDMA)。U-Net是第一个跨过内核网络通信的模式之一。VIA首次提出了标准化user-level的网络通信模式,其次它组合了U-Net接口和远程DMA设备。RDMA就是现代化高性能网络通信技术。

TOE
将数据包处理的工作,从主机处理器的工作转移到网卡上。
User-Net Networking
设计目标是将协议处理部分移动到用户空间去处理。这种方式避免了用户空间将数据移动和复制到内核空间的开销。它的设计宗旨就是移动整个协议栈到用户空间中去,并且从数据通信路径中彻底删除内核。这种设计带来了高性能的提升和高灵活性的提升。
RDMA(远程直接内存访问)
为了解决网络传输中服务器端数据处理的延迟而产生的
Remote:数据通过网络与远程机器间进行数据传输
Direct:没有内核的参与,有关发送传输的所有内容都卸载到网卡上
Memory:在用户空间虚拟内存与RNIC网卡直接进行数据传输不涉及到系统内核,没有额外的数据移动和复制
Access:send、receive、read、write、atomic操作
在这里插入图片描述

UDP比TCP快的原因:
UDP不需要连接,握手,流控,成功确认,偶尔丢包也没有问题,所以UDP开销会小很多
但是UDP有一个用处,因为TCP是点对点的服务,如果需要广播的话,无法使用TCP。
TCP与UDP区别总结:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

传输层,网络层和数据链路层的区别:
链路层:
设备与设备之间如何收发每一个信号,如何校验发送的信号被目标设备正确接收,如果发现接收的信号存在问题如何通知来源设备重新发送。设备与设备之间如何约定信号的格式、长短等等。
网络层:
确定每一组信号由谁发出的,最终要传达到哪个设备,应该经由线路里的那一些设备才能正确的转发过去。
传输层:
传输层提供端到端通信服务层次,提供可靠及非可靠连接

DNS解析过程:
1.查询 浏览器、操作系统 缓存。
2.请求 本地域名服务器
3.本地域名服务器未命中缓存,其请求 根域名服务器。
4.根域名服务器返回所查询域的主域名服务器。(主域名、顶级域名,如com、cn)
5.本地域名服务器请求主域名服务器,获取该域名的 名称服务器(域名注册商的服务器)。
6.本地域名服务器向 名称服务器 请求 域名-IP 映射。
7.缓存解析结果

RestFul的资源粒度
1.服务端:网络效率,表述的多少,客户端的易用程度。
2.客户端:可缓存性,修改频率,可变性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值