这是我参与「第五届青训营 」笔记创作活动的第 8 天 。
一、知识点介绍
本节课重点为网络通信相关问题以及RPC框架的内部原理,并从编码层、传输协议层和网络通信层分析其分层设计
二、详细知识点-网络
1)网络接入-ARP协议
- 逻辑同网段才能发送ARP
- ARP请求广播,ARP应答单播
- 免费ARP:当新增主机或主机新增一个ip时会发送免费ARP告知其他主机
- ARP本质上是查找下一跳的Mac地址
2)网络传输-数据包
3)网络稳定-网络故障排查常用指令
dig查询DNS问题ping/telnet/nmap查询三层/四层连通性Traceroute排查中间链路iptabels客户端防火墙tcpdump
4)DNS
- DNS记录类型
- 常见开源DNS:bind、nsd、knot、coredns
5)加密算法
- 对称加密:一份密钥
- 非对称加密:公钥和私钥
三、远程函数调用RPC - Remote Procedure Calls
1.概念
- RPC需要解决的问题:
- 函数映射
- 数据转换成字节流
- 网络传输
- 一次RPC的完整过程
- 分层设计
2.编解码层
以Thrify的BinaryProtocol二进制编码为例子,使用TLV编码
- Tag:标签,可以理解为类型
- Length:长度
- Value:值,Value也可以是个TLV结构
- 以下为描述在IDL文件的结构体
struct Person {
1: required string userName,
2: optional i64 favouriteNumber,
3: optional list<string> interest
}
3.协议层
1)概念
- 特殊结束符
- 一个特殊字符作为每个协议单元结束的标识,如
message body + "\r\n"
- 一个特殊字符作为每个协议单元结束的标识,如
- 变长协议
- 以定长加不定长的部分组成,其中定长的部分需要描述不定长的内容长度,如
length + message body + length + message body
- 以定长加不定长的部分组成,其中定长的部分需要描述不定长的内容长度,如
2)协议构造
4.网络通信层
- Sockets API
具体的东西等后面有时间学了Kitex再来补充
一个乱入------