TCP/IP模型 与 OSI模型
TCP/IP模型 | 协议 | OSI模型 |
---|---|---|
应用层 | HTTP、FTP、 | 应用层 |
Telnet、NTP、 | 表示层 | |
DHCP、PING | 会话层 | |
传输层 | TCP、UDP | 传输层 |
网络层 | IP、ARP、ICMP、IGMP | 网络层 |
网络接口层 | Ethernet | 数据链路层 |
物理层 |
TCP三次握手
客户端 | 服务端 | |
---|---|---|
SYN(seq=x) > | ||
< SYN-ACK ack=x+1,seq=y | ||
ACK ack=y+1,seq=x+1 > | ||
发送数据 > |
TCP正确性、顺序性和不可重复性。
UDP不能保证报文能否到达目的地,到达目的地的时间是否正确,传输的内容是否正确。
HTTP2的多路复用机制(数据流方式)运行通过单连接同时发起多个请求和响应。将请求和响应划分为帧。
Socket是接口。
IO模型
阻塞与非阻塞(调用方法),同步与异步(针对内核)。
java目前不支持异步IO。
BIO(一连接一线程)
NIO(事件模型的异步通知,buffer、channel、selector),reactor模式。
AIO,异步IO,proactor模式。
文本序列化
JSON,jackson、gson
二进制序列化
java原生序列化,serializable接口,性能低。
kryo,高效java序列化框架。
protobuf,跨平台跨语言的。
远程调用
RMI,性能低、灵活性差
gRPC ,使用http2进行网络通信,并将protobuf作为序列化工具。是面向服务端和移动端。具有双向流、请求压缩、单路复用功能。
各类一体化远程调用框架对比
远程调用框架 | 通信协议 | 序列化协议 | 性能 | 异构语言 | 代码生成 | 服务治理 |
---|---|---|---|---|---|---|
rmi | tcp | 二进制 | 一般 | 不支持 | 不需要 | 无 |
gRPC | http2 | 二进制 | 好 | 支持 | 需要 | 无 |
thrift | tcp | 二进制 | 好 | 支持 | 需要 | 无 |
hession | http1.1 | 二进制 | 差 | 支持 | 不需要 | 无 |
http+restful | http | 文本 | 差 | 支持 | 不需要 | 无 |
dubbo | 可选 | 可选 | 好 | 不支持 | 不需要 | 有 |
参考
《未来架构--从服务化到云原生 - 张亮》
网友评论