这是我参与「第三届青训营 -后端场」笔记创作活动的的第7篇笔记.
抖音中网络是如何交互?
从计算机网络各层及其协议进行讲解。从容灾和优化方面对提供好的抖音服务进行讲解。
1. 网络接入
- 通过路由网络接入
void sen_one_pkt(){
rt = find_rt(dst)
...
l2->dst_mac = rt->next_hop->mac
p = append(p,l2)
...
send(p,rt->root)
}
路由不是对称的。作用是更改mac地址,可以找到下一跳,目标ip地址一直不变。
- 怎么找到下一跳mac地址 ARP协议。
- 逻辑同网段才可以发送ARP
- ARP请求广播,ARP应答单播
2. 网络接入-ip协议
- ip唯一标识,互联网通用 如何解决ipv4不够用的问题? NAT.
- NAT使路由器对于外部世界来说不像一台路由器,而是一个具有单一IP地址的单一设备。
- 路由器从ISP的DHCP服务器得到ip地址,并且路由器运行一个DHCP服务器,为位于NAT-DHCP路由器控制的家庭网络地址空间中的计算机提供地址。
- 如果广域网达到NAT路由器的所有数据都有相同的目的ip地址,路由器如何知道应该将某个分组转发给哪个内部主机? NAT路由器中的一张NAT转换表,在表项中包含了端口号和ip地址。
MSS
一旦建立TCP连接,两个应用进程开始发送数据。客户进程通过套接字传递数据流。数据被客户端中的TCP控制。TCP将数据引导到该连接的发送缓存里。发送缓存是发起三次握手期间设置的缓存之一。
TCP从缓存中取出并放入报文段中的数据数量受限于最大报文段长度(MAXIMUM Segment Size).MSS通常根据最初确定的由本地发送主机发送的最大链路层帧长度(Maximum Transmission Unit)来设置。设置该MSS要保证一个TCP报文段(封装在ip数据报中)加上TCP/IP首部长度将适合单个链路层帧。
MSS是报文段中应用层数据的最大长度,而不是包括TCP报文段的最大长度。
在tcp首部的option字段,用于发送方与接收方协商MSS时使用。
3. 网络传输-数据包发送
- DNS,使用UDP传输协议
- TCP三次握手
- TCP传输
- HTTP/HTTP1.1
- HTTPS
- SSL/TLS握手
序号和确认号
- sequence number 发送方报文段首字节的字节流编号
- acknowledge number 期望收到对方主机的下一个字节的序号
网络架构如何为抖音提高质量
1. 多路复用/stream
2. QUIC/HTTP3.0
- UDP
- Userspace
- 0 RTT
- 弱网优势
3. 路径优化
- 数据中心: 核心机房/边缘机房
- 同运营商访问
- 静态资源(如视频、图片)的cnd缓存
- 动态api(如评论、点赞)的路径优化
- DSA
4. 容灾
- 故障发生
- 故障感知
- 自动切换
- 服务恢复
网络故障排查常用命令
- dig ->DNS
- ping/talnet/nmap -> 查询三层/四层连通性
- Traceroute -> 排查中间链路
- iptables -> 客户端
- tcpdump -> 抓包
Q&A
用户态socket和内核态socket的区别?
映射关系,但不是一个事物。用户态socket本质是为了和内核态socket通信,需要将文件映射给内核态socket。
内网穿透ftp为什么被禁止使用?
ftp和ssh一起使用,其他人拥有ssh端口就可以登录该服务器。
socket和http的区别
本质上socket不是协议,而是一个用法。通过编程实现tcp和udp。socket通过套接字实现应用态的使用。
特定场景下socket是http的实现基础。
Http3.0的优化方向
- 队头阻塞
- 优化传输
iptables
对一些包的过滤传输。ipVS,负载均衡。阿里二次开源。