网络
为什么要学习网络?
- 找工作八股问。
- 高级语言上层封装很好,只会调网络接口的话,其实AI写的更完美。
- 你不好奇网络数据包怎么正确无误且高效的发送到电脑上的吗?
网络基础
- 看完《TCP/IP详解 卷一》或者《自顶向下》其中一本。
tcpdump
、wireshark
等网络嗅探工具的基本使用。
如何学习网络
最好的老师是Linux
源代码,其次是RFC
。但是源代码有很多底层的优化,看着很容易舍本逐末,所以可以先从一个简单的 Lab 开始:CS144
。
推荐的课程
当时我写这个课程的时候,写到Lab3
,官网就莫名挂了导致我看不到后续的Lab
,所以我将其所有的Lab
下载到check_pdf中。lab3
后续个人感觉意义没有很大,就没有继续写。
RFC
官网:https://www.rfc-editor.org/
推荐阅读的RFC
:
- RFC 793 : TCP协议的原始规范。它详细描述了TCP的工作原理,包括连接建立、数据传输和连接终止。
- RFC 896 : 网络拥塞问题及其对TCP性能的影响,并提出了一些处理拥塞的建议。
- RFC 1071: 如何计算和使用IP头和TCP/UDP校验和。
- RFC 1122:定义了TCP/IP协议栈中主机软件的要求,包括链路层、IP层、传输层(TCP、UDP)的实现细节。
- RFC 2988:如何计算和管理TCP的重传超时(RTO)。
翻译个人使用的是Chrome的插件:沉浸式翻译。有歧义以原文为主。
packdrill
官网:https://github.com/google/packetdrill
packetdrill 脚本工具可以对整个 TCP/UDP/IPv4/IPv6 网络堆栈(从系统调用层到 NIC 硬件)进行快速、精确的测试。
由于网络状况是混沌的,难以复现的,所以十分推荐使用这个谷歌复现某些简单的网络问题,同样对网络学习也很有帮助。大佬们使用这个工具发现了多个网络问题,很有学习的价值。
阅读源码
Linux
内核网络协议栈的实现代码十分庞大,要带着问题看源码。没有问题一味看下去只会脑子压栈过深。当然也可以阅读LwIP
这种轻量级别的TCP/IP协议栈。
Note
由你来完善和丰富!