zoukankan      html  css  js  c++  java
  • socket pro

    /etc/exports
    /tmp目录共享为任何人可以共享并可以进行读写操作

    /tmp  *(rw,no_root_squash)

    /home/test  192.168.1.*(rw)  *(ro)

    /etc/init.d/nfs-kernel-server  start

    showmount

    -a 参数一般在NFS server上使用,用来显示已经挂载在本机nfs目录客户端机器列表

    -e 显示指定的NFS server上export出来的目录

    linux自定义网络服务

    小的服务程序不经常使用的服务程序 被集成到服务器管理程序中inetd,xinetd

    extended internet services daemon 扩展的internet 服务daemon

    控制internet服务的应用程序

    socket_type 网络套接字类型 流数据包streamTCP dgramUDP seqpacket(可靠有序数据报)

    进行自定义网络服务配置

    #default:on

    #description:The vsftpd server serves vsftpd sessions

    service vsftpd

    {

      disable = no

      port  = 21

      socket_type  = stream

      protocol  = tcp

      user = root  

    server = /usr/sbin/vsftpd

    type = unlisted

    wait  = no

    }

    TCP网络编程

    socket addree struct 对内核和应用层之间的内存数据传递方式

    TCP套接字服务器和客户端编程框架

    socket(),bind(),listen(),accept(),connect(),close()数据读取发送

    read(),write()

    对信号的截取sigpipe sigintsignal

    套接字地址结构 address struct

    不同的地址结构定义有不同的

    进行套接字编程 基本的数据结构

    套接字的地址结构定义

    socket address struct

    进行套接字编程 指定套接字地址参数

    不同的protocol family 不同的地址结构

    地址结构通常以sockaddr_

    通用的套接字数据结构

    struct sockadrr {

      sa_family_t sa_family;

      char  sa_data[14]; /*协议簇数据*/

    }

    实际使用的套接字数据结构

    套接字数据结构

    网络程序设计  套接字函数都用这个结构作为参数

    int bind(int socketfd,  /*套接字文件描述符*/

        const struct sockaddr *my_addr;  /*套接字地址结构*/

        socketlen_t  addrlen;  /*套接字地址结构的长度*/

    )

    typedef unsigned short ;

    struct socketaddr_in { 以太网套接字地址结构

      u8  sin_len;  /*结构struct sockaddr_in length*/

      u8  sin_family;  /*地址簇AF_INET address_family*/

      u16  sin_port;  16位端口号,网络字节序

      struct in_addr sin_addr;  //Ip地址32biy 4Bytes;

      char sin_zero[8];

    }

    有一个ip地址

    struct in_addr sin_addr ip地址

    struct in_addr {

      u32  s_addr;

    };

    sin_len 无符号字符类型,表示结构struct sockaddr_in

    unsigned char

    struct in_addr

    用户层与内核层进行交换过程 

    向内核传入数据,从内核 读出数据Accept(),recv()

    TCP网络编程架构

    TCP网络编程架构模式  服务器  客户端

    服务器模式创建服务程序,等待客户端用户连接,接收到用户的连接请求,根据用户的请求进行处理

    客户端模式根据服务器的地址和端口进行连接

    向服务器发送并对服务器的响应进行数据处理

    服务器端程序设计模式

    Tcp端连接的服务器模式程序设计流程

    服务器模式的程序设计流程

    套接字初始化

    套接字与端口绑定 ,设置服务器的监听连接,接受客户端连接  接收和发送数据并进行数据处理 及数据传输完成的套接字close()

    TCP连接的服务器模式程序设计流程

    套接字初始化(socket()),套接字与端口绑定(bind()),设置服务器的侦听连接(listen()),接受客户端连接(accept()),接收和发送数据(read(),write()),close()

    套接字初始化过程中 根据用户对套接字的需求

    确定套接字的选项 网络类型,协议类型和具体的协议标号

     根据用户需求 生成一个套接字文件描述符

    套接字与端口的绑定,套接字与地址结构进行绑定  网络程序设计的时候  套接字所代表的Ip地址端口号及协议类型

    服务器需要满足多个客户端的连接请求,服务器在某个时间仅能处理有限个数的客户端连接请求,服务器需要设置服务器端排队队列的长度

    服务器监听 限制客户端中等待服务器处理连接请求的队列长度

    服务器接收客户端请求可以从套接字文件

    从套接字文件描述符中读取数据或者向文件描述符中发送数据

    客户端程序设计模式

    套接字初始化(socket()),连接服务器(connect()),读写网络数据(read(),write()).进行数据处理最后关闭close()

    客户端程序设计模式流程与服务器的处理模式流程

    客户端在套接字初始化  不可进行地址绑定   而是直接连接服务器端

    客户端连接服务器的处理过程中,客户端根据用户设置的服务器地址端口号 等parameters与特定的服务器程序进行通信

    客户端与服务器的交换过程

    客户端与服务器在连接,读写数据,关闭连接   客户端连接,服务器接收  进行three way handshake 建立TCP连接   进行数据交换

    close(fd);

    创建网络插口函数socket()

    网络程序设计中套接字系统调用socket()函数用来获得文件描述符

    协议簇domain,协议类型 type,协议编号为protocol的套接字文件描述符,函数调用成功,返回一个表示这个套接字的文件描述符,失败返回-1

    #include <sys/types.h>

    #include <sys/socket.h>

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

    domain设置网络通信的域,通信协议簇,sys/socket.h PF_INET 地址簇,协议簇

    地址簇  协议簇  在头文件sys/socket.h AF_INET,PF_INET;

    domain PF_UNIX,PF_LOCAL PF_INET ipv4 internet协议

    PF_INET6协议

    PF_IPX novell

    PF_NETLINK   netlink 内核用户界面程序

    PF_PACKET 底层

    PF_appletalk

    函数socket() type设置套接字通信类型

    流式套接字sock_STREAM,sock_dgram数据包

    sock_stream tcp连接,提供序列化的,可靠的,双向连接的字节流,支持带外数据传输

    sock_dgram upd连接,无连接状态的消息

    sock_seqpacket序列化包  提供一个序列化可靠双向的基于连接的数据传输通道  数据长度定长 每次调用读系统调用时提供原始网络协议访问

    sock_RDM 提供可靠的数据报文

    某些协议只有特定类型 protocol 仅  sock_stream

    类型为sock_stream 套接字 连接使用connect 进行

    read(),write()进行数据传输 connect

    sock_dgram raw sendto() recvfrom接收数据

    接收来自指定ip地址的发送方数据

    sock_packaet专用数据包,直接从设备驱动接收数据

    errno()stderr errno.h

    fprintf errorno(errno);

    进程文件表溢出已经达到进程可以同时打开的文件数上限

    enfile 已经达到系统允许打开的文件数量

    domain(AF_INET),sock_stream

    struct socket{

    socket_state  state;  /*socket状态*/

    unsigned long  flags;  

    const struct proto_ops *ops;

    struct fasync_struct  *fasync_list;

    struct  file  *file

    struct sock  *sk;

    wait_queue_head_t  wait;

    }

    建立套接字文件描述符,需要对套接字进行地址及端口的绑定,数据的接收和发送

    addlen struct sockaddr

    int bind(int sockfd,const struct sockaddr *my_addr,socklen_t addlen);

    bind函数将长度为addlen struct sockadd 类型参数

    int bind(int sockfd,const struct sockaddr *my_addr,socklen_t addrlen);

    int bind(int sockfd,const struct sockaddr *my_addr,socklen_t addrlen);

    socklen_t addrlen;

    int sockfd,const struct sockaddr *my_addr;

    const struct sockaddr *my_addr 地址 端口ip地址信息;进行地址绑定 地址结构中的ip地址端口

    sizeof(struct sockaddr)

    struct sockaddr_un {

    sa_family_t sun_family;  /*协议簇,AF_UNIX*/

    char sun_path[UNIX_PATH_MAX];

    }

  • 相关阅读:
    jmeter巧用自增长型变量
    jmeter实现一次登录,多次业务请求(不同线程组间共享cookie和变量)
    jmeter实现IP欺骗
    基于jmeter+ant实现的接口自动化测试
    基于Robot Framework的接口自动化测试
    至少与至少
    code+7正式赛划水记+HardA~C题解
    code+7彩蛋题题解
    开发一个博客园系统
    beautifulSoup模块
  • 原文地址:https://www.cnblogs.com/ruiy/p/4566960.html
Copyright © 2011-2022 走看看