TCPIP网络编程(尹圣雨)

书: https://pan.baidu.com/s/1LWWovU7IScpiddLrDhjl1w?pwd=pc5n
笔记如下:

  1. 套接字(Socket)基础:TCP/IP网络编程的核心是套接字,分为流式套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。
  2. TCP服务器流程
  • socket() 创建套接字
  • bind() 绑定IP和端口
  • listen() 进入监听状态
  • accept() 接受客户端连接
  • read()/write() 通信
  • close() 关闭连接
  1. TCP客户端流程
  • socket() 创建套接字
  • connect() 连接服务器
  • read()/write() 通信
  • close() 关闭连接
  1. UDP通信:无连接协议,使用sendto()recvfrom()直接收发数据。
  2. 地址处理函数
  • inet_addr() 将点分十进制IP转换为32位整数
  • inet_ntoa() 将网络字节序IP转换为字符串
  • htons()/ntohs() 主机与网络字节序转换
  1. 多进程服务器:通过fork()创建子进程处理多个客户端连接。
  2. 进程间通信:使用管道(pipe)、消息队列等实现父子进程同步。
  3. I/O多路复用
  • select() 监控多个文件描述符
  • poll() 改进的select
  • epoll() Linux高性能I/O复用机制
  1. 信号处理
  • SIGCHLD 回收子进程
  • SIGPIPE 处理断开的管道
  1. 套接字选项
    • SO_REUSEADDR 允许重用本地地址
    • SO_KEEPALIVE 保持连接活性
  2. 超时设置:通过setsockopt()设置SO_RCVTIMEOSO_SNDTIMEO
  3. 广播(Broadcast):UDP特有的SO_BROADCAST选项实现局域网广播。
  4. 多播(Multicast):使用IP_ADD_MEMBERSHIP加入多播组实现一对多通信。
  5. 线程安全:多线程服务器中需使用互斥锁(mutex)保护共享资源。
  6. HTTP服务器实现:解析HTTP请求报文(GET/POST),构造响应报文(状态行+头部+正文)。
  7. 域名解析gethostbyname()getaddrinfo()实现域名到IP的转换。
  8. 非阻塞I/O:通过fcntl()设置O_NONBLOCK标志实现非阻塞套接字。
  9. 心跳机制:定时发送心跳包检测TCP连接活性。
  10. 协议设计:自定义应用层协议时需考虑报文格式(长度+内容)、序列化等。
  11. 性能优化
    • 减少数据拷贝(零拷贝技术)
    • 连接池管理
    • 批量数据传输

发表评论

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