LINUX网络编程第2版(宋敬彬)

书: https://pan.baidu.com/s/1hMg-9fMkkzntAfHoLymQMA?pwd=2tx9
笔记如下:

  1. TCP/IP协议栈分层:Linux网络协议栈分为应用层、传输层(TCP/UDP)、网络层(IP)、链路层(MAC)。
  2. Socket编程基础:使用socket()创建套接字,bind()绑定地址,listen()监听连接,accept()接受连接。
  3. TCP三次握手与四次挥手connect()触发SYN→SYN-ACK→ACK,close()触发FIN→ACK→FIN→ACK。
  4. UDP无连接通信:无需建立连接,直接使用sendto()recvfrom()发送/接收数据。
  5. 多进程并发服务器:父进程fork()子进程处理客户端请求,避免阻塞主进程。
  6. 多线程并发服务器:使用pthread_create()创建线程,提高并发性能。
  7. I/O多路复用(select/poll/epoll)
  • select():跨平台但效率低,受FD_SETSIZE限制。
  • epoll():Linux高效模型,支持水平触发(LT)和边缘触发(ET)。
  1. 非阻塞I/O:设置fcntl(fd, F_SETFL, O_NONBLOCK),避免read()/write()阻塞。
  2. 信号驱动I/O:通过SIGIO信号通知进程数据就绪,减少轮询开销。
  3. 原始套接字(Raw Socket):直接访问链路层或网络层数据包,用于抓包或自定义协议。
  4. 网络超时控制
    • setsockopt(fd, SO_RCVTIMEO, &timeout, sizeof(timeout))设置接收超时。
    • 使用alarm()select()实现超时检测。
  5. 广播与组播
    • 广播:setsockopt(fd, SO_BROADCAST, &on, sizeof(on))
    • 组播:setsockopt(fd, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq))加入组播组。
  6. 域名解析(DNS):使用getaddrinfo()gethostbyname()将域名转换为IP地址。
  7. IPv6编程AF_INET6地址族,struct sockaddr_in6结构体,支持双栈(IPv4/IPv6)。
  8. UNIX域套接字:本地进程间通信(IPC),使用AF_UNIX地址族,路径名绑定(如/tmp/sock)。
  9. 网络字节序转换htons()htonl()主机到网络序,ntohs()ntohl()网络到主机序。
  10. Socket选项设置
    • SO_REUSEADDR:允许地址复用。
    • TCP_NODELAY:禁用Nagle算法,降低延迟。
  11. 心跳机制:应用层定时发送心跳包检测连接存活,避免TCP Keepalive的局限性。
  12. SSL/TLS安全通信:使用OpenSSL库实现加密传输(SSL_new(), SSL_connect())。
  13. 高性能网络框架
    • Reactor模式:基于事件驱动(如libevent、libuv)。
    • Proactor模式:异步I/O(如Windows IOCP,Linux需模拟)。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注