学习交流群:
Linux 学习交流群 610441700
说明:本系列文章并不能取代 《UNP》这本旷世之作,文章中难免有错误与不足之处,希望读者们遇到有疑问的地方可以加群互相交流,共同进步。写这一系列文章的目的有三个:一是为了提升自己对 linux 的理解,二是锻炼自己能够把知识点讲清楚,三是希望能更好的帮助基础薄弱的同学能够学习 UNP。
在学习 unix 网络编程前,请你务必对 《unix 环境编程》(缩写 apue)有所了解,因为网络编程中大量使用了 apue 中的基础知识。在本专栏中,不会对这些基础知识做重复讲解,如果你对 apue 不了解,可以先阅读这本书,或者移步至《Linux 环境编程》,掌握这些基础知识。
此博客的主要参考书:《unix 网络编程》、《tcp/ip 详解》卷一、《计算机网络》第五版、《CCNA 学习指南》。我不希望读者只看博客不看书,如果你只看博客,你学到的知识也只是我掌握的一部分;博客的初衷只是给你一个引导,一份入门教程。最佳的学习方式是根据博客的引导,认真把 unp 和 tcp/ip 详解读完,我相信你的水平一定会超过我。另外,如果你在读书的过程中发现对部分知识点的理解和我不一致,可以直接在文章下面留言,我希望这个系列的文章是大家共同完成的结果,而不是靠我一个人。
关于博客中的程序。博客中使用大量的代码作为示例讲解,有时候为了能突出重点,删除了很多无关的条件判断,错误处理等过程。如果你想采用这些代码,务必自行扩充代码,让你的程序更加健壮。典型的比如你可能会见到申请内存不释放,有些函数可能会返回失败等等,你都需要自行去扩充。
相关工具和源码地址:
Github: https://github.com/ivanallen/unpGitee: https://gitee.com/ivan_allen/unp001 网络协议基础 002 网络编程学习环境搭建 003 第一次抓包
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 协议(同时关闭)
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 连接异常(服务器崩溃后重启)
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 其它套接字选项
058 基于 UDP 协议的回射服务器 059 UDP 数据报丢失 060 客户端也能做服务器? 061 面向连接的 UDP 062 UDP 与 connect 063 不可靠的 UDP 协议 064 TCP/UDP 混合服务器
065 高级 I/O 函数与技术 066 套接字超时(alarm) 067 套接字超时(select) 068 套接字超时(SO_RCVTIMEO 与 SO_SNDTIMEO) 069 recv 和 send 函数 070 散布读、聚集写 071 recvmsg 和 sendmsg 函数 072 套接字与标准I/O
073 进程间传递描述符(概述) 074 Unix 域套接字地址结构 075 Unix 域字节流回射服务器 076 抽象 unix 域套接字地址 077 Unix 域数据报回射服务器 078 socketpair 函数 079 辅助数据 080 进程间传递描述符(策略) 081 凭证的发送与接收
082 再议 select 版回射客户端 083 非阻塞 I/O 084 使用非阻塞 I/O 改写回射客户端 085 使用多线程改写回射客户端 086 时间获取客户端 087 非阻塞 connect 088 非阻塞 connect 版本的 web 客户程序 089 非阻塞 accept
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 获取接口信息(二)
111 UDP 数据报被截断 112 封装 recvFromFlags 113 给 udp 增加可靠性(一) 114 给 udp 增加可靠性(二) 115 并发的 UDP 服务器
待更新……