如何学习计算机网络?看哪本书好?有没有相关的公开课呢?
Github 掘金计划由 3 位志同道合的 Github 重度用户维护。一周推送 2~3 篇原创,如果不想错过我们的干货,可以星标一下公众号哦~
计算机网络是一门系统性比较强的计算机专业课,各大名校的计算机网络课程打磨的应该都比较成熟。
要想学好计算机网络,首先要了解的就是 OSI 七层模型或 TCP/IP 五层模型,即应用层(应用层、表示层、会话层)、传输层、网络层、数据链路层、物理层。
关于这门课,首先强烈推荐参考书是「机械工业出版社的《计算机网络——自顶向下方法》」。该书目录清晰,按照 TCP/IP 五层模型逐层讲解,对每层涉及的技术都展开了详细讨论,基本上高校里开设的课程的教学大纲就是这本书的目录了。
如果你觉得上面这本书看着比较枯燥的话,我强烈推荐+安利你看看下面这两本非常有趣的网络相关的书籍:
《图解 HTTP》[1] :讲漫画一样的讲 HTTP,很有意思,不会觉得枯燥,大概也涵盖也 HTTP 常见的知识点。因为篇幅问题,内容可能不太全面。不过,如果不是专门做网络方向研究的小伙伴想研究 HTTP 相关知识的话,读这本书的话应该来说就差不多了。 《网络是怎样连接的》[2] :从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。
如果说学习计算机网络要围绕的 TCP/IP 五层模型逐层展开学习的话,那么针对每层的学习,就要以协议为单位了。一言以蔽之,我们学习计算机网络需要的协议有:
应用层协议 HTTP 协议(超文本传输协议,网页浏览常用的协议) DHCP 协议(动态主机配置) DNS 系统原理(域名系统) FTP 协议(文件传输协议) 电子邮件协议等(SMTP、POP3、IMAP) P2P 架构 传输层协议 报文段结构 RDT(可靠数据传输协议) 报文段结构 可靠数据传输 流量控制 拥塞控制 TCP 协议 UDP 协议 网络层协议 IP 协议(TCP/IP 协议的基础,分为 IPv4 和 IPv6) ARP 协议(地址解析协议,用于解析 IP 地址和 MAC 地址之间的映射) ICMP 协议(控制报文协议,用于发送控制消息) NAT 协议(网络地址转换协议) RIP 协议、OSPF 协议、BGP 协议(路由选择协议) 链路层 差错检测技术 多路访问协议(信道复用技术) CSMA/CD 协议 MAC 协议 以太网技术 物理层(对计算机专业的小伙伴来说,在课程要求中,物理层的内容可能相对不那么重要)
除了理论知识之外,学习计算机网络非常重要的一点就是:“「动手实践」”。这点和我们编程差不多。
Github 上就有一些名校的计算机网络试验/Project:
哈工大计算机网络实验[3] 《计算机网络-自顶向下方法(原书第 6 版)》编程作业,Wireshark 实验文档的翻译和解答。[4] 计算机网络的期末 Project,用 Python 编写的聊天室[5] CMU 的计算机网络课程[6]
我知道,还有很多小伙伴可能比较喜欢边看视频边学习。所以,我这里再推荐几个顶好的计算机网络视频讲解。
「1.哈工大的计算机网络课程[7]」 :国家精品课程,截止目前已经开了 10 次课了。大家对这门课的评价都非常高!所以,非常推荐大家看一下!
「2.王道考研的计算机网络[8]」 :非常适合 CS 专业考研的小朋友!这个视频目前在哔哩哔哩上已经有 1.6w+的点赞。
计算机网络常见面试题[9] 计算机网络基础知识总结[10]
最后再补充一个:浙江大学的计算机网络课程资料、教材和试卷[11] 。需要的小伙伴请查收!
Reference
《图解 HTTP》: https://book.douban.com/subject/25863515/
[2]《网络是怎样连接的》: https://book.douban.com/subject/26941639/
[3]哈工大计算机网络实验: https://github.com/rccoder/HIT-Computer-Network
[4]《计算机网络-自顶向下方法(原书第6版)》编程作业,Wireshark实验文档的翻译和解答。: https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES
[5]计算机网络的期末Project,用Python编写的聊天室: https://github.com/KevinWang15/network-pj-chatroom
[6]CMU的计算机网络课程: https://computer-networks.github.io/sp19/lectures.html
[7]哈工大的计算机网络课程: http://www.icourse163.org/course/HIT-154005
[8]王道考研的计算机网络: https://www.bilibili.com/video/BV19E411D78Q?from=search&seid=17198507506906312317
[9]计算机网络常见面试题: https://snailclimb.gitee.io/javaguide/#/docs/network/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C
[10]计算机网络基础知识总结: https://snailclimb.gitee.io/javaguide/#/docs/network/计算机网络知识总结
[11]浙江大学的计算机网络课程资料、教材和试卷: https://github.com/QSCTech/zju-icicles/tree/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80
用心发掘 Github 和 Gitee 上优质的开源项目。欢迎关注!