常见网络知识

http粘包:

在基于TCP协议中,特别是HTTP/1.1之前版本。

tcp是面向连接,可靠,基于字节流的,字节流可以理解为双向通道里流淌的数据,就是我们常说的二进制数据,就是一大堆01串

这些01串是没有任何边界的,所以我们不知道到哪个地方算一条完整的消息。

所以我们使用TCP发送夏洛特烦恼,接收端没法区分。这就是粘包问题。

解决办法:把每条要发送的消息都包装一下,比如加上消息头。

消息头里写清楚一个完整的边界是多少。根据这个长度截取完整的数据。截取出来的就是我们想发送的消息体。

协议:

消息头还可以放各种其他的信息,比如消息体是否被压缩,消息体格式。只要发送方和接收方都认就好了,这就是协议!

而每一个使用tcp的项目,都可能定义一个这样的协议,所以就衍生了http协议,RPC协议。

直接使用TCP会有粘包问题,HTTP协议是九十年代才出来的,所以70到90年代出现过很多自定义的协议

为什么有HTTP协议还要RPC协议?

1.服务发现(找到服务对应的IP地址和端口):

HTTP:知道服务的域名,就可以通过DNS服务去解析服务的IP地址,端口默认80端口。

RPC:一般会有专门的服务去保存服务名和IP信息。consul或者etcd甚至redis。想要获得服务就去这些中间服务去获得IP地址和端口号。

2.传输的内容:

HTTP:就是消息头消息体组成的二进制01串,所以TCP传字符串和数字都问题不大,因为字符串可以转成编码再转成01串,数字也可以传成01串。但结构体怎么转成01串呢?目前的方法是序列化(将结构体转成二进制数组)。HTTP1.1使用JSON

RPC:RPC使用protobuf,体积更小,同时不需要考虑浏览器行为,比如302,定向跳转之类的。所以速度也更快。体积和速度优化3-5倍。

如今HTTP到了2版本,性能可能比RPC好很多,甚至gRPC底层也用HTTP/2。但由于HTTP2是2015出来的,那时候大公司基本都用了RPC了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值