• 【TCP/IP网络编程】:02套接字类型与协议设置


    本篇文章主要介绍创建套接字函数相关的3个输入参数的含义,它们最终确定了套接字通信所采用的协议。同时,也简单对比了TCP和UDP传输方式的区别。

    什么是协议?协议是对话中使用的通信规则,而在计算机领域则可解释为“计算机间对话的通信规则”。简言之,协议就是为了完成数据交换而约定的规则。

    //创建套接字
    #include <sys/socket.h>
    
    int socket(int domain, int type, int protocol);
        -> 成功时返回文件描述符,失败时返回-1

      domain  套接字中使用的协议族信息

      type  套接字数据传输的类型信息

      protocol 计算机间通信使用的协议信息

    协议族(Protocol Family)

    协议族的类型信息分类如下,其中常用的如IPv4协议族信息PF_INET及IPv6协议族信息PF_INET6等

    协议族类型

    套接字类型

    套接字类型指的是套接字通信的数据传输方式,常用的套接字类型有两种,即TCP传输类型SOCKET_STREAM,UDP传输类型SOCKET_DGRAM。书中举例的两幅漫画形象地解释了TCP和UDP数据传输的差异:

     TCP传输类型

    上面提到了面向连接的套接字的一些特点,其中,比较容易验证的是第三点--传输的数据不存在数据边界,只需要调整通信双方write和read的次数不一致即可。那这一点又是如何做到的呢?-->收发数据的套接字内部有缓冲区,简言之就是字节数组。通过套接字传输的数据会保存到该字节数组中,只要不超出该字节数组的容量,则可待该字节数组填满之后通过一次read操作读取全部内容。

    那如果套接字缓冲区已满是否意味着会发生数据丢失?并不会。由于面向连接套接字的安全机制,如果套接字缓冲区满,则传输端将停止传输;并且根据接收端的状态传输数据,如果传输出错还会提供重传服务。

    TCP:“可靠、有序、基于字节的面向连接的数据传输方式”

    UDP传输类型

     面向消息的套接字传输则恰好相反。其中,存在数据边界的特性意味着接受和传输数据的次数必须保持一致。

    UDP:“不可靠、无序、基于报文的无连接的数据传输方式”

    协议的最终选择

    socket函数的第三个参数protocol确定了socket通信的最终协议。通常我们并不需要关注该参数,因为只要前两个参数确定,第三个参数便可唯一确定。此时只需将该参数置0即可,如IPv4协议族+TCP传输类型可确定第三个参数只能为IPPROTO_TCP;而IPv4协议族+UDP传输类型可确定第三个参数只能为IPPROTO_UDP。只有当同一协议族中存在多个数据传输方式相同的协议时,需特殊处理。

  • 相关阅读:
    python中matplotlib所绘制的图包含了很多的对象
    pd.concat()命令
    Java设计模式——外观模式
    Java设计模式——桥接模式
    Java基础面试
    java web解决表单重复提交
    Servlet 工作原理解析
    Mysql日期函数
    解决多个下拉框动态级联初始化问题
    window.parent与window.opener、window.showModalDialog的区别 opener和showModalDialog刷新父页面的方法
  • 原文地址:https://www.cnblogs.com/Glory-D/p/11825819.html
Copyright © 2020-2023  润新知