几个月上线了《JVM 字节码从入门到精通》小册,今天我的第二本小册《深入理解 TCP 协议:从原理到实战》也终于上线啦。
这本小册是去年开始写的,断断续续写了好几个月,写好了几个月了,因为掘金支付的原因,一直没有上架。一开始我列了一个大纲,预计会有 20 节,不知不觉写着写着到了 30 多节。
写这本小册所花的精力比上一本 JVM 字节码多了很多,越写发现水越深,想说服自己实在是太难了。有时候找一个问题的原因看 RFC 看到想吐,小册里面所有的图都是自己用 keynote 画的,总共有 100 多张,所以看这本小册会发现图特别多。
关于吉祥物
上一本 JVM 小册用的是猿,本来想选猴子的,因为家里有只小猴子,但是猴已经被占用了,只好选了相近的猿。这本 TCP 我选的是长颈鹿🦒,因为我们家那只小猴子每次放假都要去广州市动物园喂那里的长颈鹿吃东西,就是下面这张,喜欢这个吉祥物。

小册介绍
TCP 协议是我一直很想写的一个主题,因为 TCP 学起来实在是太痛苦了。刚参加工作时,TCP 协议一直是一个心头痛,知道皮毛,但是始终无法深入。在阅读了大量相关的书籍、做了很多网络编程方面的工作以后觉得掌握的过程太过曲折,这本小册并不是想重复阐述一些书上都能找到的 TCP 的理论,更多的是想跟大家分享一些学习和探究的方法,授之以渔,让大家少走一些弯路,知道从哪些方面下手来学习和分析问题。
为什么网络协议如此重要?
之前腾讯过来的带我们部门的后端大牛 ernest 就说过一句话我觉得很经典:「我们做的事情说到底无非是给用户交付一个网络包,你有什么理由不学好呢?」。
识别一个码农能力的好坏很大程度上是取决于他解决问题的能力。
我们面对的很多系统都是黑盒系统(MySQL、Nginx 等),几乎每隔一段时间都会遇到网络相关的问题,Redis 连接超时、请求第三方平台连接被重置、系统的吞吐量上不去等。我们没有精力去把每个组件的源码都读通读透,如果不懂网络协议,尤其是 TCP 协议,将无从下手分析。遇到第三方服务有问题时,没有一些抓包现场的分析证据,对方是不会接锅的,只有无休止的扯皮。
如果你想成为技术牛人,网络协议绝对是一道很高的门槛。
随着开发年限的增加,越发觉得计算机底层的原理才是最有价值的。技术浪潮一波接着一波,只有掌握了操作系统、计算机网络、分布式理论等基础知识,才能在浪潮之巅游刃有余。
纸上得来终觉浅,绝知此事要躬行
TCP 协议的学习非常枯燥,尤其大部分资料都是讲原理没有什么实操的东西。如果平时工作只是写写业务代码很少有机会去深入理解 TCP 协议,也不知道学了 TCP 协议以后可以用在什么地方。所以我想写这本小册,大部分理论相关的内容我都尽量会 packetdrill、scapy、防火墙等工具构造实验可以抓包查看实际的效果,真正可以看到超时重传、零窗口探测、Nagle 算法等实际的效果。
这本小册并不是为了单纯介绍一些协议的理论知识,这些《TCP/IP 详解》这本书已经足够好了,更多的是想授之以渔,跟大家一起分享自己一些思路和方法,如何去研究 TCP 中的一些复杂的问题,相信掌握了这些方法和工具,一定可以助力你后续的技术提升。
你会学到什么
基本概念:MTU、MSS 等概念
TCP 的面向连接、可靠、流协议说的是什么
TCP 的 11 种状态如何模拟以及如何互相转换
如何模拟同时打开、同时关闭
半连接、全连接队列是什么,backlog 参数有什么作用
快速打开的原理是什么
TCP SYN Flood 攻击背后的原理
TCP 最不好理解的 TIME_WAIT 状态是什么
SO_REUSEADDR、SO_LINGER 选项对网络编程有什么影响
TCP 有 7 个定时器是哪些,分别在什么条件下起作用
流量控制、滑动窗口、拥塞控制、快重传、慢启动等概念
keepalive 机制
Nagle 算法、延迟确认的相爱相杀
网络学习相关的工具介绍:telnet、nc、tcpdump、wireshark、lsof、iptables、scapy 等
wireshark 那些些难以看懂的提示是什么意思
协议栈测试工具 packetdrill 的使用
如何杀掉一条 TCP 连接
常见网络面试题分析
实际案例分享
我列了一个这本小册的思维导图

购买二维码
如果对内容感兴趣,可以扫描下面的二维码购买

一些感想
写这本小册过程中得到了很多大牛的指导,无以为报,就只能不断完善这本小册,不负所托。
厮大曾经说过「我觉得自己写的东西遇到对的人才是最欣慰的」,这句话我深有体会,能通过自己的小册在一些地方帮到一些朋友,就是对我最大的鼓励了。独学而无友则孤陋而寡闻,一起来交流吧。