掘金小册深入理解 TCP 协议:从原理到实战

  • 在线网盘 点击查看详情 购买后内容一样

TCP 协议是我一直很想写的一个主题,因为 TCP 学起来实在是太痛苦了。刚参加工作时,TCP 协议一直是一个心头痛,知道皮毛,但是始终无法深入。在阅读了大量相关的书籍、做了很多网络编程方面的工作以后觉得掌握的过程太过曲折,这本小册并不是想重复阐述一些书上都能找到的 TCP 的理论,更多的是想跟大家分享一些学习和探究的方法,授之以渔,让大家少走一些弯路,知道从哪些方面下手来学习和分析问题。

小册介绍

写这本小册所花的精力比上一本 JVM 字节码多了很多,越写发现水越深,想说服自己实在是太难了。有时候找一个问题的原因看 RFC 看到想吐,用 keynote 画了 100 多张图,所以看这本小册会发现图特别多。

作者介绍

我是挖坑的张师傅,vim 爱好者。从事 Java 开发六年多,做过安卓、写过 Node,现在深耕后台开发,在 CVTE 担任高级技术经理,带一个 20 多人的开发团队做教育相关的产品。

维护了一个微信公众号「张师傅的博客」,主要写偏底层原理的分布式理论、网络协议、架构设计、Go 语言汇编相关的东西,随缘。

2010 年大三的时候,阴差阳错学习了当时还是 1.5 版本的安卓开发。恰逢 Google 在大陆举办了首届 Android 应用开发中国大学生挑战赛。当时穷学生买不起安卓真机,在模拟器上运行写了一个界面比较炫酷的音乐播放器就去参赛了,结果拿了个三等奖,也是湖北赛区唯一获奖的作品。奖品是一部 HTC G7 手机和几千块的奖金,拿奖以后就应邀去参观了 Google 上海的办公室,安排我们在上海浪了三天。

毕业以后就真的去做了安卓开发,做了大半年的安卓 framework 移植和手写笔记软件,期间大量接触 linux 、vimgit 等工具。

后面的一年多就是我最高速成长的一段时期了,内部转岗去做了后台开发。因为喜欢保持简单,自己花了一些时间造了很多轮子,比如 REST 服务端框架、数据库连接池、SQL 执行框架、类 Dubbo 的 RPC 调用框架、基于 RocksDB 的延时消息队列、Gossip 协议框架等。

那段时间遇到了非常多网络相关的问题,于是对 TCP 协议做了深入的学习,现在条件反射一上来就可以 tcpdump 抓包开始分析问题了。当组员遇到问题,三下五除二帮忙找到根本原因的感觉真不错。

为什么网络协议如此重要?

之前腾讯过来的带我们部门的后端大牛 ernest 就说过一句话我觉得很经典:「我们做的事情说到底无非是给用户交付一个网络包,你有什么理由不学好呢?」。

识别一个码农能力的好坏很大程度上是取决于他解决问题的能力。

我们面对的很多系统都是黑盒系统(MySQL、Nginx 等),几乎每隔一段时间都会遇到网络相关的问题,Redis 连接超时、请求第三方平台连接被重置、系统的吞吐量上不去等。我们没有精力去把每个组件的源码都读通读透,如果不懂网络协议,尤其是 TCP 协议,将无从下手分析。遇到第三方服务有问题时,没有一些抓包现场的分析证据,对方是不会接锅的,只有无休止的扯皮。

如果你想成为技术牛人,网络协议绝对是一道很高的门槛。 随着开发年限的增加,越发觉得计算机底层的原理才是最有价值的。技术浪潮一波接着一波,只有掌握了操作系统、计算机网络、分布式理论等基础知识,才能在浪潮之巅游刃有余。

纸上得来终觉浅,绝知此事要躬行

TCP 协议的学习非常枯燥,尤其大部分资料都是讲原理没有什么实操的东西。如果平时工作只是写写业务代码很少有机会去深入理解 TCP 协议,也不知道学了 TCP 协议以后可以用在什么地方。所以我想写这本小册,大部分理论相关的内容我都尽量会 packetdrill、scapy、防火墙等工具构造实验可以抓包查看实际的效果,真正可以看到超时重传、零窗口探测、Nagle 算法等实际的效果。

这本小册并不是为了单纯介绍一些协议的理论知识,这些《TCP/IP 详解》这本书已经足够好了,更多的是想授之以渔,跟大家一起分享自己一些思路和方法,如何去研究 TCP 中的一些复杂的问题,相信掌握了这些方法和工具,一定可以助力你后续的技术提升。

你会学到什么

  • 为什么握手是三次,挥手要四次,挥手变成三次可以吗
  • 为什么 SYN/FIN 不包含数据却要消耗一个序列号
  • 如何用脚本复现同时关闭
  • TCP 的十一种状态如何模拟以及如何互相转换
  • 半连接、全连接队列是什么,backlog 参数有什么作用
  • 快速打开的原理是什么
  • TCP SYN Flood 攻击背后的原理
  • TCP 最不好理解的 TIME_WAIT 状态是什么
  • SO_REUSEADDR、SO_LINGER 选项对网络编程有什么影响
  • TCP 有 7 个定时器是哪些,分别在什么条件下起作用
  • 发送窗口、接收窗口、拥塞窗口的区别是什么
  • 流量控制、滑动窗口、拥塞控制、快重传、慢启动等概念
  • keepalive 机制
  • Nagle 算法、延迟确认的相爱相杀
  • 网络学习相关的工具介绍:telnet、nc、tcpdump、wireshark、lsof、iptables、scapy 等
  • 协议栈测试工具 packetdrill 的使用
  • RST 复位攻击是什么,如何杀掉一条 TCP 连接
  • 什么是 TCP 的自连接
  • TCP 临时端口号的分配算法是什么
  • 常见网络面试题分析
  • 实际案例分享

我列了一个这本小册的思维导图

适宜人群

  • 学习 TCP 协议多次从入门到放弃的同学
  • 想通过实验方法学习 TCP 协议的同学
  • 对于前端工程师,学完可以快速辨识开发中遇到的问题是前端还是后端的问题,对页面性能优化有更深的理解
  • 对于后端工程师,TCP 协议可以说是必须要掌握的技能,学完能从协议和网络层面快速分析后端诸多分布式组件的问题,对提升接口的性能和分布式系统的可靠性会更有把握
  • 对于测试工程师,对网络协议理解的越深,越能发现隐藏很深的 Bug,对性能测试、压力测试会有更深的理解

阅读这本小册需要哪些必备条件

  • 一台 Linux 虚拟机,最好是 Centos
  • 自己动手抓包而不是只看看文章内容
每天成长一点点,要比别人快一步
58学课 » 掘金小册深入理解 TCP 协议:从原理到实战

常见问题FAQ

如何下单?如何下载?
->> 点击查看 自助下单,自动发货,下单后,页面会自动刷新,显示百度网盘地址
如何查看下单后的内容?
在线网盘 点击查看详情 下单后内容一样
本站不议价 !
本站不议价,不支持无理由退换,看清楚再下单
更多常见问题?
->> 点击查看

发表回复

Hi, 如果你对这个资源有疑问,可以跟我联系哦!

联系客服
  • 12794会员总数(位)
  • 5064资源总数(个)
  • 113本周发布(个)
  • 11 今日发布(个)
  • 1499稳定运行(天)

全网最牛资源站

加入我们