协议:计算机对话的通信规则,简而言之是为了完成数据交换而定好的约定。
#include<sys/socket.h>
int socket(int domain, int type,int protocol);
//domian使用的协议族信息,type传输类型,protocol计算机间通信使用的协议信息
协议族(Protocol Family)
套接字类型指的是套接字的数据传输方式
1.面向连接的套接字(SOCK_STREAM)
特点:传输过程中数据不会丢失;按序传输数据,传输的数据不存在数据边界
传输数据的计算机通过3次调用write函数传递100字节数据,但接收数据计算机只通过1次read函数调用就接收全部的100个字节。
收发数据的套接字内部有缓冲(buffer),即字节数组。通过套接字传输的数据将保存到该数组。因此,收到数据不意味着马上调用read函数。只要数组不超过数组容量,则可能在数据填充满缓存后通过1次read函数读取全部,也可能分多次读取。因此,面向连接的套接字不存在数据边界。
总结:面向连接的套接字,一一对应,是可靠的,有序的,基于字节的。
2.面向消息的套接字(SOCK_DGRAM)
可比喻为摩托车快递,特点:
- 强调快速传输而非有序传输
- 传输数据可能会丢失也可能损毁
- 传输数据有数据边界
- 限制每次传输数据的大小