第八节打开抖音互联网会发生什么| 青训营笔记

192 阅读9分钟

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

课程依赖

image.png

老师介绍

image.png image.png image.png image.png 抖音:大概哪些协议交互,
应用层:DNS域名解析,图片下载:http,动态评论:泛http image.png image.png image.png

互联网

image.png 网络:lastmile,网络容易出现丢包和拥塞的问题,这是无线网的问题

路由

image.png 逻辑性联通,分为同网段和跨网段,同网段也有路由
同网段中间有个中转设备(集线器,三层交换机ip层)
当下流行的就是SDN,把网络虚拟化 image.png 发包和交互?如何在同网段发包?改一下目标ip的mac即可 image.png 配置默认路由,定义网关,去跨网段 Q:路由是否对称?
比如说,可以绕路走,不一定来回就是对称的 Q:路由在哪一层协议? IP层?路由协议不一定在ip层,ospf(传输层)bgp,只是基于tcp做的,可能用的路由需要四层去交互的 Q:路由是改ip地址吗? 路由不是改ip地址,是改mac地址,目标ip地址是不变的,如果是一个路由,找到下一跳为了告诉你二层交换是往那个mac去发,去做arb请求,问254你的mac地址是多少,目标mac直接改成路由的mac,然后问右边的,然后知道mac地址从而转发。
源IP地址和⽬标IP地址在传输过程中是不会变化的,只有源 MAC 地址和⽬标 MAC ⼀直在变化。 image.png image.png

ARP协议

先找路由,然后修改mac地址,指定网卡port(原因:内核发包是以网卡为单位的) image.png 逻辑同网段才能发送ARP,一条一条找到mac地址
广播不能跨网段
免费arp?
新增服务器,不用请求就能知道arp地址,局域网加了机器,其他机器给他发包较慢,一般会发送免费arp的东西,源地址目标地址会做修改,发出去,刷新一下就能知道了
ipv6类似免费arp,新增了ip之后,发送一种类似免费arp协议的信息,防止ip冲突的问题。
arp代理:劫持一个arp请求,发往另一个地方,发送arp的时候,抢先应答,中介作用,存所有ip和mac地址对的地方,扩充边界
代理ARP就是将一个主机“作为”另一个主机对收到的ARP请求进行应答。它能使得在不影响路由表的情况下添加一个新的Router,使得子网对该主机来说变得更透明化

IP协议

image.png image.png Q1回答:mac协议,是二层的最基础的,二层的协议有很多,终端的设备已经接入网络,但是不是mac协议,改怎么发呢?提现了向下兼容的问题,ip把不同二层网络进行统一,解决了这个问题 Q2回答:ipv6扩充,用NAT

NAT

image.png 用nat的设备,多个内网客户端访问同一个目标? NAT是ip+端口改变,客户端改了端口访问即可

  • NAT上网:家用路由器
  • NAT出网:机房内网主机上外网
  • NAT原理:注意不仅仅是源地址变换,源端口/校验和/SEQ等都会变化

数据包

image.png image.png 抓包从下网上看,抓的dns协议 image.png 传输时发的包,通过封装的概念,发的包表示实在的负载信息,按层封装 image.png 应用端绑定一个socket发,最底下的箭头,时一个很复杂的拓扑

先请求DNS

image.png 通过DNS把网站名映射目标ip地址,递归迭代,发出的请求时递归请求,先请求根,再请求com,再请求服务器

DNS的传输协议UDP

image.png UDP传输视频流,需要考虑发多少,mtu传输有限,这些问题的产生需要去做一遍tcp了

TCP三次握手

连接就是保证一个tcp连接的状态
image.png 拔了网线,连接状态存在,假设TCP有探活,保持就保持连接,有时会断开
三次握手的事情
1.协商双方的序列号 2.确保对方已建立连接 3.防止复用历史连接 tcp分段正常? 通过用同步序号、双方确认对方和自己是否发送接收正常 MSS类似MTU
MSS在什么场景下确认?三次握手后确认 三次确认后怎么去确认mss?TCP option字段,和server端一样,取最小值mss,和时间戳也会做一些交互。很多option在三次握手做了交互 tcpdump抓包,wireshark就是分析的 image.png 以左边为例,2行:ACK表示期望下次SEQ 的序列号, image.png 为什么老问timewait?
确保连接正常关闭,防止前一次ack丢失
字段timewait recyle,
太多timewait不太好 丢包怎么办? 重传,根据ack的机制 滑动窗口和流量控制需要后期掌握

网络传输协议

image.png tcp负责的内容本身就够多了,兼容协议,实现断电传输
tcp编程很麻烦,http/1.1去关注代码本身,规定了交互原则
image.png 客户端不显示劫持的网站, image.png 窃听基础就是非对称握手 对称加密算法,最上面那个图,假如是拼音加密算法,那就知道了
非对称加密:把对称加密的算法也加密起来,自己用随机数把加密算法封装,只有协商才能知道,盒子该怎么做呢?需要有一个第三方的CA,机构认证做基础,颁发公钥,需要第三方CA可信 image.png 本次课是从下网上讲的

网络架构怎么给抖音提质

image.png

  • HTTP2.0

    • 多路复用:依然有队头阻塞

image.png 理解一下什么是多路复用,可以有多个http请求,http2是一个stream,并行的访问tcp通道,
tcp丢包?对头阻塞,会全部重传,要等重传成功之后才能发送。丢包对于多路复用就不能实施了。
tcp有个option会有一个方法,针对ack序列号,本质没有解决问题。

QUIC网络提速

image.png QUIC的产生背景和背后思考:

  • 为什么在用户态实现?内核的更新迭代频率较低,不好推广
  • 为什么用UDP?TCP的队头阻塞问题不好解决,推倒重来&复用所有操作系统基本都支持的底层协议 类似session共享 弱网传输的优势。 image.png 路径优化算法:cdn,最短路径,p2p

数据中心

image.png 服务器机房

  • 多运营商接入:同运营商内部访问,避免跨运营商的流量
  • 有边缘机房/汇聚机房/中心机房 image.png 解析相同客户端 image.png 客户端最靠近的服务器,里面做一些缓存,如果要访问,先查有没有别人访问过的进行缓存

动态api

image.png 接口是变的,就用路径优化,通过算法访问 image.png image.png image.png 专线:内部的没有走internet,做的核心交换器做了物理链接。外网在机房以外的。微服务跨机房调用,专线不可用就走外网容灾。 image.png 全局容灾系统,- 单机房接入节点故障:DNS容灾,摘除故障的节点-字节GTM系统
不仅仅简单切换,探测故障感知,把流量切到机房b之前,受否够重载才能切流量 image.png sdk发现有问题,让你的端别去访问机房,防止雪崩问题。
什么时候用不了云控?用户不让执行某些命令,里面sdk不受控制的。还有就是假设web服务器访问字节搜索,通过浏览器取访问业务。是不好做容灾, image.png 假设服务器到代码不通了,可以做一层cache,当我发现不通的时候,去响应缓存的结果。 image.png

故障排查

image.png image.png 一定要沟通什么问题,什么接口故障 image.png 不是去找代码,首先是止损。 image.png image.png image.png image.png image.png image.png 抓包,发现网络fast-发包,默认路由是对称的,回包的时候目标mac回mac就有问题 image.png image.png

课后总结

image.png image.png

Q & A

Q:在做公有云项目时如何去做用户的行为管理 更为高效呢,比如挖矿等。 A: 管理自己合法的行为,用户需要自己控制

Q:socket和http的区别 A:socket是一个用法,用一个套接字来使用,http常见nginx,的server框架,底层都是用socket套接字实现的,socket是一种实现方式,把udp,tcp的介入给你

Q:http3.0的优化方向有哪些?想简要了解一下quic A:多路复用对头阻塞,https加密的地方,

Q:老师可以讲一下iptables和ipvs吗? A:特定端口的包drop是利用iptables
ipvs是国内linux核的模块,做到负载均衡,类似路由器

Q:为什么ipv6没有普及,现在办网还是ipv4+nat,是运营商故意的吗 A:一个服务器是用ipv4接入的,改造会有风险,ipv4和ipv6走双站

Q:请问websocket相比于http2、http3还有哪些优势吗,采用websocket更有优势的应用场景有哪些 A:这个几个协议有各自场景优势,http3是有可代替性的,rpc的协议需要保持长连接的场景,又要做外网访问,底层基于websocket封装rpc

Q:拆包和封包在八股上能说,但是实际运用的场景和处理方式方便介绍一下吗? A:linux核心发包,调http然后socket,然后调用kernel,发包的时候相关的数据写道kernel,然后一层层封装,http是应用层,在tcp层填充上,然后一直往下封装
收包,kernel收包,把二层拆下来,识别mac,然后拆ip,拆tcpudp,然后拆发到业务层

Q:有些博客说kafka属于传输层 有些说属于应用层 但不变的是kafka基于tcp 请问协议的层次划分到底是根据什么 A:所有的在tcp,udp以上理解为应用层,只要协议是基于tcp啥的,就是应用层协议

Q:想了解一下linux bridge ovs等虚拟机桥接网络的内容。 A:云计算基础网络虚拟化的东西,虚拟机的网络定义问题,怎么虚拟化的交换机,虚拟的网卡的东西怎么连的就是基于bridge ovs

Q:用户态socket和内核态socket的区别是什么 A:内核sock和用户态socket是两种东西,用户态socket是为了和内核通信。是基于文件的方式做的

Q:我在k8s中没有使用ingress而是使用nodeport+nginx做的代理 请问这样会有什么问题吗? A:没有问题,实际应用中没有做ingress。本质上所有架构都是有优势和劣势

Q:内网穿透fTp理论上是否安全 为什么很多公司禁止使用 A:和ssh一起用的,ssh是一个登录的协议,登上服务器就会出事了,所以不允许