前言
这篇文章是我在复习,查漏补缺计算机网络时的笔记。在写的时候我参考了一些资料,主要是JavaGuide 上的一篇文章。不过在学习当中我总感觉有一些描述我不太理解,解读起来比较困难,或者我认为不太正确,于是我就写下了自己的理解和一些更好懂的类比。
在这篇文章中我只会写我自认为已经掌握的知识点。但也有可能写了的知识点我也可能理解的不够准确,之后也会改正。
计算机网络分层模型
网络分层是学习计算机网络的一张地图。没有这张地图,HTTP, TCP, DNS等概念就像是散落在地上的碎片,分不清谁依赖谁,谁负责什么。
常见的网络分层模型有两种:OSI七层模型和TCP/IP四层模型。前者是理论模型(概念框架),后者更贴近互联网实际落地模型。
这篇文章主要回答几个问题:
- 为什么要有分层模型?
- TCP/IP 四层模型的每一层的具体职责是什么?
- 在 TCP/IP 四层模型中,每一层的核心技术有哪些?
- 学习具体网络协议时,为什么要先知道它位于哪一层?
不回答这些问题:
- TCP/IP 四层模型的每一层是如何实现并且工作的?
- 路由之间是如何通信的?路由表是如何维护的?路由协议是如何工作的?
- DNS 是如何工作的?
- 等类似问题
因为这个文章只是一个概览,主要目的是让读者对计算机网络有一个整体的认知,知道每一层的作用和核心技术。学习完之后,就可以继续深入学习每一层的具体协议和技术。
TCP/IP四层模型
首先我们要回答一个问题:为什么要有分层模型?
简单来说就是如果没有分层模型,那么我们什么都做不出来。
网络是一个极其复杂的系统,如果在解决进程之间通信问题时又要考虑物理传输问题,又要考虑怎么传输,传输什么,以什么样的格式传输,所有问题都混在一起,那么开发将无法进行。
分层就是分而治之,把一个没办法解决的大问题,拆成几个互不干扰的小问题。
分层可以带来几个好处:
- 复用:例如可靠传输TCP只在传输层实现一次,以后开发时就不需要再去考虑可靠传输的问题了,直接使用TCP就可以了。
- 互操作: 你的 应用 和对方的 应用 出自不同公司、跑在不同系统上,能通信是因为双方遵守同一套公开协议。分层定义了”在哪一层要守什么规矩”,厂商各自实现即可。
- 独立演进: 底下从铜线换成光纤,上面的 HTTP 一行都不用改。
- 排错: 这是最实用的。网页打不开的时候,你可以按层往上排:
- ping 网关 通不通 → 链路层和网络层
- ping 8.8.8.8 通不通 → 路由有没有问题
- nslookup example.com → DNS 解析对不对
- telnet example.com 80 → 端口通不通,传输层
- 都通了还打不开 → 应用层的事
TCP/IP 四层模型是计算机网络的基础,也是当今互联网实际采用的体系结构。它把网络通信过程划分为四层。

这个模型是在一批协议已经实际运行之后归纳总结出来的;而 OSI 七层模型正相反——先有理论设计,再去寻找协议实现,最终未能落地,所以只作为教学用的参考模型存在。
应用层(Application layer)
最上层是应用层,位于传输层之上。用一句话概括应用层的作用:它直接为用户的应用程序提供网络通信服务。
它本身不负责传输,只规定应用进程之间如何通信:交互哪些内容、报文采用什么格式、收到之后如何应答。
例如浏览器与服务器之间的通信,浏览器向服务器发送请求,服务器返回响应。请求和响应的内容、格式、应答方式都需要事先约定好。
这类约定称为协议,本层的协议即应用层协议,常见的有 HTTP、DNS、SMTP、FTP 等。应用层交互的数据单元称为报文(Message)。
如果没有应用层,也就没有一种通信的格式和规则。假如我们有需求,服务器听不懂我们的语言,我们也听不懂服务器的语言(例如一堆101010)。
网络世界就像一个复杂的地下供水系统(IP层、传输层),而你(用户)只是想在水龙头下洗个苹果(应用层需求)。你不需要知道水厂的抽水机是怎么转的、地下的管道是怎么分布的(网络透明性)。你只需要拧开水龙头(调用应用层协议,如HTTP/HTTPS),水就出来了。应用层就是这个暴露给你的、能满足你具体生活需求的水龙头。
应用层协议
应用层协议定义了网络通信规则,对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如支持 Web 应用的 HTTP 协议,支持电子邮件的 SMTP 协议等等。

- HTTP(Hypertext Transfer Protocol,超文本传输协议):基于 TCP 协议,是一种用于传输超文本和多媒体内容的协议,主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候,我们网页就是通过 HTTP 请求进行加载的。
- SMTP(Simple Mail Transfer Protocol,简单邮件发送协议):基于 TCP 协议,是一种用于发送电子邮件的协议。注意:SMTP 协议只负责邮件的发送,而不是接收。要从邮件服务器接收邮件,需要使用 POP3 或 IMAP 协议。
- POP3/IMAP(邮件接收协议):基于 TCP 协议,两者都是负责邮件接收的协议。IMAP 协议是比 POP3 更新的协议,它在功能和性能上都更加强大。几乎所有现代电子邮件客户端和服务器都支持 IMAP。
- FTP(File Transfer Protocol,文件传输协议):基于 TCP 协议,是一种用于在计算机之间传输文件的协议,可以屏蔽操作系统和文件存储方式。注意:FTP 是一种不安全的协议,因为它在传输过程中不会对数据进行加密。建议在传输敏感数据时使用更安全的协议,如 SFTP。
- Telnet(远程登陆协议):基于 TCP 协议,用于通过一个终端登陆到其他服务器。Telnet 协议的最大缺点之一是所有数据(包括用户名和密码)均以明文形式发送,这有潜在的安全风险。这就是为什么如今很少使用 Telnet,而是使用一种称为 SSH 的非常安全的网络传输协议的主要原因。
- SSH(Secure Shell Protocol,安全的网络传输协议):基于 TCP 协议,通过加密和认证机制实现安全的访问和文件传输等业务
- RTP(Real-time Transport Protocol,实时传输协议):通常基于 UDP 协议,但也支持 TCP 协议。它提供了端到端的实时传输数据的功能。
- DNS(Domain Name System,域名管理系统):通常基于 UDP 协议(端口 53),用于解决域名和 IP 地址的映射问题。当响应数据过大或进行区域传送时会改用 TCP。
这里就不详细展开了,后续会有专门的文章介绍这些协议。
数据单元
应用层的协议数据单元称为报文(Message)。
传输层(Transport layer)
传输层是自顶向下的第二层,位于网络层之上,应用层之下。传输层的主要任务是为应用层提供通用的端到端数据传输服务。 这里的端到端在传输层的语境下指的是进程到进程,是数据传输的起点和终点。通用是指多种应用层协议都可以使用同一套传输层协议来传输数据。
在这里,我们不需要关心数据具体是如何从一个进程传输到另一个进程的,我们只需要知道传输层提供了多种传输服务,应用层可以根据自己的需求选择不同的传输服务。例如下面的两种传输服务:

- TCP(Transmission Control Protocol,传输控制协议):提供 面向连接 的,可靠 的数据传输服务。
- UDP(User Datagram Protocol,用户数据协议):提供 无连接 的,尽最大努力 的数据传输服务(不保证数据传输的可靠性),简单高效。
数据单元
传输层的协议数据单元根据传输层协议分为两种:
- TCP 协议的数据单元称为报文段(Segment),简称段。
- UDP 协议的数据单元称为用户数据报(User Datagram)。
网络层(Network layer)
网络层的任务是把传输层提供下来的报文段或者用户数据报封装成分组(Packet),经过若干路由器逐跳转发,送达目的主机。这个过程依赖两项工作:路由(计算并维护路由表)与转发(查表并送出分组)。
举一个类比:应用层就是人,负责定义包裹里面装什么东西,怎么装,对方收到后怎么处理。传输层是快递公司,人可以选择不同的快递公司来寄送包裹,例如顺丰(TCP)和中通(UDP)。网络层就是运输调度系统,负责导航(路由)和分拣转运(转发)。每到一个中转站,只根据地址决定下一站发给谁,而不掌握完整路线——这就是「逐跳转发」。
数据单元
网络层的数据单元是分组(Packet),也就是数据包。
在发送数据时,网络层把传输层产生的报文段或用户数据报封装成分组(packet/包)进行传输。
在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此该协议下分组也叫 IP 数据报
注意:不要把传输层的用户数据报和网络层的IP数据报弄混。
网络层核心技术

- IP(Internet Protocol,网际互联协议):是TCP/IP体系中的网络层通信协议,主要作用是定义数据包的格式、对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地。目前 IP 协议主要分为两种,一种是过去的 IPv4,另一种是较新的 IPv6,目前这两种协议都在使用。
- ARP(Address Resolution Protocol,地址解析协议):ARP 协议解决的是网络层地址和链路层地址之间的转换问题。因为一个 IP 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但 IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 协议解决了 IP 地址转 MAC 地址的问题。
- ICMP(Internet Control Message Protocol,互联网控制报文协议):一种用于传输网络状态和错误消息的协议,常用于网络诊断和故障排除。例如,Ping 工具就使用了 ICMP 协议来测试网络连通性。
- NAT(Network Address Translation,网络地址转换):NAT 协议的应用场景如同它的名称——网络地址转换,应用于内部网到外部网的地址转换过程中。具体地说,在一个小的子网(局域网,LAN)内,各主机使用的是同一个 LAN 下的 IP 地址,但在该 LAN 以外,在广域网(WAN)中,需要一个统一的 IP 地址来标识该 LAN 在整个 Internet 上的位置。
- OSPF(Open Shortest Path First,开放式最短路径优先):一种内部网关协议(Interior Gateway Protocol,IGP),也是广泛使用的一种动态路由协议,基于链路状态算法,考虑了链路的带宽、延迟等因素来选择最佳路径。
- RIP(Routing Information Protocol,路由信息协议):一种内部网关协议(Interior Gateway Protocol,IGP),也是一种动态路由协议,基于距离向量算法,使用固定的跳数作为度量标准,选择跳数最少的路径作为最佳路径。
- BGP(Border Gateway Protocol,边界网关协议):一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议,具有高度的灵活性和可扩展性。
网络接口层(Network interface layer)
网络接口层是TCP/IP模型的底层,负责将上层数据打包并通过物理硬件和传输媒介(如网线、光纤)在相邻节点间发送,实现物理通信的“最后一公里”。
我们可以把网络接口层看作是数据链路层和物理层的合体。
数据链路层(data link layer)
数据链路层通常简称为链路层(两台主机之间的数据传输,总是在一段一段的链路上传送的)。数据链路层的作用是将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
物理层(physical layer)
物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异
数据单元
网络接口层的数据单元有两个:
- 数据链路层的协议数据单元称为帧(Frame)。
- 物理层传输的是比特流(Bit stream),已经不再有”包”的概念
主要核心技术
网络接口层的核心技术不单单包括协议,还包括寻址体系、数据组织方式、介质仲裁机制、差错检测算法,以及运行在网络设备上的转发逻辑。越往底层走,技术就越贴近硬件,也就越难和物理实现剥离开来。
这里列出一些核心技术,供读者了解:
- 寻址:MAC 地址
- 数据组织:帧封装
- 介质仲裁:多路访问控制
- CSMA/CD:有线以太网方案,先监听后发送,检测到冲突则二进制指数退避重试
- CSMA/CA:无线 802.11 方案,无法边发边听,改用随机退避加 ACK 确认
- 转发逻辑:交换机与域的划分
- 地址映射:ARP
- 已知 IP 求 MAC,是网络层与链路层之间的桥梁
- 协议标准
- 以太网 IEEE 802.3、无线局域网 IEEE 802.11
- PPP / PPPoE:点对点链路,含 LCP、NCP 子协议与 PAP / CHAP 认证
- 物理层技术
- 传输介质:双绞线、同轴电缆、光纤、无线电波
- 编码与时钟同步:曼彻斯特编码、4B/5B、8B/10B
- 接口规范:RJ45 针脚定义、电气特性与机械尺寸
- 传输模式:单工、半双工、全双工
封装与解封装
前面把四层拆开讲完了,但真正让这四层连起来的,是数据在其中上下穿行的过程。这个过程叫封装(Encapsulation)和解封装(Decapsulation),它是整个分层模型的主线。
假设你在浏览器里点击了一个链接:
- 应用层:浏览器按 HTTP 协议的格式构造出一个请求报文(请求行、请求头、请求体),交给传输层。此时的数据单元是报文(Message)。
- 传输层:TCP 在报文前面加上 TCP 首部(含源端口、目的端口、序号、确认号、各种标志位等),形成报文段(Segment)。端口号在这里被写入,它决定了对方主机上的哪个进程会收到这份数据。
- 网络层:IP 在报文段前面加上 IP 首部(含源 IP、目的 IP、TTL、协议号等),形成 IP 数据报(Packet)。目的 IP 决定了这个包最终要送到哪台主机。
- 网络接口层:链路层在 IP 数据报前面加上帧首部(目的 MAC、源 MAC、类型),后面加上帧尾(FCS 校验码),形成帧(Frame)。这里的目的 MAC 是下一跳的地址,通过 ARP 查询获得。
- 物理层:把整个帧转换成比特流,以电信号 / 光信号 / 电磁波的形式发送到传输介质上。
每一层都把上一层交下来的全部内容视为不透明的载荷——TCP 不关心里面装的是 HTTP 还是 SMTP,IP 也不关心里面是 TCP 还是 UDP。这种”我只管加我的头,不看你的内容”的约定,正是分层解耦的实现方式。
每一层的首部都不是白加的,它是这一层完成职责所必需的信息:传输层要区分进程,所以加端口号;网络层要跨网寻址,所以加IP地址;链路层要点到点交付,所以加MAC地址。反过来看,只要看懂了每层首部里有什么字段,就等于看懂了这一层在做什么事。
接收端的过程正好相反:
- 物理层:把接收到的信号还原成比特流,交给链路层。
- 网络接口层:检查帧的 FCS 校验,出错则丢弃;检查目的 MAC 是否是自己(或广播 / 已加入的组播),不是则丢弃;然后剥掉帧首部和帧尾,根据 EtherType 字段(0x0800)把载荷交给 IP 模块。
- 网络层:检查 IP 首部校验和与目的 IP,剥掉 IP 首部,根据协议号字段(TCP 是 6,UDP 是 17)把载荷交给 TCP 模块。
- 传输层:剥掉 TCP 首部,根据目的端口号找到对应的进程(如监听 443 端口的 Web 服务器),把数据交上去。
- 应用层:按 HTTP 协议解析报文,处理请求。
注意这里每一层剥头时的动作有一个共同模式:先校验,再分用。所谓分用(Demultiplexing),就是根据首部里的某个字段决定”该把载荷交给上层的哪个模块”——链路层看 EtherType,网络层看协议号,传输层看端口号。这三个字段构成了一条完整的向上分发链路。
中间节点:只拆到需要的那一层
一个包从源主机到目的主机,中途会经过若干设备,但不是每台设备都要走完全部五个步骤:
交换机(二层设备):只解封装到链路层,看一眼目的 MAC,查表转发,IP 首部及以上原封不动。
路由器(三层设备):解封装到网络层。它会丢弃原来的帧首部,根据路由表确定下一跳,然后重新封装一个新的帧(新的源 MAC 是路由器出接口的地址,新的目的 MAC 是下一跳的地址),同时把 IP 首部里的 TTL 减 1。
只有目的主机才会一路解封装到应用层。
这就解释了前面那句话:IP地址全程不变,MAC地址逐跳改写。因为帧在每一跳都被重新造了一个,而IP数据报作为载荷被完整地搬来搬去(除了TTL等少数字段)。
总结
四层小结
- 应用层:进程按协议规则拼报文,决定说什么
- 传输层:进程到进程,靠 IP + 端口找到对方,端到端
- 网络层:主机到主机,靠 IP 找到那台机器,逐跳转发
- 链路层:相邻节点之间,靠 MAC 走通一段链路,帧每跳重造
为什么学习具体协议时,要先知道它位于哪一层?
回到文章开头提的最后一个问题。知道了封装流程,答案就很清楚了:
协议所在的层,决定了它能看见什么、能依赖什么、以及它解决的是谁的问题。
- 你知道 HTTP 在应用层、基于 TCP,就能立刻推断出:HTTP 本身不需要操心丢包、乱序、重传——那些 TCP 已经做完了。所以你不会在 HTTP 规范里找到”超时重传”的内容。
- 你知道 ARP 工作在网络层与链路层的交界,就能理解为什么 ARP 只能在同一个局域网内使用——因为它依赖广播帧,而广播帧出不了广播域。
- 你知道 TCP 在传输层、下面是不可靠的 IP,就能理解 TCP 那些复杂机制(序号、确认、超时重传、滑动窗口)存在的意义:它是在一条不保证送达、不保证顺序的通道上,硬生生构造出一条可靠有序的通道。
- 你遇到网络故障时,也能顺着这条链路自底向上排查:网线插了吗(物理层)→ 同网段能 ping 通吗(链路层 / ARP)→ 能 ping 通网关和外网 IP 吗(网络层)→ 端口通吗(传输层)→ 服务返回什么(应用层)。
这就是分层模型作为”地图”的意义:它不只是把协议归类摆好,更是告诉你每个协议的前提和边界在哪里。
知识点
- Web 服务器就是一台全天候在线的计算机(或者运行在这台计算机上的软件),它的核心任务是:接收用户的请求,并将网页内容(如超文本、图片、视频)发送给用户的浏览器。
- Web 服务器的主要工作听候召唤:在特定端口(如 HTTP 的 80 端口,HTTPS 的 443 端口)静静等待全球用户的访问请求。传送文件:当你在浏览器输入网址时,Nginx 或 Caddy 会在服务器的硬盘里找到对应的网页文件(HTML/超文本),然后通过 HTTP 协议打包发回给你的浏览器。
- 超文本是指包含超链接的文本,用户可以通过点击这些链接在不同的网页之间导航。超文本不仅仅是文字,还可以包含图片、音频、视频等多媒体内容。
- 节点:
- 计算机网络中的节点是指网络中能够发送、接收或转发数据的设备。常见的节点包括计算机、服务器、路由器、交换机等。
- 节点之间通过物理介质(如网线、光纤)或无线信号进行连接,形成网络拓扑结构。
- 每个节点通常都有一个唯一的地址(如 IP 地址),用于在网络中标识和定位该节点。
- 链路
- 链路是指连接两个网络节点之间的通信路径。链路可以是有线的(如以太网电缆、光纤)或无线的(如 Wi-Fi、蓝牙)。
- 链路的主要作用是传输数据包,使得节点之间能够进行通信。
- 链路的质量和带宽会影响数据传输的速度和稳定性。