跳转至

网络

为什么要学习网络?

  1. 找工作八股问。
  2. 高级语言上层封装很好,只会调网络接口的话,其实AI写的更完美。
  3. 你不好奇网络数据包怎么正确无误且高效的发送到电脑上的吗?

网络基础

  1. 看完《TCP/IP详解 卷一》或者《自顶向下》其中一本。
  2. tcpdumpwireshark等网络嗅探工具的基本使用。

如何学习网络

最好的老师是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

由你来完善和丰富!