xiaohanliang
Network
Network
  • hi
  • LOWER
    • 0. arp决定下一跳
    • 1. dns决定终点
    • 2. [WIP]dns是不是真的有这些层级
  • MIDDLE
    • 0. 如何理解tcp握手的设计
    • 1. 诡异的tcp拆包现象
    • 2. tcp是一种高效的协议吗
    • 3. 为什么说没有人可以裸用tcp
    • 4. 尝试理解tcp的设计
    • 5. 连接建立@tcp调优
    • 6. 连接断开@tcp调优
    • 7. [WIP]拥塞控制@tcp调优
    • 8. 不需要这些花里胡哨的东西
    • 9. 怎么又是socket又是tcp
  • UPPER
    • 0. 为什么大家都用http
    • 1. [WIP]为什么http也keep-alive
    • 2. 如何保证pipeline的顺序到达
    • 3. 如何保证http的安全性
    • 4. 只不过https基于tls连接
    • 5. 怎么理解get/post
    • 6. http2为什么更快
    • 7. [WIP]内置加速的http3
    • 8. 怎样制造出实时效果-ws
    • 9. kcp是如何榨干你的带宽的
  • DEVICES
    • [302] 跳转到Linux网络设备
  • KUBERNETES NETWORK
    • [302] 跳转到容器网络
Powered by GitBook
On this page
  • 首先使用浏览器缓存
  • 系统DNS记录缓存
  • DNS请求发起

Was this helpful?

  1. LOWER

2. [WIP]dns是不是真的有这些层级

Previous1. dns决定终点Next0. 如何理解tcp握手的设计

Last updated 4 years ago

Was this helpful?

这一部分比较好玩的是DNS解析, 目的是把 bilibili.com 翻译成 IP 地址后填充到包里去, 采用的过程是:

  • 看看浏览器缓存

  • 看看电脑缓存

  • DNS请求发起

首先使用浏览器缓存

这个我不看了, 我实在找不到在哪

系统DNS记录缓存

如果浏览器缓存没有命中, 那么就会像操作系统申请查询, 操作系统也是先查询电脑上的DNS缓存记录, 不同操作系统负责这个功能的模块不一样, 针对 OSX 10.13 而言, Mac上负责处理DNS/DNS缓存的是一个名为 mDNSResponder 的程序, 我们把这些缓存dump出来

  1. 打开 控制台 / Console

  2. 打开命令行, 输入命令: sudo killall -INFO mDNSResponder 这条命令会dump当前mDNSResponder 的缓存信息 / etc-hosts下写死的域名信息, dump出来的信息就可以在控制台中看到 , 像上面那样

DNS请求发起

  • cat /etc/resolve.conf

  • 设置 → 网络 → 高级 → DNS

domain 360buyad.local
nameserver 10.2.255.181
nameserver 172.31.36.240

如果没有命中, 代表我们不知道IP是多少, 这种情况下我们就要发DNS查询请求了, 那么向谁搜索呢? 以上两种途径报告了你的DNS请求会发送到哪里. 值得注意的是: 这个东西, 全都是在当前的无线网下, 你的DNS查询会发送到这里. 因为我现在在公司里, 所以以上两个 nameserver 都是公司搞出的 dns 域名解析服务器. 如果你现在切换成手机热点, dns服务器就不再是上面这个了

上面那个domain指的是搜索域, 这是什么意思呢? 这个概念有点像K8s里面的 DNS 服务, 回忆一下在K8s里, 你如果调Service, 需要有 DNS 帮你把 Service的域名, 解析成 pod ip. 举个例子 xiaohan.default 会解析成 10.1.1.1, 同样的如果你们在同一个namespace下你都不用写那个 default. 你直接查 xiaohan 就会自动帮你补齐成 xiaohan.default. 同样的, 在我们这里, 搜索域是 360buy.local. 如果你直接查 , 发出的DNS请求是查 xiaohan.360buy.local 的ip是多少. 请看下面的抓包结果, 请求发到了上面的那个 nameserver里, 并且域名信息被自动补全了

http://xiaohan/