学习交流群:
Linux 学习交流群 610441700
说明:本系列文章并不能取代 《UNP》这本旷世之作,文章中难免有错误与不足之处,希望读者们遇到有疑问的地方可以加群互相交流,共同进步。写这一系列文章的目的有三个:一是为了提升自己对 linux 的理解,二是锻炼自己能够把知识点讲清楚,三是希望能更好的帮助基础薄弱的同学能够学习 UNP。
在学习 unix 网络编程前,请你务必对 《unix 环境编程》(缩写 apue)有所了解,因为网络编程中大量使用了 apue 中的基础知识。在本专栏中,不会对这些基础知识做重复讲解,如果你对 apue 不了解,可以先阅读这本书,或者移步至《Linux 环境编程学习笔记》,掌握这些基础知识。
关于博客中的程序。博客中使用大量的代码作为示例讲解,有时候为了能突出重点,删除了很多无关的条件判断,错误处理等过程。如果你想采用这些代码,务必自行扩充代码,让你的程序更加健壮。典型的比如你可能会见到申请内存不释放,有些函数可能会返回失败等等,你都需要自行去扩充。
一、网络协议基础
001 网络协议基础
002 网络编程学习环境搭建
003 第一次抓包
二、TCP 协议(基础)
004 TCP 协议(抓包)
005 TCP 协议(基础)
006 TCP 协议(序号和确认号)
007 TCP 协议(建立连接)
008 TCP 协议(断开连接)
009 TCP 协议(连接异常)
010 TCP 协议(MSS)
011 TCP 协议(状态机)
012 TCP 协议(TIME_WAIT 状态)
013 TCP 协议(FIN_WAIT2)
014 TCP 协议(RST)
015 TCP 协议(半打开)
016 TCP 协议(同时关闭)
三、TCP 协议(进阶)
017 TCP 协议(迟到的 ACK —— Windows )
018 TCP 协议(迟到的 ACK—— Linux)
019 TCP 协议(Nagle)
020 TCP 协议(滑动窗口——基础)
021 TCP 协议(滑动窗口——抓包分析)
022 TCP 协议(PSH 标志)
023 TCP 协议(紧急指针)
024 TCP 协议(拥塞控制)
025 TCP 协议(慢启动——观察)
026 TCP 协议(慢启动与拥塞避免)
027 TCP 协议(快重传与快恢复)
028 TCP 协议(超时与重传)
029 TCP 协议(持续定时器)
030 TCP 协议(糊涂窗口综合症)
031 TCP 协议(保活定时器)
四、简单的回射服务器
032 网络编程概述
033 基于 TCP 的回射服务器
034 异常处理(accept 返回前连接中止)
035 并发服务器(多进程)
036 多进程并发服务器(僵尸进程与信号处理)
037 多进程并发服务器(并发测试)
038 连接断开异常(服务器进程终止)
039 连接断开异常(引发 SIGPIPE)
040 连接异常(服务器崩溃)
041 连接异常(服务器崩溃后重启)
五、IO 多路复用
042 IO 多路复用
043 使用 select 改进客户端
044 批量输入异常
045 批量输入异常处理(shutdown 函数)
046 不要将 IO 复用与 stdio 混合
047 将多进程并发服务器改成 IO 复用
048 拒绝服务型攻击(Denial-of-Service Attacks)
049 使用 poll 改写服务器
050 使用 epoll 改写服务器
六、套接字选项
051 套接字选项(概述)
052 打印套接字选项
053 套接字选项(SO_REUSEADDR)
054 套接字选项(SO_LINGER)
055 套接字选项(TCP_NODELAY)
056 套接字选项(TCP_CORK)
057 其它套接字选项
七、基本的 UDP 套接字编程
058 基于 UDP 协议的回射服务器
059 UDP 数据报丢失
060 客户端也能做服务器?
061 面向连接的 UDP
062 UDP 与 connect
063 不可靠的 UDP 协议
064 TCP/UDP 混合服务器
八、高级 I/O 函数
065 高级 I/O 函数与技术
066 套接字超时(alarm)
067 套接字超时(select)
068 套接字超时(SO_RCVTIMEO 与 SO_SNDTIMEO)
069 recv 和 send 函数
070 散布读、聚集写
071 recvmsg 和 sendmsg 函数
072 套接字与标准I/O
九、Unix 域协议
073 进程间传递描述符(概述)
074 Unix 域套接字地址结构
075 Unix 域字节流回射服务器
076 抽象 unix 域套接字地址
077 Unix 域数据报回射服务器
078 socketpair 函数
079 辅助数据
080 进程间传递描述符(策略)
081 凭证的发送与接收
十、非阻塞 I/O
082 再议 select 版回射客户端
083 非阻塞 I/O
084 使用非阻塞 I/O 改写回射客户端
085 使用多线程改写回射客户端
086 时间获取客户端
087 非阻塞 connect
088 非阻塞 connect 版本的 web 客户程序
089 非阻塞 accept
十一、ICMP 协议
090 IP 协议(基础)
091 接收 IP 数据报
092 ICMP 协议(基础)
093 接收 ICMP 报文
094 ICMP 协议(回显请求与应答)
095 PING 命令实现
096 ICMP 协议(时间戳请求与应答)
097 ICMP 协议(端口不可达)
098 traceroute 程序
十二、广播
099 IPv4 地址
100 广播
101 指向子网的广播
102 受限广播地址
103 使用广播的 UDP 回射客户端
104 信号引起的竞争错误
十二、多播
105 多播(基础)
106 多播地址
107 使用多播的 UDP C/S 程序
十三、接口操作
108 网络接口
109 获取接口信息(一)
110 获取接口信息(二)
十四、高级 UDP 编程
111 UDP 数据报被截断
112 封装 recvFromFlags
待更新……