网络传输 | 青训营笔记

151 阅读5分钟

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

网络大纲

网络接入协议

Mac地址: 主机的地址,全球唯一

路由协议: 管理路由器之间的数据传输(路由器所属网络)

ARP: 用于将ip地址转为私网内可以指定测mac地址

IP协议: 网络中主机互相通信,所确定的唯一地址

NAT: 网络 地址 转换 发送时将主机ip换成私网ip,反之则反之

网络传输协议

  • DNS: Domain Name System 域名系统(dns resolver)
  • UDP: User Datagram Protocol 用户数据报 协议
  • TCP: Transmission Control Protocol 传输控制协议
  • HTTP: HyperText Transfer Protocol 超文本传输协议, 用于超文本标记语言的传输,是客户端和服务器的数据传输格式标准
  • HTTPS: http+ssl/tls加密 目的: 提供对网站服务器的身份验证(谁都能申请,免费)
  • HTTP2.0: 压缩http头
  • QUIC:Quick UDP Internet Connections

问题

  1. 按照TCP/IP模型,数据包的拆包/封包
  2. TCP拥塞算法有哪些?
  3. 熟练掌握Socket编程?
  4. golang下net相关库的代码
  5. 了解 Linux kernel的网络包从收到包到用户态, 从用户态发包到网卡的整个流程?wsm

为什么会产生这些协议/协议基础

简历更新 (熟悉TCP/IP ,计算机网络)

互联网应用泛解

视频/图片 泛http

评论api 泛http

抖音网络如何交互

  • 网络接入: 大服务 一般是会和运营商接通的

    • 最后一公里

    • 同网段:ip在子网范围内

    • 集线器/交换机(用) 同网段主机交互

    • sdn: 同网段不一定接入一个物理交换机(虚拟化)

      • mac:overlap

      • 优先匹配(精细)

        • 路由一定对称?

          • 不是的
        • 路由工作在哪一层?

          • 网络层/数据链路层 ip层
          • bgp/ospf:传输层的协议:基于tcp,的\udp做的
        • 路由是改IP地址的咩?

          • 改mac地址
          • 目标IP地址一直不变
          • 路由是为了找中间的路(根据下一跳找到下一个mac地址)
        • 下一跳怎么来的?

          • bgp ospf
        • 发包要指定网卡,why?

          • 找到下一跳的目标的话,就会找到网卡(初始化)
        • 知道ip怎么找到mac地址?

          • arp: 发送请求看谁响应了,arp只有逻辑同网段才能使用
          • 找到下一跳, 广播发arp,目标mac应答(单播) 找到mac地址
          • 免费arp:新增主机主动发送arp:告诉别人新增了机器,防止ip冲突
          • ipv6.grp:防止同一局域网有两个ip地址
          • arp代理:交换机劫持arp请求,发到代理指定位置,用于sdn(software define network).
      • mac地址为什么不能代替IP地址?

        • mac地址没有层级
        • 不好做路由表
        • 有些二层协议,不支持mac协议,用ip地址就可以统一了.
      • ipv4不够用,一般怎么解决?

        • NAT

        • 多个内网客户访问同一个目标地址+端口,源端口恰好一样,冲突/

          • nat 协议改协议和端口(源)
      • 数据报发送

        • 流程(已会)
      • DNS

        • 递归迭代:

        • 递归解析器

          ->递归解析器去问 "."(根服务器) , com.去哪里解析

          ->递归解析器问"com."(顶级域服务器), douyin.com 去哪里解析

          ->douyin.com告诉递归解 www.douyin.com 解析到xxx(IP地址)

  • 网络传输

    • UDP

      • DNS的传输协议udp

      • udp避免分片,每次发多少?

        • IP层 mtu:1500字节
      • 怎么知道没丢包?

      • 怎么权衡传输效率和质量?

    • TCP

      • what? 保持一个tcp连接状态

      • 拔了网线,tcp连接会断吗? 拔了网线,看tcp的探活,如果探到网线断了,就停止主机状态.

      • tcp三次握手?

        • tcp用什么字段避免分片? mss(在tcp三次握手使用,确认mss)

        • 三次握手,tcp option中的mss中的最小值,时间戳在三次握手时也会进行交互. 抓一次tcp的包,看一下作用

        • 三次握手,ack为什么要加一?

          • 确定流程执行顺序(确定对方的sequence加1)
      • tcp传输

        • 为什么老问timewait?

          • 为什么timewait要有两个msl?

            • 确保连接正常关闭,防止前一次的ack丢失.
          • timewait 字段

            • timewait_recycle:不等timewait直接用了
            • timewait_reuse:一样
            • timewait:太多端口,等得太多.端口不够用
        • 丢包怎么办?

          • ack机制
        • 结合sequence,ack 理解滑动窗口,流量控制/拥塞控制?

        • 为什么不直接用tcp,而要再用http呢?

          • 兼容协议,tcp负责内容已经很多了
          • http: 多了一些规矩,简化开发流程(可以想想用tcp编程)
          • http跟tcp关系: 解放军军事专用语和中文的关系
      • https

        • https解析出来仍然是http

        • 对称加密

          • 加密算法本身写死
        • 非对称加密

          • 加密算法本身未写死(黑盒)
          • 第三方ca机构: 决定加密算法本身(黑盒)

抖音为什么又快又稳

  • 网络提速(协议优化)

    • http2.0:多路复用(很多图片一起下载)

      • tcp连接通道里有多个stream(stream是串行的)

      • 发生丢包:

        • 队头堵塞
      • tcp有个option可以解决(asack)

    • quic/http3.0

      • udp(好推广) tcp(改了,操作系统难改)

      • kernal(内核态) or 用户态(√ 好推广)

      • 0 RTT

      • 弱网传输

        • tcp有丢包(弱网),会队头堵塞
        • udp不会
  • 网络路径优化(本来要走1万米,通过优化路径,最后走了4000米)

    • cdn(content delivery network) dsa(Dynamic site accelerator)

    • 数据中心:服务器集合的地方(公司机房)

      • 核心机房: 用户核心数据
      • pop点接入: 增加跟互联网交互的出入口
      • 边缘机房:对小运营商
    • 同运营商访问:

      • 手机运营商:移动的,就访问移动机房(中国三大运营商之间通讯访问较差,通过域名解析实现)
    • CDN(针对静态资源/一般是不变的,不随请求改变而改变)

      • 在边缘机房先缓存,如果有就不找了, 汇聚机房再找,再去核心机房找
    • DSA(针对动态资源/)

      • 探测,拓扑,形成表,最后找到最优路径
  • 网络稳定

    • 容灾概念

      • 故障发生
      • 故障感知:系统知道
      • 自动切换:将有问题的系统从容灾系统中去掉
      • 服务恢复

总结回顾