我想知道如果socket与SOCK_STREAM传输处于连接状态,send()和recv()之间发送的数据包是否可以实现可靠的TCP协议?像ACK和seq号这样的东西可以防止数据包丢失和正确,或者我需要自己实现TCP协议?
此外,
如果没有带有SOCK_DGRAM的connect()的UDP,sendto()和recvfrom()之间发送的数据包是否执行了UDP协议? (ACK,序号或计时器......)
答案 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 socket
,man 2 send
和man 2 recv
。
所有引用的手册页都来自“Linux程序员手册”。