计算机网络知识点扩展|青训营笔记

220 阅读8分钟

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

打开抖音会发生什么?(课堂笔记)

  • 当下整个网络的热门的一个词,叫做“最后一公里”,最后一公里经常是我们的网络容易出现丢包,出现拥塞的地方。这个最后一个地方,主要指的是我们这边的无线网的一些问题,那其实,整个的互联网,如果你除了以外中间方的这些网络包括运营商的骨干网呀,一级光缆的机房的网络,其实很少会说出现问题的。基本上它这边如果出现了丢包,或者说出现了卡顿的问题,那基本上就是一次故障了。

  • 掩码决定了一个子网到底它的范围是多大。在这个掩码子网范围以内的,我们管它叫做同网段三台服务器能不能做同网段的很显然是不好做的,所以一般的情况下,如果你要做一个通网站的话,中间有一个中转设备,这个工厂设备可能是一个早期很简单的一个集线器,就我作为一个插孔,几个服务器的插在里面,那我就可以做交换, 现在当下流行的可能是一个交换机,或者说是一个逻辑交换机。这个交换机一般是一个三层的,是IP不可达的,而且可能本身就有一个IP。

  • 路由一定是对称的吗?不是,也可以是绕着给你返回的,当然对称的一般来说都是通的,但是千万不要认为它一定都是对称的。

  • 路由是工作在哪一层协议?书上是写的是网络层,但路由协议本身并不是工作在网络层的,还在传输层也用到了

  • 路由是改的IP地址吗?不是,它是改MAC地址,目标IP地址是不变的,找到发包口

  • 怎么找到下一跳的MAC?ARP协议(ARP本质上是查找下一跳的MAC,不是请求目标地址!)

  • 下一跳就是网络的中间节点,不是同网段的,才会用到下一跳,同网段的会直接找到下个目标IP。这也就是为什么广播不能跨网段去发ARP请求。

  • ARP代理是一个起到中介的作用,是一个可以存所有IP和MAC地址对应的地方,然后扩充边界

  • IP协议其实就是唯一标识,互联网通用。

  • Mac地址不能代替IP地址吗? MAC地址是数据链路层使用的地址,它也能唯一地确定一台主机在网络中的位置。但是它没有一种办法很好地区分不同的网络。这是为什么呢?我们先从MAC地址的结构入手。MAC地址一共有48bit,分为两部分,前24bit是厂商代码,后24bit是厂家自己分配的。假如我们认为MAC地址可以区分不同的网络的话,那只能是使用厂商代码来区分不同的网络,也就是说使用同一个厂商生产的网卡的主机或者网络设备,就是属于同一个网络。举个例子,比如说企业A使用了思科的网络设备,企业B也使用了思科的网络设备,那这两家企业就属于同一个网络了。现实中这种情况是不可能的。其它的补充比如MAC地址难记,不好维护表都是会有一定会影响的,但最主要的其实还是一个地址的一个统一问题。就是不同的协议,我要给它统一起来。

  • IPV4不够用,一般怎么解决的IPV6地址解决IPV4不够用的情况,去扩充IPV4的地址。但是很多设备不支持IPV6,那么我只能去IPV4继续做一些互联网的上网呢?我们可以用NAT,其实这个东西很常见,就比如说家里的路由器,它本质上就是一个NAT,它的原理大致是说我的内部的用户,通过一个NAT的设备,然后改我的源地址,比如说公司内部的一个局域网的地址都是192的,但公司有很多内部的,就比如说公司A和公司B我里面都是可以用重复的IP地址的,但是我连到互联网设备的外部的地址都是一个全局唯一的一个外网地址,就是在NAT服务器上面的,这个时候就把不同的地址映射到一个地址去做联网,这样就节约了IPV4的一个地址。另一方面,NAT改变的是IP+端口的,这样可以解决多个内网客户端去访问同一个目标IP+端口,NAT其实维护了一张表。

  • 为什么要有DNS?因为我们IP不容易记嘛,我们都用的是域名去记,那怎么去把域名映射的ip,这边就是通过电脑去请求,然后而DNS协议大家需要关注的,其实就是一个递归迭代。递归迭代。整体的流程就是:客户端发出一个请求可能是递归请求,本身的DNS会请求一个DNS解析器,然后递归DNS解析器会发生一个迭代,它会先请求根,根可能是全世界写死的那几个,然后根请求完之后会再请求顶级的域名,比如说com,然后com请求完后,请求douyin.com,然后请求完后,再请求www.douyin.com,这样我就知道最终的目标服务器在哪。

  • DNS协议本身是基于UDP协议的,UDP本身实现其实是比较简单的,相比较TCP而言,它就是一个端口加一个校验,想发什么包,就分配一个UDP的头,把payload里面塞数据发出去就好!但是UDP用好很难,需要考虑发包每次发多少?怎么去避免分片?怎么知道没丢包呢?所有UDP不能保障可靠。

  • 什么是分片?当IP包的长度大于接口的MTU时,从这个接口上发出去的包需要被分片。为什么我们需要避免分片?这个东西它是影响效率的。就你一旦分片的,你要考虑到重组,另一方面,分片的时候肯定是要消耗CPU计算资源的,重组完之后,又要消耗计算资源,很显然,在一些高效率的场景下,我们是尽量避免的。

  • 什么是TimeWait?通常服务器检测到客户端关闭连接后,就会立刻给客户端发送一个结束报文段来关闭连接,客户端收到这个结束报文段之后,并没有直接进入CLOSE状态而是转移到TIME_WAIT状态。在这个状态,客户端连接要等待一段长为2MSL的时间,才能完全关闭。MSL是TCP报文段在网络中的最大生存时间。

  • 为什么老问你Timewait?它发生在四次挥手中的状态,它存在的原因它可以可靠的终止TCP连接,以及保证让迟来的TCP报文有足够时间被识别并丢弃。

  • HTTP1.1优化

    • 长连接
    • 部分传输
    • HOST
    • 缓存
  • HTTPS-SSL/TLS

    • 非对称: 不告诉别人我的加密算法, 只有协商的时候另一方才知道
  • 网络提速的方式有哪些?

    • 多图一起请求, 一起响应
    • TCP发生丢包时: 对头阻塞(一直等待那一个包)
    • QUIC协议: 具有弱网优势, 0 RTT(使用了Diffie-Hellman算法(迪菲-赫尔曼算法)来保证数据交互的安全性并合并了它加密和握手过程来减小连接建立过程中的往返次数,以此来达到0RTT的目的), 改进UDP为可靠传输(解决对头阻塞)
    • 数据中心: 简单地理解为服务器集合的地方, POP接入(增加与互联网接入的入口)
    • 网络路径优化: CDN优化,
    • 同运营商访问: 跨运营商的服务器访问会比较差
    • 路径优化: DSA(计算每个机房的最优路径)
  • 容灾相关关键词:故障发生, 故障感知, 自动切换, 服务回复

    • 方案:

      • 设置机房之间的专线(避免走因特网(外网))
      • GTN保证自动化容灾, 探测哪个机房挂了, 然后(这一步是防止雪崩)感知另一个机房的容量是否能够承受这个机房(已经挂了)的流量, 如果可以的话, 进行切换
      • 云到端: 自动降级/容灾 (需要切域名, 但是浏览器访问就不能做到)
      • Bug导致全crash -> 前置兜底逻辑/cache文件
    • 故障排查

      • 故障明确(故障出现在哪里)
      • 先止损再排查(止损方法: 是否有容灾手段(组件or系统), 没有则降级)
      • 分段排查 (客户端排查, 服务端排查, 中间链路排查)
      • 预防故障是最重要的(监控报警 -> 故障演练/预案 -> 故障降级/止损)