计算机网络 | 青训营笔记

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记

刷抖音网络是怎么交互的

分为网络接入,网络传输

网络接入-路由

同网段:虚拟网络段,可以是多个交换机连接起来
路由不一定是对称的 4085411759ef443190d7c1dac31336bf_tplv-k3u1fbpfcp-watermark.png A->H有多条路可达,同样,H->A返回时也有多条路,所以路由不一定是对称的

路由是工作在IP层,路由协议并不一定是工作在IP层,如RIP基于UDP,BGP基于TCP,RIP和BGP二者属于应用层协议,OSPF和EIGRP基于IP,所以OSPF属于传输层协议。路由并不是改的IP地址,是改的MAC地址,找到发包口,源IP地址和⽬标IP地址在传输过程中是不会变化的,只有源 MAC 地址和⽬标 MAC ⼀直在变化。

如何寻找下一跳的MAC

通过ARP协议,其本质是查找下一跳的MAC地址,而不是请求目标地址,逻辑同网段才能发送ARP,源发送ARP广播请求,目标收到后发出ARP应答单播。

网络接入-IP协议

IP协议是唯一标识,互联网通用

Mac地址为什么不能代替IP地址:Mac协议是一个二层协议,二层协议有很多,如电话拨号等,如果用Mac代替IP,则向下不兼容。IP协议是为了统一封装所有二层协议,实现兼容,并且Mac地址不容易维护。

IPv4不够用如何解决:使用IPv6代替,或NAT。在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。

NAT的实现方式有三种:

  • 静态转换:将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。
  • 动态转换:将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。
  • 端口多路复用:将不同私网地址的报文的源IP地址转换为同一公网地址,但他们被转换为该地址的不同端口号,因而仍然能够共享同一地址。

NAT是IP+端口一起改变的,NAT设备会维护一张表,记录这种改变。

网络传输-数据包

image.png

先请求DNS

DNS:域名--IP地址的映射

  • 客户端发 www.douyin.com 的解析请求
  • 递归解析器去问"."(根域服务器), com.去哪里解析
  • 递归解析器去问"com."(顶级域服务器),douin.com 去哪里解析
  • douyin.com(权威服务器)告诉递归解析器 www.douyin.com 解析到 xxx

DNS的传输协议UDP

UDP本身相对简单,头只有16位源端口号,16位目的端口号,16位UDP长度,16位校验和,想法什么包,就分配一个UDP的头,把payload里面塞数据发出去就好。

网络传输-TCP三次握手

网线断了之后TCP连接逻辑上不会断,假设TCP有探活(定时发送心跳包),会发现连接收不到ACK,就会断开连接。

TCP三次握手能防止历史连接的建立,减少双方不必要的资源开销,帮助双方同步初始化序列号(序列号保证数据包不重复,不丢弃和按序传输)

TCP三次握手的时候确认MSS(最大分段大小),当TCP发现数据超过MSS时,就会先分片,所以其生成的IP包也就不会大于MTU,自然不会用IP分片。

sequence number:表示的是我方(发送方)这边,这个packet的数据部分的第一位应该在整个data stream中所在的位置。
acknowledge number:表示的是期望的对方(接收方)的下次sequence number是多少。

注:SYN/FIN的传输虽然没有data,但是会让下一次传输的packet seq加一,但是ACK的传输,不会让下一次的传输packet加1.

网络传输-TCP传输

  • Timewait:要等两倍的MSL(去向ACK消息最大存活时间(MSL) + 来向FIN消息的最大存活时间(MSL)),确保连接正常关闭,防止前一次的ACK丢失,Linux还有timewait recycle和timewait reuse,recycle是指不等timewait,而是直接重复再利用,reuse也是,但是二者是有风险的。
  • 丢包怎么办:重传,ACK机制判断是否丢包
  • 滑动窗口
  • 流量控制/拥塞控制

网络传输HTTP/HTTP1.1

为什么不直接用TCP通信:TCP负责的已经够多了,使用HTTP可以让人关注业务的实现,而不用去关注协议。HTTP只是多加了一层规矩,仍然是TCP,只是这个规矩让用户更清晰,更简洁。可以将TCP理解为中文,普通话,将HTTP理解为军事专用语,其实都是中文,只是做了一些特殊规定。

HTTP1.1对HTTP做了优化:

  • 长连接
  • 部分传输
  • HOST
  • 缓存

网络传输HTTPS

HTTPS在TCP三次握手之后,还需进行SSL/TSL握手,HTTPS解密出来仍然是HTTP。

HTTPS采用的是对称加密和非对称加密结合的混合加密方式:

  • 通信建立前采用非对称加密的方式交换会话秘钥,后续就不再使用非对称加密。非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢
  • 通信过程中全部使用对称加密的会话秘钥的方式加密明文数据,对称加密只是用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。

网络结构如何给抖音提质

网络提速-HTTP2.0

多路复用,多图并发下载,即在一个TCP上跑多个HTTP。多个Stream复用一条TCP连接,达到并发的效果,提高HTTP传输的吞吐量。

网络提速QUIC/HTTP3.0

为解决TCP的对头阻塞问题而提出,QUIC协议是基于UDP协议的,在用户态实现,QUIC天然地支持HTTPS协议,内部包含了TLS,仅需 1 个 RTT 就可以「同时」完成建立连接与密钥协商,甚至在第二次连接的时候,应用数据包可以和 QUIC 握手信息(连接信息 + TLS 信息)一起发送,达到 0-RTT 的效果。

网络提速-同运营商访问

同一运营商内的网络访问丢包率较低,通过解析来实现,看IP是属于哪个运营商

网络提速-静态资源(图片视频)路径优化(CDN)

静态资源缓存在边缘机房,客户端访问时访问到边缘机房就获取到了数据,而不用进一步地去访问核心机房。

网络提速-动态API(播放/评论接口)路径优化(DSA)

网络中的结点做网络延时探测,所以探测数据做成一张表,根据算法选择一条最优的路径。

网络稳定

容灾

故障发生-故障感知-自动切换-服务恢复

故障排查

  • 故障明确:出现什么故障
  • 故障止损:先止损,在排查,保证用户体验第一,如何止损:组件没有容灾,系统是否有容灾,降级(一般是降版本,降到先前的稳定版本)
  • 分段排查:客户端排查,服务端排查,中间链路排查

故障预防

  • 监控报警
  • 故障演练/预案
  • 故障降级/止损

猜你喜欢

转载自juejin.im/post/7103465323000496159