【发布时间】:2020-07-04 02:36:00
【问题描述】:
SOCK_STREAM 互联网套接字是否总是使用 TCP?
而SOCK_DGRAM 总是使用UDP?
也就是说,这些对的元素之间是否存在一一对应的关系:
-
SOCK_STREAM& TCP -
SOCK_DGRAM& UDP
?
【问题讨论】:
标签: sockets unix network-protocols
SOCK_STREAM 互联网套接字是否总是使用 TCP?
而SOCK_DGRAM 总是使用UDP?
也就是说,这些对的元素之间是否存在一一对应的关系:
SOCK_STREAM & TCPSOCK_DGRAM & UDP?
【问题讨论】:
标签: sockets unix network-protocols
SOCK_STREAM 仅表示套接字是字节流。正是SOCK_STREAM 与IPPROTO_TCP 的组合创建了一个TCP 套接字,因为TCP 使用字节流。
SOCK_DGRAM 只是表示套接字使用数据报。正是SOCK_DGRAM 与IPPROTO_UDP 的组合创建了一个UDP 套接字,因为UDP 使用数据报。
当您在 protocol 参数设置为 0 的情况下调用 socket() 时,IPPROTO_TCP 是 SOCK_STREAM 的默认值,IPPROTO_UDP 是 默认值 > 为SOCK_DGRAM。但是没有什么可以阻止其他套接字协议在需要时使用SOCK_STREAM 或SOCK_DGRAM。例如,在某些平台上,您可以使用 IPPROTO_ICMP 和 SOCK_DGRAM 来替代使用 IPPROTO_ICMP 和 SOCK_RAW(SOCK_RAW 需要管理员权限,但 SOCK_DGRAM 不需要)。
【讨论】: