【问题标题】:What is the correct definition of a socket?套接字的正确定义是什么?
【发布时间】:2016-06-29 02:46:45
【问题描述】:

我已经阅读了关于套接字包含的相互矛盾的定义(主要在这个question 中)。

第一个定义是套接字由以下内容组成:

{源 IP 地址,源端口号}

第二个定义是套接字由以下组成:

{源IP地址、源端口号、目的IP地址、 目标端口号}

是否有官方文件或其他说明正确定义的内容?

另外,传输协议是否包含在套接字中?

【问题讨论】:

  • 不幸的是,您引用的问题的答案中有很多垃圾。

标签: sockets networking


【解决方案1】:

如果您查看 RFC,例如RFC 193, TRANSMISSION CONTROL PROTOCOL,你会看到定义:

多路复用:

允许单个主机内的多个进程使用 TCP 通信设施同时,TCP提供了一套 每个主机内的地址或端口。与网络连接 和来自互联网通信层的主机地址,这形成了一个 插座。一对套接字唯一地标识每个连接。那 也就是说,一个套接字可以同时用于多个连接。

【讨论】:

  • 传输协议是否被视为套接字的一部分?例如,这两个套接字是否被认为是有效的,或者我应该从中删除传输协议吗?:{TCP, 192.168.1.134, 1234}, {UDP, 192.168.1.21, 5678}.
  • 套接字是每个传输协议的。 TCP 80 端口与 UDP 80 端口不同。有些传输协议使用与端口不同的寻址,有些在传输层没有寻址。每个传输协议都独立于其他所有传输协议。
  • 如果我想说我有一个 IP 为 192.168.1.134 端口为 1234 的 TCP 套接字,我可以用以下方式表示这个事实:{TCP, 192.168. 1.134, 1234}?
  • 这取决于上下文。无论您使用哪种编程语言和/或库,您都需要发现这一点。
  • 不,我的意思是如果我想在纸上表示套接字,这是一种有效的书写方式,还是没有关于如何书写的约定?
【解决方案2】:

第一个定义适用于未连接的 TCP 或 UDP 套接字。

第二个定义适用于连接的 TCP 或 UDP 套接字。

【讨论】:

  • “第一个定义适用于未连接的UDP套接字”你的意思是未连接的TCP套接字吗?
  • 我的意思是两者兼而有之。
  • 我不知道你可以有一个连接的 UDP 套接字!我会检查一下。
  • 从技术上讲,定义还需要包含协议,因为 UDP 套接字与 TCP 套接字不同,并且在某些平台 (Windows) 上,可能有不同的套接字使用相同的 IP/端口只要它们的协议不同,就可以同时进行对。
猜你喜欢
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
相关资源
最近更新 更多