TCP/IP 协议栈实现 Dnet - Ep.0 前言&背景介绍

 

本系列 Blog 的初衷是通过自己实现一个 TCP/IP 协议栈的形式来简明易懂地介绍计算机网络相关的知识, 更多细节详见本系列 Ep.0. 相关代码实现开源在 https://github.com/lyc8503/DNet-core.

前言

又在博客开了一个新系列的坑, 开始写这个系列的契机是本科课程正好在学计算机网络, 但课本上的知识总是十分的冗长和无趣, 就想着能不能自己动手实践一下, 毕竟”纸上得来终觉浅, 绝知此事要躬行”.

所以打算自己写一个 TCP/IP 协议栈, 同时再深究一下内部的运作细节, 并将这些内容分享在博客上.


之前写博客大部分的目的是”记录”, 主要是记录一些我自己新接触或者比较感兴趣的技术. 记录一些碎片的知识容易, 想要体系化地介绍一个复杂系统就变得困难了.

但这次想要从头开始, 流畅地介绍完整个体系, 而不是碎片化地记录, 其实也算是督促我自己更系统地学习计算机网络的一个手段吧.

当然由于我个人精力和水平受限, 这个系列不会成为一个完整的计算机网络教程(也已经有很多现成的了), 它只会涉及到我实现 TCP/IP 协议栈的用到的部分(主要就是端系统上处理网络数据包的部分), 不求面面俱到但求能走马观花式地”欣赏”一下现在的网络栈实现.

如果写完这个系列能让我(或是你)对当今的计算机网络有些更深入的理解, 学到了其中一些精妙的设计, 抑或是发现了其中的缺陷, 有了自己的观点和见解, 也算不枉费我码字的时间.

当然如果我哪里理解出现了错误, 请原谅我的学艺不精, 也欢迎大家留言或发邮件指正错误.

多说无益, Let’s start.

背景介绍

计算机网络从它诞生的那天起, 想要解决的其实是一个很朴素的问题: 若干台计算机之间, 如何传递信息?

很久以前, 人们可能会使用RS-232串口直接将两台计算机连接起来, 点对点的传输信息. 我们也可以手动通过软盘, 光盘, U盘等多种介质传输信息.

但随着计算机的不断普及, 计算机数量越来越多, 用串口或其他类型的数据线将所有计算机连接起来显然不现实.

除此之外, 随着计算机网络规模的不断扩大, 也有许多现实的问题需要我们解决:

  • 数以亿计的计算机互联互访问题

    在世界各地的计算机要能互相访问, 如何将找到一台电脑到另一台电脑的路径? 如何合理地规划线路避免拥塞?

  • 数据的可靠性

    在传输的线路上电信号难免受到外界干扰产生错误, 众多网络设备难免出现拥塞, 不稳定或者宕机, 数据可能丢失. 如何保证一台电脑发送的数据能正确且有序地送达另一台电脑?

  • 数据安全性

    网络链路很多时候不一定可信, 比如我们使用公共 Wi-Fi 接入互联网时. 如何保证我们发送的数据不被窃听或是篡改?

  • 可拓展性

    整个计算机行业仍处在快速发展的过程中, 各类需求层出不穷, 而互联网协议应该有一定的可拓展性以满足将来一段时间内的发展需要.

  • ……

目前的网络协议使用的是分层的结构(这也是它被成为网络的原因), 接下来的博客中我就会自底向上的实现每一层, 最终得到一个可以工作的 TCP/IP 协议栈.

本文采用 CC BY-NC-SA 4.0 许可协议发布.

作者: lyc8503, 文章链接: https://blog.lyc8503.net/post/tcpip-0-background/
如果本文给你带来了帮助或让你觉得有趣, 可以考虑赞助我¬_¬