send()和recv()是否实现了可靠的数据传输(TCP协议)?

时间:2017-05-09 17:29:05

标签: c sockets tcp udp

我想知道如果socket与SOCK_STREAM传输处于连接状态,send()和recv()之间发送的数据包是否可以实现可靠的TCP协议?像ACK和seq号这样的东西可以防止数据包丢失和正确,或者我需要自己实现TCP协议?

此外,

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

1 个答案:

答案 0 :(得分:1)

需要自己实施TCP或UDP。

来自man 2 socket

  

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

     

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

来自man 7 tcp

  

tcp_socket = socket(AF_INET,SOCK_STREAM,0);

     

说明          这是使用NewReno在RFC 793,RFC 1122和RFC 2001中定义的TCP协议的实现          和SACK扩展。

来自man 7 udp

  

udp_socket = socket(AF_INET,SOCK_DGRAM,0);

     

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

另请参阅man 7 socketman 2 sendman 2 recv

所有引用的手册页都来自“Linux程序员手册”。