首先要清楚什么是协议(protocol)?
简言之,协议就是为了完成数据交换而定好的约束。
回顾我们在《学习笔记 --01》中创建套接字socket中的代码:
#include<sys/socket.h> int socket(int domain,int type,int protocol) | |- domain 套接字中使用的协议族(Protocol Family)信息 |- type 套接字数据传输类型信息 |- protocol 计算机间通信中使用的协议信息
接下来我们将会根据该函数的参数进行具体展开讨论:
1.协议族(domain/Protocal Family):
这里我们通常会用PF_INET 意思为 IPv4互联网协议族
2.套接字类型(Type):
套接字类型指的是套接字的数据传输方式。
SOCK_STREAM:TCP(面向连接的套接字)。特点:传输过程中数据不会消失,按序传输数据,传输数据不存在边界
SOCK_DGRAM: UDP(面向消息的套接字)。特点:速度快,但无法避免损失,存在数据边界,数据边界意味着接收数据的次数应和传输次数相同
3.协议的最终选择(protocol):
其实传递前2个参数即可创建所需的套接字。所以大部分情况下可以向第三个参数传递0,除非遇到以下情况:
"同一协议族中存在多个数据传输方式相同的协议”
暨数据传输方式相同,但协议不同,此时需要通过第三个参数具体指定协议信息。
若是TCP的话,则为IPPROTO_TCP
若是UDP的话,则为IPPROTO_UDP
最终成果展示如下:
面向连接的套接字: int tcp_socket = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP) 面向消息的套接字: int udp_socket = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP)