SOCK_DGRAM 和 SOCK_STREAM 是什么?

2021-12-28 00:00:00 sockets tcp protocols c++

我刚刚遇到一个奇怪的事情,我看到应用程序默认情况下它们使用 SOCK_STREAM 函数.为什么会这样?这是 SOCK_STREAM 只是创建多个流吗?或者它是可用于创建 TCP 流的标准 SOCK_STREAM 函数?

I just came across this strange thing I got to see application is that by default they use SOCK_STREAM function. Why is it so? Is this SOCK_STREAM just creating multiple streams? Or is it the standard SOCK_STREAM function available for creating TCP stream(s)?

我认为 tsunami 是基于 UDP 的,但仍然具有一些类似于 TCP 的功能,例如TCP公平性、友好性等

I thought tsunami is based on UDP, but still having some features like that of TCP, e.g. TCP fairness, friendlyness, etc.

有人可以对这个问题有所了解吗?我对此完全困惑.

Could somebody please shed some light on this issue? I am totally confused over this.

推荐答案

TCP 几乎总是使用 SOCK_STREAM 而 UDP 使用 SOCK_DGRAM.

TCP almost always uses SOCK_STREAM and UDP uses SOCK_DGRAM.

TCP (SOCK_STREAM) 是一种基于连接的协议.连接建立并进行对话,直到连接被其中一方或网络错误终止.

TCP (SOCK_STREAM) is a connection-based protocol. The connection is established and the two parties have a conversation until the connection is terminated by one of the parties or by a network error.

UDP (SOCK_DGRAM) 是一种基于数据报的协议.您发送一个数据报并得到一个回复??,然后连接终止.

UDP (SOCK_DGRAM) is a datagram-based protocol. You send one datagram and get one reply and then the connection terminates.

  • 如果您发送多个数据包,TCP 承诺按顺序传送它们.UDP 没有,所以接收者需要检查它们,如果命令事项.

  • If you send multiple packets, TCP promises to deliver them in order. UDP does not, so the receiver needs to check them, if the order matters.

如果 TCP 数据包丢失,发送方可以知道.UDP 并非如此.

If a TCP packet is lost, the sender can tell. Not so for UDP.

UDP 数据报有大小限制,从内存中我认为是 512字节.TCP 可以发送比这更大的块.

UDP datagrams are limited in size, from memory I think it is 512 bytes. TCP can send much bigger lumps than that.

TCP 更健壮一点,并进行更多检查.UDP是阴影重量更轻(计算机和网络压力更小).

TCP is a bit more robust and makes more checks. UDP is a shade lighter weight (less computer and network stress).

选择适合您与其他计算机交互方式的协议.

Choose the protocol appropriate for how you want to interact with the other computer.

相关文章