【问题标题】:Does send() and recv() implement reliable data transfer(TCP protocol)?send() 和 recv() 是否实现可靠的数据传输(TCP 协议)?
【发布时间】:2017-10-08 03:31:57
【问题描述】:

我想知道,如果socket处于连接状态,SOCK_STREAM传输,send()和recv()之间发送的数据包是否做可靠的TCP协议?诸如 ACK 和 seq number 之类的东西是为了防止数据包丢失和正确性,还是我需要自己实现 TCP 协议?

还有,

如果 UDP 没有 connect() 和 SOCK_DGRAM,sendto() 和 recvfrom() 之间发送的数据包是 UDP 协议吗? (ACK、序列号或计时器...)

【问题讨论】:

  • 您可以将SOCK_STREAM 视为流。

标签: c sockets tcp udp


【解决方案1】:

不需要自己实现 TCP 或 UDP。

来自man 2 socket

SOCK_STREAM 提供有序、可靠、双向、基于连接的字节流。

SOCK_DGRAM 支持数据报(固定最大长度的无连接、不可靠消息)。

来自man 7 tcp

tcp_socket = socket(AF_INET, SOCK_STREAM, 0);

描述 这是 RFC 793、RFC 1122 和 RFC 2001 中定义的 TCP 协议与 NewReno 的实现 和 SACK 扩展。

来自man 7 udp

udp_socket = socket(AF_INET, SOCK_DGRAM, 0);

描述
这是 RFC 768 中描述的用户数据报协议的实现。

另请参阅man 7 socketman 2 sendman 2 recv

所有引用的手册页均来自“Linux Programmer's Manual”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2013-07-28
    • 2016-06-02
    • 2015-11-15
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多