深入理解 TCP 协议:从原理到实战- 掘金小册课程推荐/优惠

深入理解 TCP 协议:从原理到实战--掘金小册课程推荐/优惠

用实验和图解的方式带你深入理解 TCP 协议,让 TCP 协议不再是拦路虎
挖坑的张师傅
40讲 | 7966人已学习
优惠价¥49.9
官网购买

版权声明

本站非掘金小册官网,与官方无任何关系。我们不提供课程下载或详细内容,仅作为课程分享和推荐平台。我们鼓励大家支持正版,尊重创作者的劳动成果,这样不仅能帮助创作者持续产出优质内容,也能让自己获得更好的学习体验。请通过官方渠道购买和学习课程,感谢您的理解与支持。

课程详情

课程介绍

小册介绍

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

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

作者介绍

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

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

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

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

后面的一年多就是我最高速成长的一段时期了,内部转岗去做了后台开发。因为喜欢保持简单,自己花了一些时间造了很多轮子,比如 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
  • 自己动手抓包而不是只看看文章内容

更新进度

课程目录

  • 开篇词 —— 小册食用指南
  • TCP/IP 历史与分层模型
  • TCP 概述 —— 可靠的、面向连接的、基于字节流、全双工的协议
  • 来自 Google 的协议栈测试神器 —— packetdrill
  • 支撑 TCP 协议的基石 —— 剖析首部字段
  • 数据包大小对网络的影响 —— MTU 与 MSS 的奥秘
  • 临时端口号是如何分配的
  • 繁忙的贸易港口 —— 聊聊端口号
  • TCP 恋爱史第一步 —— 从三次握手说起
  • 聊聊 TCP 自连接那些事
  • 相见时难别亦难 —— 谈谈四次挥手
  • 时光机 —— TCP 头部时间戳选项
  • 原始但德高望重的 DDoS 攻击方式 —— SYN Flood 攻击原理
  • 状态机魔鬼 —— TCP 11 种状态变迁及模拟重现
  • 另辟蹊径看三次握手 —— 全连接队列和半连接队列与 backlog
  • 优雅关闭连接 —— Socket 选项之 SO_LINGER
  • 一台主机上两个进程可以同时监听同一个端口吗
  • 嫌三次握手太慢 —— 来快速打开吧
  • Address already in use —— 聊聊 Socket 选项之 SO_REUSEADDR
  • 一个神奇的状态 —— TIME_WAIT
  • 爱搞事情的 RST 包 —— 产生场景、Connection reset 与 Broken pipe
  • 重传机制 —— 超时重传、快速重传与 SACK
  • TCP流量控制 —— 滑动窗口
  • 重传间隔有讲究 —— 多久重传才合适
  • 有风度的 TCP —— 拥塞控制
  • TCP 发包的 hold 住哥 —— Nagle 算法那些事
  • 兄弟你还活着吗 —— keepalive 原理
  • TCP 回包的磨叽姐 —— 延迟确认那些事
  • TCP RST 攻击与如何杀掉一条 TCP 连接
  • ESTABLISHED 状态的连接收到 SYN 会回复什么?
  • 定时器一览 —— 细数 TCP 的定时器们
  • 网络工具篇(一) —— telnet、nc、netstat
  • 网络工具篇(二) —— 网络包的照妖镜 tcpdump
  • 案例分析 —— TCP RST 包导致的网络血案
  • 网络命令篇(三) —— 网络分析屠龙刀 wireshark
  • 案例分析 —— JDBC 批量插入真的就批量了吗
  • 案例分析 —— 一次百万长连接压测 Nginx OOM 的问题排查分析
  • 作业题和思考题解析
  • 网络学习一路困难,与君共勉
  • 案例分析 —— 一次 Zookeeper Connection Reset 问题排查

作者介绍

机械工业出版社《深入理解 JVM 字节码》作者,掘金小册《深入理解TCP 协议》作者,公众号《张师傅的博客》作者,运营知识星球《张师傅的小密圈》。写一点 rust、go 和 kotlin。

作者其他课程

给开发者的底层原理课 - 掘金小册课程推荐/分享/优惠/折扣
给开发者的底层原理课
深入掌握计算机底层原理,升级技术内功
挖坑的张师傅
655人已学习
优惠价¥69.9
官网购买
JVM 字节码从入门到精通 - 掘金小册课程推荐/分享/优惠/折扣
JVM 字节码从入门到精通
深入剖析 JVM 字节码,带你分析字节码黑科技、破解软件、从零实现一个 APM
挖坑的张师傅
4828人已学习
优惠价¥39.9
官网购买

推荐

大前端跨端开发指南 - 掘金小册课程推荐/分享/优惠/折扣
大前端跨端开发指南
小程序+ RN + DSL ,全方位讲解前端跨端技术
我不是外星人
1285人已学习
优惠价¥59.9
官网购买
MySQL 是怎样运行的:从根儿上理解 MySQL - 掘金小册课程推荐/分享/优惠/折扣
MySQL 是怎样运行的:从根儿上理解 MySQL
授人以鱼不如授人以渔,从根儿上理解 MySQL,让 MySQL 不再是一个黑盒。
小孩子4919
23401人已学习
优惠价¥29.9
官网购买
Vue 3 技术揭秘 - 掘金小册课程推荐/分享/优惠/折扣
Vue 3 技术揭秘
渐进式揭秘 Vue 3 源码的设计过程和架构思想
muwoo
2136人已学习
优惠价¥39.9
官网购买
从 0 带你写 Netty - 掘金小册课程推荐/分享/优惠/折扣
从 0 带你写 Netty
渐进式源码剖析,助你精通 Netty 框架
陈清风扬
1076人已学习
优惠价¥59.9
官网购买
Flutter  实战:正则匹配应用 - 掘金小册课程推荐/分享/优惠/折扣
Flutter 实战:正则匹配应用
从思想分析到应用实践, Flutter 全平台玩转正则表达式 ~
张风捷特烈
773人已学习
优惠价¥9.9
官网购买
Flutter 布局探索 - 薪火相传 - 掘金小册课程推荐/分享/优惠/折扣
Flutter 布局探索 - 薪火相传
由浅入深,从源码探索 Flutter 布局原理~
张风捷特烈
2031人已学习
优惠价¥3.5
官网购买