0%

网络编程笔记

网络编程

大小端

大端:高位存在低地址,低位存在高地址。

小端:高位存在高地址,低位存在低地址。

大小端和CPU有关。

现代PC大多采用小段,所以小端字节序又被成为主机字节序。而大端字节序又被成为网络字节序

基础API

TCP: recv, send

UDP: recvfrom, sendto(也可以面向连接)

通用: recvmsg, sendmsg

网络I/O

  • 管道:ini pipi(int fd[2]);
  • 双向管道:ini socketpair(int domain, int type, int protocol, int fd[2]);
  • 分散读:readv、集中写:writev
  • 两个文件描述符之间传递数据:sendfile
  • 进程间通信共享内存:申请mmap, 释放munmap
  • 两个文件描述符之间移动数据:splice
  • 两个管道文件描述符间复制数据:tee
  • 文件描述符的各种控制:fcntl

日志

  • syslog
  • rsyslogd

用户信息

  • getuid, geteuid, getgid, getegid, getpgid, getsid
  • setuid, seteuid, setgid, setegid, setpgid, setsid

服务器框架

TCP客户端与服务器工作流程

TCP客户端与服务器工作流程

I/O模型

  • 同步
    • 阻塞I/O
    • I/O复用
    • 信号驱动I/O
  • 异步

I/O复用

  • select,监听文件描述符。O(n)的无差别轮询,最大连接数1024。

  • poll,轮询文件描述符。也是O(n)的无差别轮询,但是它没有最大连接数的限制,原因是它是基于链表来存储的。

  • epoll。可以理解为event poll,不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的I/O事件通知我们。复杂度降低到了O(1)。

    • LT模式,ET模式
    • epoll_create
    • epoll_ctl
    • epoll_wait

ref.

事件处理模式

  • Reactor
  • Proactor

并发模式

  • 半同步/半异步 (变体)=> 半同步/半反应堆
  • 领导者/追随者

  • 内存池
  • 进程池
  • 线程池
  • 连接池

信号

  • kill
  • SIG_IGN
  • SIG_DFL
  • SIGHUP, SIGPIPE, SIGGURG

定时器

Linux定时方法

  1. socket方法
    • SO_RCVTIMEO
    • SO_SNDTIMEO
  2. SIGALRM
  3. I/O复用系统调用的超时参数

高性能定时器

  1. 时间轮
  2. 时间堆

I/O框架库 Libevent

Linux服务器必须处理的3件事

  1. I/O 时间
  2. 信号
  3. 定时器

基于Reactor的框架库

  1. 句柄
  2. 事件多路分发器
  3. 事件处理器和具体事件处理器
  4. Reactor
    • handle_event
    • register_handler
    • remove_handler

多进程

  • fork
  • exec 系列
  • 僵尸进程
    • wait
    • waitpid

进程间通信

  • 管道 (pipe)
  • 信号量 (Semaphore): P, V.
    • semget
    • semop
    • semctl
    • IPC_PRIVATE
  • 共享内存
    • shmget
    • shmat
    • shmdt
    • shmctl
  • 消息队列
    • msgget
    • msgsnd
    • msgrcv
    • msgctl

多线程

  1. LinuxThreads
  2. NPTL

创建

  • pthread_creatr
  • pthread_exit
  • pthread_join
  • pthread_cancel

线程间同步

  • POSIX信号量: sem_xxx
  • 互斥量: pthread_mutex_xxx
  • 条件变量: pthread_cond_xxx
  • 线程同步机制类: locker.h
  • 进程和线程: pthread_atfork
  • 线程和信号: pthread_sigmask

进程池和线程池

  • 随机算法、Round Robin、工作队列
  • 半同步/半异步进程池实现

Reference

  • 游双. Linux高性能服务器编程. 机械工业出版社
  • 徐晓鑫. 后台开发:核心技术与应用实践. 机械工业出版社