📘
Deuterium Wiki
  • Hello
  • Linux
    • cmd
      • du: 显式文件大小
      • seq: 生成序列
      • cat: 连接
      • cp: 复制
      • cd: 切换目录
      • mv: 移动
    • awk
      • 执行awk脚本
      • 删除空行
      • 个数统计
      • 文件的交集
      • 文件的差集
    • mysql
      • 删除重复数据
      • 导出数据不带标题
  • Reading
    • Novel
      • 《基督山伯爵》人物关系
    • Awesome CS Books
      • csapp-3e-homework-solution
        • 1. A Tour of Computer Systems
        • 2. Representing and Manipulating Information
          • 2.55 Compile and Run
          • 2.56 Another Try
          • 2.57 More show Procedures
          • 2.58 Check Little-Endian
          • 2.59 Bit Expressions
          • 2.60 Replace Byte
          • 2.61 More Bit Expressions
          • 2.62 Check Arithmetic Right Shift
          • 2.63 Logic & Arithmetic Right Shift
          • 2.64 Any Odd One
          • 2.65 Odd Ones
          • 2.66 Leftmost One
          • 2.67 Int Size is 32
          • 2.68 Lower One Mask
          • 2.69 Rotate Left
          • 2.70 Fits Bits
          • 2.71 Xbyte
          • 2.72 Copy Int
          • 2.73 Saturating Add
          • 2.74 Sub OK
          • 2.75 Unsigned High Prod
          • 2.76 calloc
          • 2.77 Multiple By Shifts
          • 2.78 Divide Power 2
          • 2.79 Mul3div4
          • 2.80 Three Fourths
          • 2.81 Generate Bits
          • 2.82 Signed and Unsigned
          • 2.83 Binary Floating Value
          • 2.84 Float Le
          • 2.85 Floating Point I
          • 2.86 Extend Precision
          • 2.87 Floating-Point II
          • 2.88 Floating-Point III
          • 2.89 Floating-Point IV
          • 2.90 fpwr2
          • 2.91 π
          • 2.92 Float Negate
          • 2.93 Float Absval
          • 2.94 Float Twice
          • 2.95 Float Half
          • 2.96 Float f2i
          • 2.97 Float i2f
        • 3. Machine-Level Representation of Programs
          • 3.58 Decode
          • 3.59 128-bit Multiply
          • 3.60 For Loop
          • 3.61 Conditional Data Transfer
          • 3.62 Switch I
          • 3.63 Switch II
          • 3.64 Multiple Dimension Array I
          • 3.65 Multiple Dimension Array II
          • 3.66 Multiple Dimension Array III
          • 3.67 Caller and Callee
          • 3.68 Alignment
          • 3.69 Struct
          • 3.70 Union
          • 3.71 fgets
          • 3.72 Variable-Size Stack
          • 3.73 Find Range I
          • 3.74 Find Range II
          • 3.75 Complex
      • tcpv1
        • ch01: Introduction
        • ch02: Link Layer
        • ch03: Internet Protocol
        • ch04: Address Resolutin Protocol
        • ch05: Reverse Address Resolution Protocol
        • ch06: Internet Control Message Protocol
        • ch07: Ping Program
        • ch08: Traceroute Program
        • ch09: IP Routing
        • ch10: Dynamic Routing Protocols
        • ch11: User Datagram Protocol
        • ch12: Broadcasting and Multicasting
        • ch13: Internet Group Management Protocol
        • ch14: The Domain Name System
        • ch15: Trivial File Transfer Protocol
        • ch16: Boostrap Protocol
        • ch17: Transmission Control Protocol
        • ch18: TCP Connection Establishment and Termination
        • ch 19: TCP Interactive Data Flow
        • ch20: TCP Bulk Data Flow
      • http
        • ch01: Overview of HTTP
        • ch02: URLs and Resources
        • ch03: HTTP Messages
        • ch04: Connection Management
        • ch05: Web Servers
        • ch06: Proxies
        • ch07: Caching
        • ch08: Integration Points
        • ch09: Web Robots
        • ch10: HTTP-NG
        • ch11: Client Identification and Cookies
        • ch12: Basic Authentication
        • ch13: Digest Authentication
        • ch14: Secure HTTP
        • ch15: Entities and Encodings
        • ch16: Internationalizated
        • ch17: Content Negotiation and Transcoding
        • ch18: Web Hosting
        • ch19: Publishing Systems
        • ch20: Redirections and Load Balancing
        • ch21: Logging and Usage Tracking
    • 提升认知
      • 《为什么需要生物学思维》
      • 《大话西方艺术史》
  • Mathematics
Powered by GitBook
On this page
  • MindMap
  • Introduction
  • UDP Header
  • UDP Checksum
  • IP Fragmentation
  • ICMP Unreachable Error (Fragmentation Required)
  • Determining the Path MTU Using Traceroute
  • Interaction Between UDP and ARP
  • ICMP Source Quench Error

Was this helpful?

  1. Reading
  2. Awesome CS Books
  3. tcpv1

ch11: User Datagram Protocol

UDP

Previousch10: Dynamic Routing ProtocolsNextch12: Broadcasting and Multicasting

Last updated 4 years ago

Was this helpful?

MindMap

11.UDP: User Datagram Protocol

Introduction

UDP面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报。

格式:

UDP Header

格式如下:

其中长度包含UDP header和UDP数据。

UDP Checksum

header里有一个16位的checksum,和IP的checksum只包含IP Header不同,UDP的checksum包含了UDP Header和UDP data。

这个checksum的计算逻辑和TCP是一样的。

需要注意的有:

  • UDP数据报的长度可以是奇数字节,但是校验和会在最后添加0来补充长度;

  • UDP datagram和TCP segment都有一个伪首部,加上了源IP、目的IP,等信息。

IP Fragmentation

把一份IP数据报分片以后,只有到达目的地才进行重新组装。

在分片时,除最后一片外,其他每一片中的数据部分(除IP首部外的其余部分)必须是8字节的整数倍。

需要注意的术语:

  • IP datagram:is the unit of end-to-end transmission at the IP layer (before fragmentation and after reassembly).

  • Packet: is the unit of data passed between the IP layer and the link layer. A packet can be a complete IP datagram or a fragment of an IP datagram.

一个分片的例子:

ICMP Unreachable Error (Fragmentation Required)

如果需要分片但是IP Header中设置了DF(don't fragment),就会产生这个错误。

格式:

Determining the Path MTU Using Traceroute

我们可以通过Traceroute程序来获得一条链路上的MTU。

思路是这样的:

  • 发送的分组设置不分片标志(DF);

  • 第一个分片的长度和出口MTU相等;

  • 每次收到ICMP Fragmentation Required错误时,就减小分组的长度;

  • 如果路由器返回的ICMP错误含有MTU值,就使用这个值作为下一个分组的长度;

  • 否则就自己确定一个长度;

  • 最后我们可以通过尝试有限次就能得到Path MTU了。

Interaction Between UDP and ARP

  • Most implementations keep only the last packet sent to a given destination while waiting for an ARP reply.

  • The IP layer must start a timer when the first fragment of a datagram appears.

  • Most Berkeley-derived implementations never generate the ICMP message here.

  • The first fragment, the one with an offset of 0 containing the UDP layer, was never received.

  • An implementation is not required to generated the ICMP error unless this first fragment has been received.

ICMP Source Quench Error

当一个系统接收数据报的速度比处理速度快时,就可能产生这个错误。

格式如下:

虽然会产生这个错误,但是接收者一般是忽略这个错误的。