• 五十三、linux 编程——TCP 编程基本介绍


    53.1 socket 套接字

    53.1.1 介绍

    • Socket(套接字)是一种通讯机制,它包含一整套的调用接口和数据结构的定义,它给应用进程提供了使用如 TCP/UDP 灯网络协议进行网络通讯的手段
    • Linux 中的网络编程通过 socket 接口实现,socket 既是一种特殊的 IO,提供对应的文件描述符。
    • 一个完整的 socket 都由一个相关描述{协议, 本地地址, 本地端口, 远程地址, 远程端口};每一个 socket 有一个本地的唯一 socket,由操作系统分配

      

    53.1.2 创建 socket

      

    • 函数说明:
      • socket 创建在内核中,若创建成功返回内核文件描述表中的 socket 描述符
    • 函数参数:
      • domain:
        • AF_INET:IPV4 因特网域
        • AF_INET6:IPV6 因特网域
        • AF_UNIX, AF_LOCAL:UNIX 域,本地域
        • AF_NETLINK:内核用户接口设备
        • AF_UN SPEC:未指定
      • type:指定采用何种协议
        • SOCK_STREAM:流式的套接字可以提供可靠的、面向连接的通讯流。它使用了 TCP 协议。TCP 保证了数据传输的正确性和顺序性。
        • SOCK_DGRAM:数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。使用数据报协议 UDP 协议
        • SOCK_RAW:原始套接字允许对低层协议如 IP或 ICMP 直接访问,主要用于新的网络协议实现的测试灯
        • SOCK_SEQPACKET:长度固定、有序、可靠的面向链接报文传递
      • protocol:
        • 通常为0, 表示按给定的域和套接字类型选择默认协议
    • 返回值:成功,则返回描述符;失败,则返回 -1

    53.2 字节序

    53.2.1 字节序介绍

    • 不同体系结构的主机使用不同的字节序存储器中保存多字节整数。字节存储顺序不同,有的系统是高位在前,低位在后,而有的系统是低位在前,高位在后
    • 字节序分为大端和小端字节序
    • 网络协议使用网络字节序,即大端字节序

      

    53.2.2 字节序转换函数

      网络传输的数据大家是一定要统一顺序的。所以对于内部字节表示顺序和网络字节顺序不同的机器,就一定要对数据进行转换。

      

    53.3 地址结构

    53.3.1通用地址结构

      #include <sys/socket.h>

      

      __SOCKADDR_COMMON (sa_) 等价于  unsigned short sa_family

    • sa_data 包含了一些远程电脑的地址、端口和套接字的数目,它里面的数据是杂融在一起的
    • sa_family 一般来说,IPV4 使用 AF_NET
    • 在传递给需要地址结构的函数时,把指向该结构的指针转换成(struct sockaddr *)传递进去

     53.3.2 因特网地址结构

      IPV4 地址

      

      

    • sin_:sin_family,Internet 地址族如 AF_INET(主机字节序)
    • sin_port:端口号,16位值(网络字节序)
    • sin_addr:Internet 地址,32位 IPV4 地址(网络字节序)
    • sin_zero:填 0(为了格式对齐的填充位)
    • 上面两个数据类型是等效的,可以互相转换,通常使用 sockaddr_in 更为仿表

     53.3.3 IPV4 地址族和字符地址间的转换

      

    • 函数功能:网络字节序转换成点十分制
    • 函数参数:
      • af:Internet 地址族,如 AF_INET
      • src:Internet 地址,32位IPV4 地址(网络字节序)
      • dst:地址字符串(点分十进制)指针
      • size:地址字符串大小
    • 返回值:成功,则返回地址字符串指针;出错,则返回 NULL

      

    • 函数功能:点十分制转换为网络字节序
    • 函数参数:
      • af:Internet 地址族,如 AF_INET
      • src:地址字符串(点分十进制)指针
      • dst:Internet 地址,32位IPV4 地址(网络字节序)
    • 返回值:成功,则返回 1;无格式返回0;出错,则返回 -1

    53.3.4 填写 IPV4 地址族结构案例

      

  • 相关阅读:
    设计模式-观察者模式
    获取ubuntu中软件包的有用地址
    vim 简单命令
    adb logcat 日志过滤
    shell编程——
    shell编程——参数传递
    Chromecast
    linux 广播
    【转】Git命令解说
    linux 多播
  • 原文地址:https://www.cnblogs.com/kele-dad/p/10349502.html
Copyright © 2020-2023  润新知