本文作者:程序员鱼皮
免费编程学习 - 编程导航网:https://www.code-nav.cn
介绍
计算机网络是指将地理位置不同的多台计算机或设备通过通信线路进行连接,从而实现信息传递和资源共享,或者组成一个更完整的计算机系统。
如今,我们开发的绝大多数程序都依赖网络来加载文件和数据,比如网站、小程序、后台程序等,因此计算机网络的重要性不言而喻。
学习计算机网络后,我们能够了解数据在不同计算机之间传输的过程和细节,一方面可以帮助我们了解一些基本的、生活中比较实用的网络知识,比如服务器、带宽、网速、流量等。另一方面,学好计算机网络,有助于我们开发出性能更高、更安全稳定的前端和后台应用。比如使用 HTTP 2.0 协议来代替 HTTP 1.x 来减少网页加载时间、使用 HTTPS 来提高网络的安全性、选用 UDP 而不是 TCP 协议来提高多人实时游戏数据的传输速度、在网络模型的第 4 层和第 7 层去实现负载均衡和 DDOS 防护等。
计算机网络也有很多知识点和设计值得学习,可以应用到我们平时的项目开发、系统架构中,比如计算机网络分层思想、TCP 三次握手和四次挥手的连接机制、TCP 通过滑动窗口来进行拥塞控制等,学习这些思想也有助于我们更好地理解框架的设计和源码。
此外,和操作系统一样,计算机网络也是 考研和面试的重点(尤其是前端和服务端开发),如果是大学期间的小伙伴,在课堂上就要认真学习!
如果你想要从事网络方面的工作,比如网络工程师、网络运维、网络实施等,计算机网络一定要重点学习!核心中的核心!
学习条件
- 至少学过一门编程语言(计算机网络理论知识较多,直接学容易被劝退)
- 急着找工作的同学可以先不学,等面试前直接看一些题目即可(从事网络方面的工作则必须好好学,不能等到面试再学)
大纲
知识
学习重点
- 计算机网络分层模型以及各层的作用
- 数据在两台计算机之间的整个网络传输过程(网站加载过程)
- 应用层协议:HTTP、HTTPS、DNS
- 传输层协议:TCP(重中之重)、UDP
知识点大全
-
互联网基本概念
-
计算机网络分类
-
计算机网络分层模型
- 分层思想
- 协议和服务
- OSI 七层模型
- TCP / IP 四层模型
-
计算机网络性能指标
- 速率
- 带宽
- 时延
- 利用率
- 往返时间
- 丢包率
- 吞吐量
-
应用层
-
作用和原理
-
应用进程通信方式
- 客户 / 服务器方式
- P2P 对等方式
-
常用协议
- HTTP
- HTTPS
- DNS
- FTP
- DHCP
- NTP
- 邮件相关协议
-
CDN
-
-
传输层
- 作用和原理
- 复用和分用
- 常用协议
-
TCP
- 连接建立与断开
- 流量控制
- 拥塞控制
- 超时重传机制
- 可靠传输实现
- 报文首部格式
-
UDP
- 报文结构
-
UDP 和 TCP 的对比及应用场景
-
-
网络层
-
路由器
-
常用协议
-
IP 协议
- 地址划分
- IPV4
- IPV6
- 数据报首部格式
-
ICMP 协议
-
ARP / RARP 协议
-
NAT 协议
-
OSPF 协议
-
BGP 协议
-
-
路由选择算法
-
VPN 技术
-
-
数据链路层
- 作用和原理
- 封装数据帧
- 差错控制
- 可靠传输
- MAC 地址
- PPP 协议
-
物理层
- 作用和原理
- 物理介质
- 数据交换方式
- 信道复用
-
网络安全
- 加密
- 认证
- 防火墙
- 常见攻击及防范
学习建议
- 计算机网络的理论知识较多,初学不建议啃教材或者专业书籍,而是通过一些趣味科普书籍或视频来逐步了解。
- 建议和写文章一样,从整体到局部去学计算机网络,先了解有哪些网络分层、每个层次的作用和联系,再去按序了解每个层次内部的协议和细节。
- 计算机网络知识不要去死记硬背,哪怕记不住也没关系,等自己开发程序的时候可以思考数据传输的过程(比如网站加载的过程),通过抓包等实操的方式来加深印象。
- 不从事网络相关工作的话,计算机网络不用学的很深入,学习完重点知识就够了,甚至直接通过看面试题去学习也完全没有关系。
- 如果要从事网络相关工作(比如网络工程师),建议去考一些认证,比如华为认证、思科认证等等,可以自行了解一下。
学习路线
建议大家按照以下 3 个阶段来学习:
- 基础学习
- 实际运用
- 备战面试
一、基础学习
急于求职的话,本阶段可跳过
本阶段的目标:了解计算机网络基础知识,跟着一个视频或书籍过一遍,对网络分层模型和重点知识有个大致的印象即可。
自学网络可能会比较枯燥,建议先看看有趣的课外书,比如《图解 HTTP》,当个睡前读物即可。
正式学习网络的话,如果目标是求职,可以看《计算机网络微课堂》视频课来入门。如果目标是考研升学,还在学校的同学好好上课一般就没问题了,自学的话可以看《王道计算机考研 - 计算机网络》视频,也可以阅读《计算机网络 - 自顶向下方法》或《计算机网络 - 谢希仁》等书籍。
后面要面试前,再重点去背一些八股文就行。
推荐资源
- 视频
- ⭐ 计算机网络微课堂:https://www.bilibili.com/video/BV1c4411d7jb(强烈推荐)
- 王道计算机考研 - 计算机网络:https://www.bilibili.com/video/BV19E411D78Q(适合考研)
- 中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版)》:https://www.bilibili.com/video/BV1JV411t7ow(适合考研、学术)
- 中国大学 MOOC 哈工大计算机网络课程:https://www.icourse163.org/course/HIT-154005
- 书籍
- ⭐《图解 HTTP》:https://www.aliyundrive.com/s/HifozcgJwep 提取码: 9gc7
- ⭐《图解 TCP / IP》:https://www.aliyundrive.com/s/XYyAymeeXRy 提取码: 9gc7
- 《网络是怎样连接的》:https://www.aliyundrive.com/s/3FgCbvHGQQZ 提取码: 9gc7
- 《计算机网络(第 7 版)》 谢希仁:https://www.aliyundrive.com/s/3VsnQoKqxdi 提取码: 9gc7
- 《计算机网络 - 自顶向下方法(第 6 版)》:https://www.aliyundrive.com/s/Dc3itcB6GU9 提取码: 9gc7(大黑书,难度比较大,一般不推荐)
- 大学课件
- 浙大计算机网络基础:https://github.com/QSCTech/zju-icicles
二、实际运用
本阶段可跳过,在开发中实践即可
本阶段的目标:根据自己的职业发展方向进行不同的实践,运用和巩固计算机网络知识。
比如:
- 后端开发:基于 Socket 开发自己的通讯应用 / 框架、实现自己的浏览器、阅读开发框架源码等
- 前端开发:使用 HTTPS 协议增加网站安全性、使用 HTTP 2 协议提高网站加载速度、使用控制台等抓包工具分析请求 / 响应
- 网络工程师:使用华为 eNSP 或 Cisco Packet Tracer 模拟器搭建网络拓扑并进行配置
- 安全工程师:使用 Wireshark 之类的抓包工具分析数据包 / 数据帧
资源
实验
- 《计算机网络-自顶向下方法(第 6 版)》编程作业:https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES
- 《计算机网络 - 自顶向下方法》习题 / 编程 / 实验答案:https://github.com/jzplp/Computer-Network-A-Top-Down-Approach-Answer
- 哈工大计算机网络实验:https://github.com/rccoder/HIT-Computer-Network
网络相关认证
- 华为 HCIA-HCIP-HCIE router&switch 视频教程:https://t.zsxq.com/FEiaEEA
- H3C 厂商认证资料(面试+笔记+电子书+培训课件+实验手册+产品资料):https://t.zsxq.com/NBAQRZ3
三、备战面试
面试时对计算机网络的考察主要有 5 种形式(主要针对前后端开发):
- 直接问你某个具体的知识点,比如:讲解 TCP 三次握手和四次挥手机制
- 结合不同方向的专业知识来考察,比如:谈谈网站的加载过程(前端)、聊聊四七层负载均衡的实现和优缺点(后端)
- 通过实际开发中遇到的问题考察你的网络基础,比如:网站加载过慢,有哪些优化方式?
- 问你某个框架(轮子)的核心设计和源码细节,可能会包含计算机网络知识点的运用,比如 Netty 针对 UDP 协议的封装设计
- 系统设计类问题,比如:如何实现一个浏览器?(这种问题相对比较少)
经典面试题
- 计算机网络分层结构,各层有哪些常用协议?
- TCP 和 UDP 协议的区别?如何选择应用哪个协议?
- TCP 为什么需要三次握手和四次挥手?为什么不是两次握手、四次握手?为什么不是三次挥手?
- TCP 滑动窗口和拥塞控制机制
- TCP 如何保证可靠性?
- HTTP 协议常用状态码和含义
- HTTP 和 HTTPS 协议的区别?
- HTTPS 的原理、请求流程?
- HTTP 2 为什么快?
- HTTP 的短连接和长连接,以及如何选择?
- POST 和 GET 请求的区别
- 浏览器中输入URL 返回页面的过程?(包括 DNS 解析过程)
- Cookie 和 Session 的区别?
资源
总结复习
- ⭐️ 小林的图解网络:https://pan.baidu.com/s/1D6ygpsrZbEKK9V-Z80xcvQ 提取码: ecf2(号主原创,质量很高)
- 软件设计师计算机网络考点:https://pan.baidu.com/s/1K1hpKuS6XGG71jWr4N3UCg 提取码: 2g55
- 软件设计师计算机网络基础知识:https://pan.baidu.com/s/1XJzDJcxRhqs360nw-_T8VA 提取码: cs81
- 计算机网络基础面试宝典:https://pan.baidu.com/s/1whsPlPyDnQGf8uH5sV4Awg 提取码: 5j4n
- 13 道计算机网络面试题:https://pan.baidu.com/s/1Ou_aEWq4o7cfoz1TY126TA 提取码: 8uru
面试题
- 25 道计算机网络面试题总结:https://blog.csdn.net/lxw1844912514/article/details/120279006
加油小伙伴们!
更多编程学习资源
- Java前端程序员必做项目实战教程+毕设网站
- 程序员免费编程学习交流社区(自学必备)
- 程序员保姆级求职写简历指南(找工作必备)
- 程序员免费面试刷题网站工具(找工作必备)
- 最新Java零基础入门学习路线 + Java教程
- 最新Python零基础入门学习路线 + Python教程
- 最新前端零基础入门学习路线 + 前端教程
- 最新数据结构和算法零基础入门学习路线 + 算法教程
- 最新C++零基础入门学习路线、C++教程
- 最新数据库零基础入门学习路线 + 数据库教程
- 最新Redis零基础入门学习路线 + Redis教程
- 最新计算机基础入门学习路线 + 计算机基础教程
- 最新小程序入门学习路线 + 小程序开发教程
- 最新SQL零基础入门学习路线 + SQL教程
- 最新Linux零基础入门学习路线 + Linux教程
- 最新Git/GitHub零基础入门学习路线 + Git教程
- 最新操作系统零基础入门学习路线 + 操作系统教程
- 最新计算机网络零基础入门学习路线 + 计算机网络教程
- 最新设计模式零基础入门学习路线 + 设计模式教程
- 最新软件工程零基础入门学习路线 + 软件工程教程