发布时间:2023-09-15 12:26:21 人气: 来源:bob平台官网入口
抓包:《Wireshark 网络分析就这么简单》,这本书写得很幽默风趣,可以看看。
国外经典课程:CS144,这门课的视频实际上并不突出,一般般吧,但是 Assignment/Lab 挺有意思的,用 C++ 实现一个 TCP,当然了不会像 linux 中网络协议栈那么复杂,但是麻雀虽小五脏俱全。
简单网络攻击:比如去玩玩 ARP 攻击,在寝室或者你们家里搞点“网络攻击”
我觉得学习计网,做点网络编程、简单网络攻击、抓包,会让学习更加有趣,我当时是这几个都玩了下,你对这些网络协议的认识就会更加深刻的。
首先,分享一份大学期间自己整理的电子书库,绝不是在网上那种打包下载的,而是个人需要学到某个方向知识的时候,去网上挨个找的,最后汇总而成。
汇集了编程语言(Java、C++、C、Python等等)、操作系统、计算机网络、系统架构、设计模式、程序员数学、测试、中间件 、前端开发、后台开发、网络编程、Linux使用及内核、数据库、Redis....等主流的编程学习书籍。
整理的这些书你们可以在这里获取,对于学习计算机的同学帮助非常大,且十分系统:
当然了,不同岗位的同学可能关注的重点会不一样,前端同学可能更关注 HTTP、浏览器网络请求、渲染过程,后台同学则更关注网络层和传输层。
花了好大的力气,终于背完了 HTTP、TCP、IP、ARP、DHCP 等一堆协议。
先谈遇到了什么样的问题,再说如何去解决,最终才是搬出前辈们的 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连接建立后出现服务器崩溃、断电、网线被拔...会发生啥情况”这样的问题。