我正在阅读这篇关于两个即发即弃消息(例如,在 UDP 下)和请求-响应通信(例如,在 TCP 下)之间的区别的文章。我遇到了这个:
响应者有一个地址,请求者使用它来处理请求。请求者通常不需要地址。我们一直在 NAT 的 HTTP 环境中看到这一点。
以上是对为什么两个即发即弃消息(一个从客户端发送,另一个从服务器发送)无法模拟通过用于请求-响应的协议进行通信的原因的答案。
如果响应者不知道将响应发送到哪个地址(因为请求者不需要提供地址),它如何实际响应?
我正在阅读这篇关于两个即发即弃消息(例如,在 UDP 下)和请求-响应通信(例如,在 TCP 下)之间的区别的文章。我遇到了这个:
响应者有一个地址,请求者使用它来处理请求。请求者通常不需要地址。我们一直在 NAT 的 HTTP 环境中看到这一点。
以上是对为什么两个即发即弃消息(一个从客户端发送,另一个从服务器发送)无法模拟通过用于请求-响应的协议进行通信的原因的答案。
如果响应者不知道将响应发送到哪个地址(因为请求者不需要提供地址),它如何实际响应?
接收到的任何 IP 数据包都具有发送方的 IP 地址。接收请求的主机将拥有可向其发送响应的 IP 地址。IP 数据包标头将同时具有源 IP 地址和目标 IP 地址。
对于 IPv4,IP 标头在RFC 792, Internet Protocol 中定义:
3.1. 互联网标头格式
Internet 标题的内容摘要如下:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Example Internet Datagram Header Figure 4.
对于 IPv6,IP 标头在RFC 3460, Internet Protocol, Version 6 (IPv6) Specification 中定义:
IPv6 报头格式
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| Traffic Class | Flow Label | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Length | Next Header | Hop Limit | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Source Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Destination Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
您链接到的论文试图提出一种通用方法,将即发即忘协议映射到请求-响应协议上,反之亦然。这会产生各种不太容易理解的含义,并且(恕我直言)对理解基本范式没有真正帮助。
我建议将 UDP 视为无连接、即发即弃的协议,将 TCP 视为面向连接的协议。查看一些使用 L4 协议的应用层协议,例如 HTTP 或 DNS。
当您看到实际使用时,事情通常更容易理解。一旦掌握了一般概念,就可以深入研究。或者换句话说:首先了解 L3/IP,然后查看一些应用协议以及它们如何与 L4 交互,然后再回到 TCP 和 UDP。UDP 非常简单,但 TCP 相当复杂,如果您还没有完全了解顶部和底部的内容,则很难掌握。