1. tcp是一种面向连接的、可靠的、基于字节流的运输层通信协议。用8位字节表示的数据流然后TCP把数据流分割成适当长度的报文段(受到链路层最大传送单元(MTU)的限制)。tcp为了保证不发生丢包,就给每一个字节一个序号,同时序号也保证数据的顺序,然后接手端对成功收到的字节发送一个ack确认;如果在合理的时间内没有发送ack确认信息,那么tcp会将数据重传。tcp会校验数据是否有错。
2. udp是一种不可靠的网络协议。主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
udp由于不能保证双方在线,所以,只有一方在线时(发送消息),另一方不会收到消息。
下面介绍socket当中的send、recv,sendto,recvfrom。
当使用TCP协议时,是双方建立在连接的基础上进行传输。一般使用send和recv来发送和接收。其实使用sendto,和recvfrom也可以,当sock用connect连接后,sendto和recvfrom函数中最后两个参数(发送/接收地址)会认为无效。
当使用UDP协议时,不是面向连接的。一般使用sendto,recvfrom来发送和接收。虽然udp协议不是面向连接的,但是在socket中,仍然可以用connect连接两个套接字,此时,我们也可以使用send,recv来发送和接收,发送和接收的地址就是connect连接的地址。
总结:send和recv是用于面向连接的套接字。
sendto和recvfrom可用于面向连接的套接字和非连接的套接字。只是当面向连接的套接字时,后两个表示目标地址的参数无效。