这是我参与「第三届青训营 -后端场」笔记创作活动的的第6篇笔记
课程依赖
老师介绍
抖音:大概哪些协议交互,
应用层:DNS域名解析,图片下载:http,动态评论:泛http
互联网
网络:lastmile,网络容易出现丢包和拥塞的问题,这是无线网的问题
路由
逻辑性联通,分为同网段和跨网段,同网段也有路由
同网段中间有个中转设备(集线器,三层交换机ip层)
当下流行的就是SDN,把网络虚拟化
发包和交互?如何在同网段发包?改一下目标ip的mac即可
配置默认路由,定义网关,去跨网段
Q:路由是否对称?
比如说,可以绕路走,不一定来回就是对称的
Q:路由在哪一层协议?
IP层?路由协议不一定在ip层,ospf(传输层)bgp,只是基于tcp做的,可能用的路由需要四层去交互的
Q:路由是改ip地址吗?
路由不是改ip地址,是改mac地址,目标ip地址是不变的,如果是一个路由,找到下一跳为了告诉你二层交换是往那个mac去发,去做arb请求,问254你的mac地址是多少,目标mac直接改成路由的mac,然后问右边的,然后知道mac地址从而转发。
源IP地址和⽬标IP地址在传输过程中是不会变化的,只有源 MAC 地址和⽬标 MAC ⼀直在变化。
ARP协议
先找路由,然后修改mac地址,指定网卡port(原因:内核发包是以网卡为单位的)
逻辑同网段才能发送ARP,一条一条找到mac地址
广播不能跨网段
免费arp?
新增服务器,不用请求就能知道arp地址,局域网加了机器,其他机器给他发包较慢,一般会发送免费arp的东西,源地址目标地址会做修改,发出去,刷新一下就能知道了
ipv6类似免费arp,新增了ip之后,发送一种类似免费arp协议的信息,防止ip冲突的问题。
arp代理:劫持一个arp请求,发往另一个地方,发送arp的时候,抢先应答,中介作用,存所有ip和mac地址对的地方,扩充边界
代理ARP就是将一个主机“作为”另一个主机对收到的ARP请求进行应答。它能使得在不影响路由表的情况下添加一个新的Router,使得子网对该主机来说变得更透明化
IP协议
Q1回答:mac协议,是二层的最基础的,二层的协议有很多,终端的设备已经接入网络,但是不是mac协议,改怎么发呢?提现了向下兼容的问题,ip把不同二层网络进行统一,解决了这个问题
Q2回答:ipv6扩充,用NAT
NAT
用nat的设备,多个内网客户端访问同一个目标?
NAT是ip+端口改变,客户端改了端口访问即可
- NAT上网:家用路由器
- NAT出网:机房内网主机上外网
- NAT原理:注意不仅仅是源地址变换,源端口/校验和/SEQ等都会变化
数据包
抓包从下网上看,抓的dns协议
传输时发的包,通过封装的概念,发的包表示实在的负载信息,按层封装
应用端绑定一个socket发,最底下的箭头,时一个很复杂的拓扑
先请求DNS
通过DNS把网站名映射目标ip地址,递归迭代,发出的请求时递归请求,先请求根,再请求com,再请求服务器
DNS的传输协议UDP
UDP传输视频流,需要考虑发多少,mtu传输有限,这些问题的产生需要去做一遍tcp了
TCP三次握手
连接就是保证一个tcp连接的状态
拔了网线,连接状态存在,假设TCP有探活,保持就保持连接,有时会断开
三次握手的事情
1.协商双方的序列号 2.确保对方已建立连接 3.防止复用历史连接
tcp分段正常? 通过用同步序号、双方确认对方和自己是否发送接收正常 MSS类似MTU
MSS在什么场景下确认?三次握手后确认
三次确认后怎么去确认mss?TCP option字段,和server端一样,取最小值mss,和时间戳也会做一些交互。很多option在三次握手做了交互
tcpdump抓包,wireshark就是分析的
以左边为例,2行:ACK表示期望下次SEQ 的序列号,
为什么老问timewait?
确保连接正常关闭,防止前一次ack丢失
字段timewait recyle,
太多timewait不太好
丢包怎么办?
重传,根据ack的机制
滑动窗口和流量控制需要后期掌握
网络传输协议
tcp负责的内容本身就够多了,兼容协议,实现断电传输
tcp编程很麻烦,http/1.1去关注代码本身,规定了交互原则
客户端不显示劫持的网站,
窃听基础就是非对称握手
对称加密算法,最上面那个图,假如是拼音加密算法,那就知道了
非对称加密:把对称加密的算法也加密起来,自己用随机数把加密算法封装,只有协商才能知道,盒子该怎么做呢?需要有一个第三方的CA,机构认证做基础,颁发公钥,需要第三方CA可信
本次课是从下网上讲的
网络架构怎么给抖音提质
-
HTTP2.0
- 多路复用:依然有队头阻塞
理解一下什么是多路复用,可以有多个http请求,http2是一个stream,并行的访问tcp通道,
tcp丢包?对头阻塞,会全部重传,要等重传成功之后才能发送。丢包对于多路复用就不能实施了。
tcp有个option会有一个方法,针对ack序列号,本质没有解决问题。
QUIC网络提速
QUIC的产生背景和背后思考:
- 为什么在用户态实现?内核的更新迭代频率较低,不好推广
- 为什么用UDP?TCP的队头阻塞问题不好解决,推倒重来&复用所有操作系统基本都支持的底层协议
类似session共享 弱网传输的优势。
路径优化算法:cdn,最短路径,p2p
数据中心
服务器机房
- 多运营商接入:同运营商内部访问,避免跨运营商的流量
- 有边缘机房/汇聚机房/中心机房
解析相同客户端
客户端最靠近的服务器,里面做一些缓存,如果要访问,先查有没有别人访问过的进行缓存
动态api
接口是变的,就用路径优化,通过算法访问
专线:内部的没有走internet,做的核心交换器做了物理链接。外网在机房以外的。微服务跨机房调用,专线不可用就走外网容灾。
全局容灾系统,- 单机房接入节点故障:DNS容灾,摘除故障的节点-字节GTM系统
不仅仅简单切换,探测故障感知,把流量切到机房b之前,受否够重载才能切流量
sdk发现有问题,让你的端别去访问机房,防止雪崩问题。
什么时候用不了云控?用户不让执行某些命令,里面sdk不受控制的。还有就是假设web服务器访问字节搜索,通过浏览器取访问业务。是不好做容灾,
假设服务器到代码不通了,可以做一层cache,当我发现不通的时候,去响应缓存的结果。
故障排查
一定要沟通什么问题,什么接口故障
不是去找代码,首先是止损。
抓包,发现网络fast-发包,默认路由是对称的,回包的时候目标mac回mac就有问题
课后总结
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是一个登录的协议,登上服务器就会出事了,所以不允许