极客时间专栏——趣谈网络协议的阅读笔记
目录:
00
01
讲述了一个访问电商网站都用了什么协议
02
网络分层
在三层实质是换了MAC地址
03
ip
CRID
网卡标识
MAC用于子网,IP用于互连
04
DHCP 通过广播UDP包方式从DHCP服务器获取IP信息,然后返回IP信息依然是UDP广播,然后向DHCP服务器发送使用这个IP,由DHCP服务器返回租约信息,在租约的一半时间确定是或否续租;对于多个DHCP发来信息则会选择第一个,拒绝其他的DHCP服务
PEX BIOS将PXE的Client调入内存,像DHCP服务器获取启动文件,并执行,然后获取内核和pxelinux的配置文件,并读取配置,获取内核和inittramfs实现启动操作系统,然后将引导改变到磁盘就可以了
05
物理层
MAC层
06
交换机 对广播进行抑制,防止过量的广播产生
STP协议 将图结构转化为树结构
VLAN 用于虚拟隔离,通过VLAN ID实现,广播只在相同VLANID的网口进行,两个交换机之间是通过Trunk实现
07
icmp协议包括查询报文和差错报文,因为封装了IP地址,所以是三层协议
ping是通过查询报文
traceroute是通过返回差错报文来获取差错报文的内容,包括ttl,mtu等
08
静态路由
- 转发网关 不会改变IP地址,只是改变mac地址,每次源mac和目的mac都会边
- NAT网关 源地址也会发生变化,维护通过标识
09
策略路由 可以除了目的地址,还可以根据源地址,入口设备等区分路由表,甚至可以设置多个下一条和权重
动态路由
- 距离矢量路由算法 获取附近路由器的路由信息,进而获得最短距离,问题是获取快,但是节点挂了还能从邻居获取到路由表,并且发送的信息较大,适用于小型网络
链路状态路由算法 获取附近路由器的链路,进而获得最短距离,更新的时候只会更新变化的链路
内部网关协议 OSPF 基于链路状态路由算法 如果有多个最短路径会进行负载均衡
- 外部网关协议 BGP
BGP自治网络又分
- 对外只有一个连接
- 有多个连接但是拒绝帮助传输数据
- 有多个连接且可以帮助传输数据
10
UDP
特点
- 不建立连接
- 有数据就会进行发送,不会做拥塞控制等
使用场景
- 用于资源较少,网络较好的内网,或对丢包不敏感的应用
- 需要广播,多播或者组播
- 需要处理速度快,可以允许丢包
例子
- QUIC 在应用层实现快速建立连接,减少重传时延
- 流媒体 RTMP,基于TCP,所以需要UDP实现自己的视频协议
- 实时游戏 TCP强顺序会造成卡顿,一般采用自定义UDP协议
- IoT 小的嵌入式系统维护TCP连接代价大,Thread就是基于UDP
- 4G网络的GTP-U也是基于UDP
11
TCP解决的是包的顺序问题,丢包问题,连接维护,流量控制,拥塞控制
连接维护通过三次握手四次挥手
12
- 顺序问题通过ID区分
- 丢包问题根据数据的ACK确认是否送到;有超时重试超时时间自适应算法,重传策略是讲超时时间设置为之前的2倍;在收到下一个包的ACK会触发快送重传,一次重传三个
- 流量控制通过接收端响应的速度,调整发送端窗口实现
- 拥塞控制通过慢启动开始指数增长,到达sshthresh,更有TCP BBR拥塞算法
13
TCP交互 service端通过bind获取端口,listen进行监听,accept返回另一个socket用于数据传输,client端通过connect进行连接
UDP交互 直接调用sendto发送,recvfrom获取
- task_struct
- fds 文件描述符数组指针
- file list内核打开文件列表
- incore inode内存的inode地址
struct socket内核中的socket结构,里边有两个队列
多进程
- 多线程
- IO多路复用,一个线程维护多个socket,通过select函数
- IO多路复用,有事件通知,通过epoll函数,将相关的socker注册callback函数
14
HTTP报文
HTTP2.0
QUIC
15
HTTPS
信任的CA证书放在本地,对获取的Server端证书进行认证,然后进行对称加密通信
16
RTMP
17
HTTP和FTP都存在单一带宽的问题
P2P peer-to-peer,资源分散在并不集中的存储设备上,即peer,当你下载的时候就去这些peer上下载,但是当你下载了,你就成为了peer的一员,别人也就可以在你这里下载了
种子文件 .torrent
文件,包括tarcker URL
和文件信息
文件信息包括
- info区 种子有几个文件,文件有多长,目录结构,目录和文件的名字
- Name字段 顶层目录的名字
- 每个段的大小 默认是4MB
- 段哈希值
BT客户端解析tracker地址并连接,tracker返回其他下载者(或者发布者)的IP,BT客户端就可以与其他下载者交互获取数据,但是这会依赖tracker服务器的稳定
DHT协议 可以理解为分布式的tracker
18
DNS
19
传统DNS的问题
- DNS缓存 导致请求的IP地址不为对应服务或者请求绕远
- 域名转发问题
- 出口NAT问题
- 域名更新问题 TTL问题
- 解析延迟问题
HTTPDNS 不走DNS,而是通过HTTP协议获取DNS地址,需要在APP嵌入,将DNS缓存到本地,缓存时间和DNS更新都可以自行调度,当HTTPDNS不能正常使用进而再调用DNS
20
CDN
21
数据中心
接入层交换机 机架上的交换机,连接机架上的机器
汇聚层交换机 连接接入层交换机
网卡绑定 bond,依赖的LACP协议,需要服务器和交换机都支持
交换机堆叠 实现双活
核心层交换机 连接汇聚层交换机和边界路由器
22
数据中心联络分为公网,专线和VPN方式
VPN 通过隧道的方式在公网仿造点到点的专线,通过一种协议来传输另一种协议,涉及乘客协议,隧道协议和承载协议
IPsec 通过对称加密加密数据,对通过的数据机型hash值计算,保证数据是对端发出,但是走的是路由表,数据包为 外部IP头+IPsec头+内部IP头
MPLS-VPN 通过ATM的标签方式,但是需要运营商支持
ATM 和IP协议同级,是面向连接的,在传输前先建立连接,形成一个虚拟通路,建立连接后包并不会选路,而是按照连接路进行走
MPLS 路由通过标签进行转发,需要路由器支持标签转发,这种路由器内部会维护路由表和标签表
23
2G网络 通过基站接收无线信号转发到核心网,在这个过程中判断是否合法和是否为本地号码,使用的电话网络
2.5G网络 在2G的基础使用的IP网络
3G网络 增加了无线网络的带宽
4G网络 通过E-Node B基站,实现接收的速度提升,在第一次请求的时候通过MME核心控制单元从HSS进行验证,然后SGW从eNodeB获取数据转发到PGW,由PGW通过NAT的方式进行联网,PCRF用作计费和上网策略
异地上网 从外国运营商的eNodeB接入外国的MME从本国的HSS进行验证,然后外国的SGW从eNodeB获取数据转到到本国的PGW,所以还是使用的本国的网络
24
虚拟网卡
网桥
带VLAN的虚拟网卡
25
软件定义网络
Openvswitch 任何经过路由器的包都会根据流表规则处理,对物理层到传输层的数据包都可以设置规则,并且支持创建虚拟网桥,网卡,VLAN划分等功能,对于VLAN可以在一个网桥上划分VLAN
26
Netfilter可以在节点插入hook函数,对数据包做处理,最佳实现就是iptable
iptables的3表5链
安全组如果配置在网桥上,就是网桥上所有机器可以互通,对外限制
SNAT和DNAT 对于TCP通过源/目的IP和源/目的端口标识
27
云中网络QoS分为无类别排队规则和基于类别排队规则
Openvswitch通过分层令牌桶规则
28
GRE 需要硬件设备支持GRE,有局限性 数据包为 外部IP头+GRE头+内部IP头
VXLAN 外部MAC头+外部IP头+外部UDP头+VXLAN头+内层MAC头+内层IP头
29
namespace net实现路由网卡等
cgroup net_cls用于实现流量控制,可以通过tc进行设置
30
Flannel
UDP
VXLAN
31
Calico
32
RPC协议,对于我并不关心
33
SOAP 基于XML的通信协议,解决了RPC协议对业务逻辑需要频繁修改的情况,协议原定使用WSDL,传输使用HTTP,服务发现使用UDDL
34
RESTful是一种接口的设计风格
客户端维护状态,服务端维护资源
实现幂等
35
dubbo通过二进制,RCP协议为Hessian2
dubbo是这个rpc框架包括服务发现,服务均衡负载,接口层面监控。对于rpc中的扩展点比较多。后面会用servicemesh ,传输协议较多选择
Spring cloud是一个完整微服务框架,包括rpc框架,整体链路监控,熔断降级,网关,配置中心,安全验证。主要用http协议传输
36
gRPC 满足二进制和跨语言
Envoy
结束语
放弃完美主义,执行力就是限时限量认真完成