计算机网络(0)
本学期有一门网络实验课程,然而计网一向是我最头疼的部分,考研学408时计网我几乎没怎么花时间,一共也就学了一两个学期,除了协议基本上啥都忘了
但是作为网安学生,不会计网多少有点招笑,刚好我也想趁着这个节点好好学这门课
这本书参考主要是计算机网络自顶向下方法

zlib地址:
中文版是这一本:

谢希仁老师那本书我也看过,依我愚见感觉差不多,不过这本书据说口碑更好,就用这本了
参考网课:
【中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程】 https://www.bilibili.com/video/BV1JV411t7ow/?share_source=copy_web&vd_source=11adc167bc48b56eb345626fd0a40a93
【【计算机网络】哈尔滨工业大学 | 李全龙 聂兰顺】 https://www.bilibili.com/video/BV1j3rZB4E6f/?share_source=copy_web&vd_source=11adc167bc48b56eb345626fd0a40a93
哈工大这门课用的也是这本书,讲的也很好,mooc上也有,不过老师的麦有点炸,观感略微有点差
参考资料:
UCB CS 168课程教材: https://textbook.cs168.io/
我看的ppt有如下两套:
划重点,如果你的目的是考研,我强烈推荐你看湖科大教书匠的计算机网络系列
https://space.bilibili.com/360996402/lists/2199556?type=season
这是我看过的最好的计算机网络期末/考研课程,高老师的动画和讲解都非常细致,很多人都反馈比王道的咸鱼老师讲解的更透彻(没有拉踩的意思,咸鱼老师确实更擅长计算机组成原理和操作系统)
计网这门课如果没有上过计算机科学导论,那么初学者会很难以理解这里面的部分,容易一头扎进其中的协议里,一叶障目无法理解整个体系
我用自己的简单的语言来帮助各位理解一下其中的逻辑
计网概览
为了方便各位理解,我先抛开所有的细节概念,举一个具体的例子
我们假设一个简单的情形,你和远在月球的小伙伴要进行视频通话。我们简化一下这里的过程,你的设备要与月球建立链接,首先你的设备连接到家里的路由器,路由器连接到信号塔,多个信号塔接力,还得经过卫星,才能把你的通话的视频和音频送到月球的信号塔,再把信号塔的信息传送给月球的小伙伴家里的路由器,然后路由器再发给小伙伴
这中间的过程里,你的信息经过了多层的传递,需要经过很多设备的跳转,他们需要能够准确地把你的信息跳转到合适的位置,进行精确发送,这就涉及“中转到哪”的问题
接下来考虑这样的问题,你的视频通话为了保证实时性,不可能你话讲完了,才把整段视频发到月球,再等小伙伴录一段话发给你。为了保证对话的连贯性,我们自然能够想到,你一边讲话,视频和音频录一小段就发一小段,而不是发一整段,一小片信息一小片信息地发送,这样的好处是,发送是需要花时间的,在你一段信息发送出去后,你的计算机就可以马上再准备发下一个小片段,而不是等朋友回你信息后,你再发下一大段,这样你们沟通的延时会大幅降低,这就是“分片”
从这里开始我们将涉及一些分片的控制问题,前面我们已经能够建立连接,让中间的计算机网络设备能够准确的转发到对应的位置了,但是为了提升速度而进行分片,这就会涉及额外的问题——如果分片发送过程中丢失了一些分片,或者顺序被打乱了,怎么办呢?我们不得不设计一些额外的控制信息,让发送和接收端的计算机能够正确的识别这些分片,如果我们给他们依次标号为123456789...,我们可能收到乱序268478135,或者掉了一些切片只剩下13579,(考虑到计算机网络并不稳定,中间丢一些是常有的事),我们自然能够想到,乱了就按照序号排列一下,排列完发现丢了切片就让对面重新发一份,怎么重新发呢?怎么让对面知道到底发送的有没有问题呢?这些都是计算机网络的诸多设计需要考虑的问题
好,如果上述问题都能解决了,我们还要考虑一定的速度问题。如果我们只是闲聊,那么你吹牛的话语漏几句虽然听着不太舒服,但好歹能接受,如果中间少了一帧画面我就得等半天只为了那一句并不重要的话,就很影响体验,有没有什么办法告诉计算机,“稍微少一些也能接受,只要其他切片整体别太乱,大部分能够正常发过来就行”呢?另一种情况是,如果你正在做极其重要的信息沟通,一个字也不能漏,那么哪怕中间等一段时间也能忍受,我们又得怎么对计算机之间的沟通做设计呢?
或许你会觉得,这里的漏信息太麻烦,我们直接拉一条电话线不就好了,但是这里面铺设费用会有多高呢?要知道,哪怕是跨洋电缆的价格就已经高的吓人了
好,我们进一步思考,如果现在的确有这么一条电线能在你们小区和月球的小区之间,接下来总不可能你小区的其他用户和你朋友小区的其他用户,他俩沟通也单独拉一条线吧?这价格也太贵了
如果你们同时要进行交流,信息如何沟通呢?如果你的信息要发送到月球,别人又刚好从月球发一条信息回地球,一条电线两端同时发送信息片,相碰撞就可能出问题,同一时刻要么左边发右边,要么右边发左边,这就总要有人排队。这就涉及复用的控制问题:怎么等待,轮换时间片做传送呢?要是我煲电话粥,系统一直在传送我的信息,那你还怎么发信息给你的小伙伴?这就是额外的控制问题了
再往底层,还有类似信号站的信息与电缆传来的信息如何统一?我们实际发送的是01字符串,怎么解读这些信息片,如何进行组装?
不需要解答这些问题,这些都是我经过多种简化得来的结果。只需要引起你的思考
总的来说,计算机网络是一个极其复杂的系统,设备数以亿计,网络错综复杂,在极端情况下,你只能保证你自己发送的设备这部分没有出问题,中间信息会不会丢失?对面能不能接收到?你一无所知。一个简单的例子,如果你小伙伴的网络被切断了,你要如何得知呢?直接问他吗?有这么几种可能,你问他的信息没能发送到他手里,你发送到他手里了但他没有回复你,或者他回复你了但回复的信息却始终无法传递

《无法传达的爱恋》——痛,太痛了
在一片混沌中,我们要保证联通,要保证多路复用,要保证正确性,还要兼顾速度,以及发送过程中还有诸多的流量控制等问题(甚至在上述情景中并没有出现)。计算机网络并非某一个人的灵机一动,而是一大堆计算机领域的大神长年累月绞尽脑汁研究出来的诸多设计,因此整个体系里的内容极其庞大驳杂。更重要的是,这个整体从你的app开始,中间还有操作系统,网络协议,网络物理接口,信号发送01序列传,经过了很多层次,如果你是一个app开发人员,让你全部自己来实现从app逻辑到01序列发送的一系列细节,如此复杂的控制能把人逼疯。
为此,我们考虑“分层”,通过一系列的抽象,你被确定在某一具体层次,比你低的层次为你暴露能够被调用的接口,只要按照接口的约束就能顺利调用,它们实现的具体细节你无需关心;比你高的层次会要求你提供服务,对应地,你也需要根据约定好的要求实现具体的操作。这就是协议,通过抽象分层,向下调用接口,向上提供服务,从而减轻每个抽象层的控制和开发难度
通过分层,我们也能让计网的讲解更加顺畅,分层让我们更好的从细枝末节中解放出来。但是后续就需要自己总结出一套合适的体系,否则就无法完全理解
进一步总结
接下来用一段话稍加描述:
计算机网络就是把多台电脑和相关设备连起来,让它们能互相传数据、共享资源,而要实现这一点,离不开几个核心部分:协议、接口、服务和分层
协议就像电脑之间说话的“规矩”,大家都按同一个规矩来,才能听懂彼此的意思,不然传过去的数据就是乱码;
接口就是设备和网络、或者不同部分之间的“连接口”,就像我们用充电器给手机充电,充电器的接口要和手机接口匹配才能用,网络设备也一样,接口匹配才能正常连接和传数据;
服务就是网络能帮我们做的事,比如传文件、看网页、发消息,这些都是网络提供的服务;
分层就是把网络的工作分成好几层,每一层只做一件简单的事,比如最底层负责把信号传出去,上层负责确认数据有没有传对、有没有传全,这样分工明确,既好操作,也容易排查问题。
我们平时用的网络,底层其实很不稳定,比如网线接触不良、信号被干扰,都可能导致数据传丢、传错,但网络的核心就是在这种不稳定的基础上,尽量保证数据能稳定、可靠地传到目的地,同时还要兼顾速度——不能为了保证数据不丢,就反复检查、反复重传,导致速度很慢,也不能为了追求快,就不管数据丢没丢、错没错
所以网络会通过之前说的分层和协议,找到速度和可靠性的平衡,比如重要的文件传输,就多做几次检查,确保数据没错,而看直播、视频通话,就适当减少检查,保证画面和声音不卡顿
总的来说,计算机网络就是通过合理的分工、统一的规矩和适配的连接,在不稳定的底层环境中,既让我们能快速传数据,又能尽量保证数据传输的稳定可靠,满足我们日常使用的需求。
相信有我这段话的铺垫,你看起来不会很费劲
接下来我们讲的严谨一些,你不必全看懂,但是有空记得回来,学而时习之
计网导论
计算机网络的本质是将分散的计算机与设备通过通信介质连接,实现数据交换与资源共享,而支撑这一切的核心是协议、接口、服务与分层架构
协议是计算机之间通信的规则与标准,规定了数据如何封装、传输、寻址、校验、应答与纠错,是设备间能互相理解的 “语言”,从物理层的电气信号规范到应用层的数据交互格式,所有网络行为都依赖协议
接口则是设备与网络、层与层之间的连接入口,包括物理接口如网卡端口、光纤接口、网线接口,也包括逻辑接口如程序调用的套接字接口,接口定义了连接的形式、电气特性与数据交互格式,让不同厂商、不同类型的设备能兼容互通
服务是网络为上层或用户提供的功能能力,比如可靠传输服务、寻址路由服务、差错检测与重传服务、连接建立与释放服务,底层为上层提供服务,上层基于下层服务构建更复杂的功能,服务隐藏了底层实现细节,让使用者只需关注功能而非实现过程
分层是计算机网络最核心的设计思想,典型如 TCP/IP 四层模型或 OSI 七层模型,将复杂的网络功能拆分为相互独立又协同工作的层次,每一层只专注完成特定任务,下层通过接口为上层提供服务,上层只调用下层服务而无需关心下层实现,分层让网络设计、实现、调试与扩展变得可行,不同层次可独立优化、独立更新,互不干扰
计算机网络面临的根本挑战是底层通信信道天然不稳定,存在信号干扰、数据丢失、误码、延迟、链路中断等问题,因此网络设计的核心目标,就是在不可靠的物理底层之上,通过分层协议与机制,实现尽可能稳定、可靠的传输与服务,同时兼顾传输速度与效率,不能为了极致可靠性牺牲速度,也不能为了速度放弃基本稳定
物理层负责最基础的信号传输,无法保证可靠,只关注比特流的发送与接收
数据链路层通过帧封装、差错检测、确认应答、重传机制,在相邻节点间实现基本可靠传输,解决局部信道不稳定问题
网络层负责寻址与路由,选择数据传输路径,应对网络拓扑变化与链路故障,通过路由协议保证数据能到达目标网络,在复杂多变的网络中维持传输可达性
传输层则是实现端到端可靠性与速度平衡的关键
如 TCP 协议通过三次握手建立连接、序号确认、超时重传、流量控制、拥塞控制,在不可靠的网络之上提供可靠、有序、无差错的端到端传输,适合文件传输、网页访问等对可靠性要求高的场景
UDP 协议不提供复杂可靠性机制,追求轻量化与高速传输,适合视频通话、直播等可容忍少量丢包但要求低延迟的场景
应用层则基于传输层服务,实现具体的网络服务如网页浏览、邮件、文件传输,通过应用层协议适配不同需求,最终让用户感知到稳定可用的网络服务
整个计算机网络体系,就是从底层的不稳定出发,逐层通过协议、接口与服务封装可靠性,每一层都在下层的不确定性上增加稳定保障,同时通过分层解耦优化传输效率,在可靠性与速度之间找到最优平衡,最终让用户在复杂多变的物理网络中,获得稳定、高效、可用的数据传输与网络服务
计网术语清单
一、基础概念
- 网络 — Network
- 协议 — Protocol
- 分层 — Layering
- 模型 — Model
- 标准 — Standard
- 接口 — Interface
- 服务 — Service
- 连接 — Connection
- 通信 — Communication
- 传输 — Transmission
二、体系结构
- OSI 参考模型 — OSI Reference Model
- TCP/IP 模型 — TCP/IP Model
- 应用层 — Application Layer
- 表示层 — Presentation Layer
- 会话层 — Session Layer
- 传输层 — Transport Layer
- 网络层 — Network Layer
- 数据链路层 — Data Link Layer
- 物理层 — Physical Layer
三、硬件设备
- 主机 — Host
- 服务器 — Server
- 客户端 — Client
- 网卡 — Network Interface Card (NIC)
- 集线器 — Hub
- 交换机 — Switch
- 路由器 — Router
- 网关 — Gateway
- 中继器 — Repeater
- 网桥 — Bridge
- 调制解调器 — Modem
- 防火墙 — Firewall
四、地址与标识
- IP 地址 — IP Address
- MAC 地址 — MAC Address
- 端口 — Port
- 子网 — Subnet
- 子网掩码 — Subnet Mask
- 网关地址 — Gateway Address
- 域名 — Domain Name
- 主机名 — Hostname
五、网络层核心
- 路由 — Routing
- 路由表 — Routing Table
- 路由协议 — Routing Protocol
- 分组 — Packet
- 数据报 — Datagram
- 转发 — Forwarding
- 拥塞 — Congestion
- 分片 — Fragmentation
- ICMP — Internet Control Message Protocol
- ARP — Address Resolution Protocol
- DHCP — Dynamic Host Configuration Protocol
六、传输层核心
- TCP — Transmission Control Protocol
- UDP — User Datagram Protocol
- 可靠传输 — Reliable Transmission
- 面向连接 — Connection-oriented
- 无连接 — Connectionless
- 端口号 — Port Number
- 套接字 — Socket
- 确认 — Acknowledgment (ACK)
- 超时重传 — Timeout & Retransmission
- 滑动窗口 — Sliding Window
- 流量控制 — Flow Control
- 拥塞控制 — Congestion Control
- 三次握手 — Three-way Handshake
- 四次挥手 — Four-way Wavehand
七、数据链路层
- 帧 — Frame
- 比特 — Bit
- 字节 — Byte
- 差错检测 — Error Detection
- 纠错 — Error Correction
- 循环冗余校验 — CRC (Cyclic Redundancy Check)
- 介质访问控制 — MAC (Media Access Control)
- 以太网 — Ethernet
- 冲突 — Collision
- CSMA/CD — Carrier Sense Multiple Access with Collision Detection
八、应用层
- HTTP — HyperText Transfer Protocol
- HTTPS — HTTP Secure
- DNS — Domain Name System
- FTP — File Transfer Protocol
- SMTP — Simple Mail Transfer Protocol
- POP3 — Post Office Protocol 3
- IMAP — Internet Message Access Protocol
- 万维网 — WWW (World Wide Web)
- 统一资源定位符 — URL (Uniform Resource Locator)
- 浏览器 — Browser
- 邮件 — E-mail
九、性能与安全
- 带宽 — Bandwidth
- 吞吐量 — Throughput
- 时延 — Delay / Latency
- 丢包 — Packet Loss
- 加密 — Encryption
- 解密 — Decryption
- 认证 — Authentication
- 授权 — Authorization
- 公钥 — Public Key
- 私钥 — Private Key
- 数字签名 — Digital Signature
- 病毒 — Virus
- 攻击 — Attack
十、网络类型
- 局域网 — LAN (Local Area Network)
- 城域网 — MAN (Metropolitan Area Network)
- 广域网 — WAN (Wide Area Network)
- 互联网 — Internet
- 无线网 — Wireless Network
- 移动网络 — Mobile Network
- 点对点 — P2P (Peer to Peer)
- 客户端 / 服务器 — C/S (Client/Server)
更多推荐


所有评论(0)