tcp、http和rpc
- tcp是传输层协议,http和rpc是应用层协议。
- http和rpc的底层都是tcp。
- tcp三大特点:面向连接、可靠、基于字节流。
- 纯tcp发送的消息是基于字节流,无边界的,接收方不知道哪些字节是一条完整的消息。所以,tcp不能直接使用。可以制定一些规则(消息格式)用于区分消息边界,根据规则把每条发送的数据都包装一下。根据这些规则的不同,衍生出各种协议,例如http和rpc。
- 既然tcp无边界,那直接将一个消息设置为一个数据包发送不行吗?不行。为了提高数据包传输效率,网络设备会将数据包进行合并和拆分,也就是粘包和拆包。粘包是将多个小数据包合并成一个,拆包是将一个大数据包拆分成多个。例如,在路由器中使用MTU定义一个数据包的大小。
- 区别消息边界的规则有3种:
- 定长消息,消息的长度固定
- 特殊分隔符分割消息
- TLV:在消息头部存储消息长度
- 服务发现:要获取某个服务,首先需要知道该服务的ip地址和端口。在http中,知道服务的域名,就可以使用dns解析域名得到ip和端口,所以dns是服务发现的一种。在rpc中,一般有专门的中间服务保存服务名和ip,例如etcd。
参考视频:
https://www.bilibili.com/video/BV1Qv4y127B4
https://www.bilibili.com/video/BV1jh4y1D7Gh