欢迎来到KB体育公司
零基础如KB体育官网何学习计算机网络?
栏目:行业动态 发布时间:2023-09-15 17:06:35

  我当初学计算机网络这个课,学了一遍忘一遍,特别是谢希仁的那本计算机网络,简直阴影。好在最后还是学成归来,分享一下我一路上学习计算机网络的那些方法,也推荐一些靠谱的学习资源,看完没用可以打我,看完有用记得点赞!

  学习计网的一个误区就是挨个的背下每一个网络协议的作用,头部字段以及通信双方的交互过程。

  说实话,这种学习方法非常低效,当你自己去抓过包,见过真实的数据包、TCP header,你会惊讶,哇,原来这就是 TCP,而不是记住课本上那一张张header构造图!

  比如我在大学期间抓过网络包,写过网络编程、也做过可靠传输实验、模拟TCP、kali Linux 上玩过 arp 等一些简单的网络攻击,我觉得计算机网络挺简单的,本质上就是两台主机如何通信。

  我觉得学习计网,做点网络编程、简单网络攻击、抓包,会让学习更加有趣,我当时是这几个都玩了下,你对这些网络协议的认识就会更加深刻的。

  比如《图解HTTP》、《图解TCP/IP》、《网络是怎么连接的》、《计算机网络:自顶向下》、《TCP/IP卷一》等等

  这门课程配合《计算机网络:自顶向下方法》,然后做一下课程的lab,基本能够掌握TCP的核心。

  你想都写了一个TCP了,还能理解不了吗?而且这种理解是从细节到上层工作原理的全面把控。

  在这,顺便分享一份大学期间自己整理的电子书库,绝不是在网上那种打包下载的,而是自己需要学到某个方向知识的时候,去网上挨个找的,最后汇总而成。

  汇集了编程语言(Java、C++、C、Python等等)、操作系统、计算机网络、系统架构、设计模式、程序员数学、测试、中间件 、前端开发、后台开发、网络编程、Linux使用及内核、数据库、Redis....等主流的编程学习书籍。

  我整理的这些书大家可以在这里获取,对于学习计算机的同学帮助非常大,且十分系统:

  4. 抓包:《Wireshark 网络分析就这么简单》,这本书写得很幽默风趣,可以看看。

  国外经典课程:CS144,这门课的视频其实并不突出,一般般吧,但是 Assignment/Lab 挺有意思的,用 C++ 实现一个 TCP,当然了不会像 linux 中网络协议栈那么复杂,但是麻雀虽小五脏俱全,你想想你都写了一个tcp了,还怕理解不了?:

  人家老外老师就是给力,直接做了一个网站,这个网站你可以通过 TCP 连接上去,然后你需要运行几个节点,互相发消息,他们之间的消息都会经过老师的网站,所以通过网站上是可以控制丢包率的,也能控制节点的拓扑结构,要求就是让你基于这种不可靠的信道,做出可靠数据传输!这简直就是翻版 TCP 嘛,超时重传、ACK、滑动窗口啥的都给我上!

  就是像下面图中一样,圆圈就表示你可达的范围,不同节点形成各种网络拓扑,可以调节网络 丢包率 Loss chance。

  简单网络攻击:比如去玩玩 ARP 攻击,在寝室或者你们家里搞点“网络攻击”

  当然了,不同岗位的同学可能关注的重点会不一样,前端同学可能更关注 HTTP、浏览器网络请求、渲染过程,后台同学则更关注网络层和传输层。

  花了好大的力气,终于背完了 HTTP、TCP、IP、ARP、DHCPKB体育 等一堆协议。

  先谈遇到了什么问题,再说如何去解决,最终才是搬出前辈们的 RFC 文档,这样就会顺畅很多。

  而且这是在引导我们去思考如何解决问题,从点对点连接开始如何构造一个网络。

  如果一上来就搬出原理,比如 TCP 连接管理、状态转换、超时重传、IP 包如何分段与重组这样的东西,我觉得是比较懵逼的。

  如果你脑海里对这些问题的答案非常的清晰,那么恭喜你,你对网络掌握得还不错!

  我们大学老师就是从应用层开始往下讲的,自顶向下的好处是直观,上层的直观感受会让你有探索下层实现的欲望。

  我们教材也恰好使用的是《计算机网络-自顶向下》这本经典的计算机网络书籍,这本书也是采取自顶向下这样的讲述方式。

  当然了,国内也有不少高校是以自底向上的方式上课的,一上来就是一堆的物理层、链路层协议,典型教材如《Computer Networks, Fourth Edition》。

  因为自顶向下是一层层的从外向内打开,然而最初设计网络的时候肯定不可能是自顶向下的吧。

  真实的世界一定是自底向上演变的,不可能先定义了 HTTP 协议再去考虑如何设计传输层,这显然不合理嘛。

  网络的演变一定是最初有两台电脑互相通信的需求,然后是多台电脑,他们之间构成了局域网,再往后局域网之间组成了广域网。

  最关键的是,自底向上是解决问题导向,比如有了 IP层 为什么还需要传输层呢?

  我们都知道一台电脑可能有多个进程在使用网络连接,那么当 IP 包到达主机时,怎么区分这是发给哪个进程的呢?

  但是自顶向下可能就是学完应用层,直接告诉你,下一层是传输层,然后接着讲 TCP 和 UDP 是什么。

  运输层位于应用层和网络层之间,是分层的网络体系结构的重要部分。该层为运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用。我们在本章采用的教学方法是,交替地讨论运输层的原理和这些原理在现有的协议中是如何实现的。与往常一 样,我们将特别关注因特网协议,即 TCP 和 UDP 运输层协议。

  那我可能就会想,为什么在应用层和网络层之间需要运输层,直接把应用数据包打包在网络层里发送出去不行吗?

  当然可以,只要给每个应用分配一个唯一的ID,一起放在网络层的数据包发送出去,接收方使用这个 ID 来定位数据是给哪个应用的。

  其实你也看出来了,这就是把 TCP、UDP 做的事情放在了 IP 层去做。

  所以为了保持 IP 层的灵活性和功能独立,这里引入了传输层,这就是分层。

  学习计网过程中也需要建立结构化的思维,最直观的结构就是按照计网的层次来,即:应用层、传输层、网络层、数据链路层、物理层。

  然后在去学习每个层的功能和其中的每个协议,这个过程既可以自顶而下,也可以自底向上。

  分层学习过程中除了要掌握每一层之外,最重要的其实是要学习层与层之间是如何链接起来的,比如 IP 层和数据链路层就是 ARP 协议。

  最后当你学完所有的协议后,再回顾一下,一个数据包是如何从 send() 函数发送出去的。

  离散的 IP 数据包又是如何抽象出“面向连接”的 TCP 层,并且要清晰的认识到这里的连接是一种逻辑状态,建立、断开连接则是同步双方的通信状态。

  基于这样的认识,才能轻易的回答出类似: “TCP连接建立后出现服务器崩溃、断电、网线被拔...会发生什么情况”这样的问题。

  也可以关注下我@编程指北哟,致力于分享CS学习方法、校招打法、硬核技术,希望抹平CS学习的信息差,让同学们少走弯路!