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

Was this helpful?

  1. MIDDLE

8. 不需要这些花里胡哨的东西

协议简单介绍

看完TCP懵了, 没想到有如此多的特性, 已经多到有些麻烦了, 那么就搞一种最简化的设计, 什么功能都没有, 只保证一些最基本的, 有多基本:

看看上面的图, IP地址放在IP头里, 因此这种协议头只加了通信双方的端口, 包长, 以及一个checksum:

  • 端口是通讯的最基本, 因此端口一定要加的

  • checksum: 保证一下数据没有被篡改过

  • 包长: 还有个包长!

这下方便了, 我们在UDP协议里不搞流那一套, UDP简单到应用层让我发什么, 我就全用一条消息发出去, 那么UDP包就标准的代表了一条消息, 然后经过IP协议的MTU切一下就发出去

缺少的特性

UDP什么都不保证, TCP里搞的那些特性它全都没有:

  • 不管有没有收到

  • 不管包序

  • 都没有连接的概念, 你想发你就丢出去

DNS

没有连接自然也没有握手, UDP甚至是没有握手的, 就直接丢出去了, 也正是因为没有握手这个特点, 它成了DNS的一个主要选项, 我们在DNS里面主要讲究的就是一个效率, 如果TCP的话要搞三次握手, 查域名服务器还要三次握手(1.5RTT)算上延时时间很长了, 关键是如果上一级域名服务器没有, 那还要继续向上爬, 那就又是一个1.5RTT, 因此对于一些冷门域名这还是非常浪费时间的.

用UDP查DNS也有自己的问题, DNS默认应答消息长度是512, 如果查询结果长度超过512多出来的部分不会拆成两个包而是直接丢弃, 因此DNS规定如果包丢了, 或者消息不完成整, 就会用TCP重试

Previous7. [WIP]拥塞控制@tcp调优Next9. 怎么又是socket又是tcp

Last updated 4 years ago

Was this helpful?