zoukankan      html  css  js  c++  java
  • Linux网络编程基础

    1. Linux网络模型

    ① OSI七层模型和Linux四层模型

    ② 各种协议之间的关系及在Linux模型中的位置

    ③ 协议封装:各种协议处于一种层层封装的关系

     

    (1)Ethernet

    (2)IP

      * IP主要有四个主要功能:数据传送,寻址,路由选择,数据报分段

      * IP的主要目的是为数据输入、输出网络提供基本算法,为高层协议提供无连接的传送服务

      * IP包由IP协议头和协议数据两部分构成

    (3)TCP

      * TCP是重要的传输层协议,目的是允许数据同网络上的其他节点进行可靠的交换。他能提供端口编号的译码,以识别主机的应用程序,而完成数据的可靠传输

      * TCP协议具有严格的内装差错检验算法确保数据的完整性

      * TCP是面向字节的顺序协议,这意味着包内每个字节被分配一个顺序号,并分配给每包一个顺序号

    (4)UDP

      * UDP也是传输层协议,他是无连接的不可靠的传输服务(执行速度比TCP快)

    2. Linux中的网络编程由Socket实现,Socket是一种文件描述符

    ① Socket三种类型

    (1)流式套接字(SOCK_STREAM):可以提供可靠的、面向连接的通讯,它使用TCP协议。TCP协议保证了数据传输的正确性和顺序性

    (2)数据报套接字(SOCK_DGRAM):定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的并且不保证可靠、无差错,它使用数据报协议UDP

    (3)原始套接字(SOCK_RAW):允许使用IP协议,主要用于新的网络的测试

    ② 网络地址

    (1)sockaddr:在头文件#include <sys/socket.h>中定义,缺陷是sa_data把目标地址和端口信息混在一起

    struct sockaddr {  
        sa_family_t sin_family;//地址族
        char sa_data[14]; //14字节,包含套接字中的目标地址和端口信息               
    }; 

    (2)sockaddr_in:在头文件#include<netinet/in.h>或#include <arpa/inet.h>中定义,该结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中

    struct sockaddr_in {
        sa_family_t        sin_family;        //地址族(Address Family)
        uint16_t        sin_port;        //16位TCP/UDP端口号
        struct in_addr    sin_addr;        //32位IP地址
        char            sin_zero[8];    //不使用
    };

    (3)sockaddr和sockaddr_in长度一样,都是16个字节,即占用内存大小一致,因此可以相互转化。sockaddr_in用于socket定义和赋值;sockaddr用于函数参数

    ③网络字节序(Big Endian【低位先传、高位后传】)

    (1)htons:把unsigned short(2byte)类型从主机序转换到网络序

    (2)htonl:把unsigned long(4byte)类型从主机序转换到网络序

    (3)ntohs:把unsigned short(2byte)类型从网络序转换到主机序

    (4)ntohl:把unsigned long(4byte)类型从网络序转换到主机序

    3. TCP网络设计

     https://www.cnblogs.com/wulei0630/p/9469276.html

    4. UDP网络设计

     https://www.cnblogs.com/wulei0630/p/9469407.html

    5. 循环服务器与并发服务器

    ① 循环服务器:服务器在同一时刻只能响应一个客户端的请求

    ② 并发服务器:服务器在同一时刻可以响应多个客户端的请求

    ③ 并发服务器的思想是每一个客户的请求并不由服务器直接处理,而是由服务器创建一个子进程来处理

     https://www.cnblogs.com/wulei0630/p/9479138.html

    6. Linux网络编程常用函数原型及参数与功能详细介绍

    ① int socket(int domain, int type, int protocol)

    功能:用来建立一个新的socket,也就是向系统注册、通知系统建立一通信端口

    domain:指定使用何种协议类型,AF_INET(Ipv4网络协议)、AF_INET6(Ipv6网络协议)

    type:套接字类型,SOCK_STREAM(提供双向连接且可靠的数据流)、SOCK_DGRAM(使用不连续不可信赖的数据包连接)

    protocol:用来指定socket所使用的传输协议编号,通常设为0即可

    ② int bind(int sockfd, const struct sockaddr* addr, socklent_t len)

    功能:将IP地址端口等信息绑定到套接字

    ③ int connect(int sockfd, cosnt struct sockaddr* addr, socklent_t len)

    功能:在请求服务的进程套接字(客户端)和提供服务的套接字(服务器)之间建立一个连接

    ④ int listen(int sockfd, int backlog)

    功能:等待连接

    ⑤ int accept(int sockfd, struct sockaddr* restrict addr, socklent_t * restrict len)

    功能:获得连接请求并建立连接

    ⑥ ssize_t send(int sockfd, const void* buf, size_t nbytes, int flag)

    功能:发送数据

    ⑦ ssize_t recv(int sockfd, void* buf, size_t nbytes, int flag)

    功能:接收数据

    ⑧ssize_t sendto(int sockfd, const void* buf, size_t nbytes, int flags, const struct sockaddr* destaddr, socklen_t destlen)

    功能:向指定的地址发送数据

    ⑨ ssize_t recvfrom(int sockfd, void* restrict buf, size_t len, int flags, struct sockaddr* restrict addr, socklen_t* restrict addrlen)

    功能:从指定的地址接收数据

  • 相关阅读:
    ZXing 生成、解析二维码图片的小示例
    OpenLDAP 2.4.x源码安装配置
    Elasticsearch & Kibana with Shield
    Kibana SSL
    Kibana 官方示例
    ELK 处理分析日志(nginx,syslog)
    Elasticsearch 负载均衡集群
    Elasticsearch REST API小记
    ELK 安装配置
    ELK 安装配置
  • 原文地址:https://www.cnblogs.com/wulei0630/p/9467343.html
Copyright © 2011-2022 走看看