【网络编程】学习笔记--02 套接字类型与协议设置

首先要清楚什么是协议(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)

 

上一篇:javax.net.ssl.SSLException: Received fatal alert: protocol_version)


下一篇:Web前端常见的英文缩写