zoukankan      html  css  js  c++  java
  • Linux网络协议栈(一)——Socket入门(1)

    1、TCP/IP参考模型
    为了实现各种网络的互连,国际标准化组织(ISO)制定了开放式系统互连(OSI)参考模型。尽管OSI的体系结构从理论上讲是比较完整的,但实际上,完全符合OSI各层协议的商用产品却很少进入市场。而使用TCP/IP 协议的产品却大量涌入市场,几乎所有的工作站都配有TCP/IP协议,使得TCP/IP 成为计算机网络的实际的国际标准。


    2、套接字(socket) 
    socket是操作系统的重要组成部分之一,它是网络应用程序的基础。从层次上来说,它位于应用层,是操作系统为应用程序员提供的API,通过它,应用程序可以访问传输层协议。
    1、socket 位于传输层协议之上,屏蔽了不同网络协议之间的差异;
    2、socket是网络编程的入口,它提供了大量的系统调用,构成了网络程序的主体;
    3、在Linux系统中,socket属于文件系统的一部分,网络通信可以被看作是对文件的读取,使得我们对网络的控制和对文件的控制一样方便。

    2.1、套接字地址
    在传输层上,通信端点可由Internet上3个参数描述:所用的协议、IP地址和端口号。这些内容由sockaddr描述:

    复制代码
    //usr/include/sys/socket.h
    typedef unsigned short    sa_family_t;
    //通用socket地址
    struct sockaddr {
        sa_family_t    sa_family;    /* address family, AF_xxx,协议簇*/
        char        sa_data[14];    /* 14 bytes of protocol address    */
    };

    //usr/include/netinet/in.h
    //INET地址簇的socket地址
    struct in_addr {
                        __u32 s_addr;
    };
    struct sockaddr_in   {
       sa_family_t            sin_family;      /* Address family: AF_INET */
       unsigned short int     sin_port;        /* Port number,端口*/
       struct in_addr         sin_addr;        /* Internet address,IP地址*/

       /* Pad to size of 'struct sockaddr' . */
       unsigned char sin_zero[sizeof (struct sockaddr) -
                              sizeof (sa_family_t) -
                              sizeof (uint16_t) -
                              sizeof (struct in_addr)];
    };
    复制代码

    Linux 支持的套接字地址族:

    套接字地址族

    描述

    UNIX

    UNIX 域套接字

    INET

    通过 TCP/IP 协议支持的 Internet 地址族

    AX25

    Amater radio X25

    APPLETALK

    Appletalk DDP

    IPX

    Novell IPX

    X25

    X25

    Linux 所支持的BSD套接字类型:

           BSD 套接字类型

     描述

    流(stream)

    这种套接字提供了可靠的双向顺序数据流,可保证数据不会在传输过程中丢失、破坏或重复出现。流套接字通过 INET 地址族的 TCP 协议实现。

    数据报(datagram)

     这种套接字也提供双向的数据传输,但是并不对数据的传输提供担保,也就是说,数据可能会以错误的顺序传递,甚至丢失或破坏。这种类型的套接字通过 INET 地址族的UDP 协议实现。

    原始(raw)

     利用这种类型的套接字,进程可以直接访问底层协议(因此称为原始)。例如,可在某个以太网设备上打开原始套接字,然后获取原始的 IP 数据传输信息。

    可靠发送的消息

     和数据报套接字类似,但保证数据被正确传输到目的端。

    顺序数据包

     和流套接字类似,但数据包大小是固定的。

    数据包(packet)

     这并不是标准的 BSD 套接字类型,它是 Linux 专有的BSD 套接字扩展,可允许进程直接在设备级访问数据包。

      2.2、套接字操作
    套接字(更确切的说是BSD套接字)为应用程序提供了基本的API,这些API是编写网络应用程序的基础。

     
     
  • 相关阅读:
    积水路面Wet Road Materials 2.3
    门控时钟问题
    饮料机问题
    Codeforces Round #340 (Div. 2) E. XOR and Favorite Number (莫队)
    Educational Codeforces Round 82 (Rated for Div. 2)部分题解
    Educational Codeforces Round 86 (Rated for Div. 2)部分题解
    Grakn Forces 2020部分题解
    2020 年百度之星·程序设计大赛
    POJ Nearest Common Ancestors (RMQ+树上dfs序求LCA)
    算法竞赛进阶指南 聚会 (LCA)
  • 原文地址:https://www.cnblogs.com/xumaojun/p/8533229.html
Copyright © 2011-2022 走看看