Computer Network Fundamentals
基本概念
端点与会话
端点是指网络中可以发送或接收数据的设备。两个端点之间的通信称为对话。 ## IP 地址 32 位二进制数,通常以点分十进制表示,随着设备连接到不同的局域网而变化。部分由网络号组成,另一部分是主机号,由子网掩码决定。 ## 子网掩码 32 位二进制数,形式为 1111…0000。与 IP 地址直接进行 AND 操作可以得到网络号,与反转的掩码和 IP 地址进行 AND 操作可以得到主机号。 ## MAC 地址 48 位二进制数 每个主机的唯一标识符(出厂后保持不变),网络卡的物理地址,在局域网中与 IP 地址有映射关系。网络卡通过比较数据包中的目标 MAC 地址直接决定是否发送给操作系统。
IP 和 MAC 之间的关系类似于邮寄地址和身份证号码 - 邮寄地址可能会改变,但身份证号码永远不会改变。
问题:既然我们有 IP 地址,为什么还需要 MAC 地址?
IP 地址相当于包裹上的收件人地址。快递员通过收件人地址将线路从起点连接到终点,然后通过不同区域之间的物流转运将包裹送到收件人手中。 MAC 地址相当于包裹上的收件人姓名。MAC 地址更多是为了确认对方的信息。就像包裹跨越几个城市到达你手中时,快递员需要确认收件人是否正确,然后才能将包裹交给你。 例如,同班的学生(抽象为局域网)彼此都认识,因此沟通不需要依赖学号(在这里抽象为 IP 地址),只需直接叫名字(MAC 地址)。
虽然有 IP 地址,但在局域网中并不工作,因为使用 ARP 协议(地址解析协议)进行网络寻址,而在局域网中所有主机都是彼此可见的。(此外,局域网中的 IP 地址最多用于作为主机接收数据包时判断是否为目标主机的标准,在 ARP 广播解包时选择是否响应 ARP 回复)。
网关
网关是连接一个网络与另一个网络的“门”。它是网络的检查点。例子包括交换机和路由器。 网关也称为网络连接器和协议转换器。默认网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于互连具有不同高级协议的网络。网关结构类似于路由器,区别在于互连层。网关可用于广域网和局域网的互连。
==注意:由于历史原因,许多 TCP/IP 文献曾将用于网络层的路由器称为网关。如今许多局域网使用路由器进行网络接入,因此网关通常指路由器的 IP==
TCP 和 UDP
UDP
互联网协议套件支持一种无连接的传输协议,称为用户数据报协议(UDP)。UDP 为应用程序提供了一种发送封装的 IP 数据包而无需建立连接的方法。RFC 768 描述了 UDP。 互联网传输层有两个主要协议,相辅相成。无连接的协议是 UDP,几乎没有特别的功能,只是为应用程序提供数据包发送功能,并允许它们在所需级别上构建自己的协议。面向连接的协议是 TCP,几乎做了所有事情。
TCP(更强大但也更复杂)
传输控制协议(TCP)是一种面向连接、可靠的基于字节流的传输层通信协议,由 IETF RFC 793 定义。 TCP 旨在适应支持多网络应用的分层协议体系。连接到不同但互联的计算机通信网络的主机计算机中的配对进程依赖于 TCP 提供可靠的通信服务。TCP 假设它可以从较低级别的协议中获得简单的、可能不可靠的数据报服务。原则上,TCP 应能够在从硬连线连接到分组交换或电路交换网络的各种通信系统上运行。
连接建立与终止
连接建立:
连接终止: 
主要特征
TCP 是一种面向广域网的通信协议,旨在在跨多个网络通信时提供具有以下特征的通信方法: * 基于流的方式; * 面向连接; * 可靠的通信方式; * 在网络条件不佳时,最小化因重传造成的系统带宽开销; * 通信连接维护面向通信的两个端点,而不考虑中间网络段和节点。
为了满足 TCP 协议的这些特征,TCP 协议做出了以下规定: ①数据分片:在发送方对用户数据进行分片,在接收方进行重组,TCP 确定分片大小并控制分片和重组; ②到达确认:当接收方接收到分片数据时,根据分片数据序列号向发送方发送确认; ③超时重传:发送方在发送分片时启动超时计时器,如果超时后未收到相应的确认,则重传该分片; ④滑动窗口:TCP 连接中每一方的接收缓冲区大小是固定的,接收方只允许另一方发送接收方缓冲区可以容纳的数据,TCP 提供基于滑动窗口的流量控制,以防止较快的主机导致较慢的主机缓冲区溢出; ⑤乱序处理:作为 IP 数据报传输的 TCP 分片可能会乱序到达,TCP 会对接收到的数据进行重新排序,并以正确的顺序将接收到的数据交付给应用层; ⑥重复处理:作为 IP 数据报传输的 TCP 分片会有重复,TCP 接收方必须丢弃重复数据; ⑦数据校验和:TCP 维护其头部和数据的校验和,这是一个端到端的校验和,旨在检测数据在传输过程中是否发生变化。如果接收到的分片的校验和有错误,TCP 将丢弃该分片,并不确认接收该段,导致对方超时并重传。
简单区分
互联网传输层有两个主要协议,相辅相成。无连接的协议是 UDP,几乎没有特别的功能,只是为应用程序提供数据包发送功能,并允许它们在所需级别上构建自己的协议。面向连接的协议是 TCP,几乎做了所有事情。
DHCP 服务
DHCP 介绍
DHCP(动态主机配置协议)是一种局域网协议。它指的是一个服务器控制一系列 IP 地址,客户端机器在登录服务器时可以自动获取服务器分配的 IP 地址和子网掩码。 通常应用于大型局域网环境,其主要功能是集中管理和分配 IP 地址,使网络环境中的主机能够动态获取 IP 地址、网关地址、DNS 服务器地址等信息,提高地址利用率。
DHCP 协议使用客户端/服务器模型,动态主机地址分配任务由网络主机驱动。当 DHCP 服务器接收到网络主机的地址申请信息时,它将相关地址配置发送给网络主机,以实现网络主机地址信息的动态配置。
DHCP 功能
DHCP 具有以下功能: 1. 确保任何 IP 地址在同一时间只能被一个 DHCP 客户端使用。 2. DHCP 应能够为用户分配永久固定的 IP 地址。 3. DHCP 应能够与通过其他方法获取 IP 地址的主机共存(例如手动配置 IP 地址的主机)。 4. DHCP 服务器应为现有的 BOOTP 客户端提供服务。
地址分配方法
DHCP 有三种分配 IP 地址的机制: 1) 自动分配:DHCP 服务器为主机分配一个永久 IP 地址。一旦 DHCP 客户端首次成功租用 DHCP 服务器的 IP 地址,它可以永久使用该地址。 2) 动态分配:DHCP 服务器为主机分配一个有时间限制的 IP 地址。当时间到期或主机明确放弃该地址时,该地址可以被其他主机使用。 3) 手动分配:客户端的 IP 地址由网络管理员指定,DHCP 服务器仅告知客户端主机指定的 IP 地址。 在这三种地址分配方法中,只有动态分配可以重用客户端不再需要的地址。
FTP
FTP 介绍
文件传输协议(FTP)是一组用于网络文件传输的标准协议。它工作在 OSI 模型的第七层,TCP 模型的第四层,即应用层,使用TCP 传输而不是 UDP。客户端必须经过“三次握手”过程才能与服务器建立连接,以确保客户端与服务器之间的连接是可靠的,并且是面向连接的,为数据传输提供可靠保证。 FTP 允许用户通过文件操作(如文件添加、删除、修改、查询、传输等)与另一个主机进行通信。然而,用户并不实际登录到他们想要访问的计算机成为完全用户。FTP 程序可以用来访问远程资源,实现用户的往返文件传输、目录管理和电子邮件访问等,即使两台计算机可能有不同的操作系统和文件存储方式。 ### 传输方法 FTP 有两种传输方法:ASCII 和二进制。 #### ASCII 传输方法 假设正在复制的文件包含简单的 ASCII 文本,如果远程机器没有运行 UNIX,ftp 通常会在文件传输过程中自动调整文件内容,以便以另一台计算机存储文本文件的格式解释文件。但通常会出现传输的文件不包含文本文件的情况,它们可能是程序、数据库、文字处理文件或压缩文件。在复制任何非文本文件之前,使用 binary 命令告诉 ftp 按字符逐个复制。 #### 二进制传输模式 在二进制传输中,文件的位顺序被保留,以便原始文件和副本逐位对应。即使目标机器上包含的位序列没有意义。例如,Macintosh 将可执行文件以二进制模式传输到 Windows 系统,而该文件无法在另一个系统上执行。如果以 ASCII 模式传输二进制文件,即使不需要,翻译仍会发生。这将导致数据损坏。(ASCII 模式通常假设每个字符的第一个有效位是无意义的,因为 ASCII 字符组合不使用它。如果传输二进制文件,所有位都是重要的。)
FTP 支持两种模式
FTP 客户端发起 FTP 会话并与 FTP 服务器建立相应的连接。在 FTP 会话期间,需要建立两个连接:控制信息处理和数据处理。控制连接无法完成数据传输任务,仅用于传输 FTP 执行的内部命令和命令响应及其他控制信息;数据连接是服务器与客户端之间文件传输的连接,是全双工的,允许双向数据同时传输。当数据传输完成后,数据连接被撤销,返回到 FTP 会话状态,直到控制连接被撤销,会话退出。 FTP 支持两种模式:标准(PORT 模式,主动模式)、被动(PASV,被动模式)。 #### 端口模式(主动模式) FTP 客户端首先与服务器的 TCP 端口 21 建立连接以发送命令。当客户端需要接收数据时,它在此通道上发送 PORT 命令。PORT 命令包含客户端用于接收数据的端口。当传输数据时,服务器通过其自己的 TCP 端口 20 连接到客户端指定的端口以发送数据。FTP 服务器必须与客户端建立新的连接以进行数据传输。 #### 被动模式 控制通道的建立与标准模式类似,但在建立连接后发送 Pasv 命令。在服务器收到 Pasv 命令后,它打开一个临时端口(端口号大于 1023 且小于 65535),并通知客户端请求在该端口上传输数据。客户端连接到 FTP 服务器的该端口,然后 FTP 服务器通过该端口传输数据。
注意
许多防火墙配置为不允许外部连接,因此许多位于防火墙后面或内部网络上的 FTP 服务器不支持 PASV 模式,因为客户端无法通过防火墙打开 FTP 服务器的高端口;而许多内部网络客户端无法使用 PORT 模式登录 FTP 服务器,因为服务器的 TCP 20 无法与内部网络上的客户端建立新的连接,导致无法工作。
HTTP
超文本传输协议(HTTP)是一种简单的请求-响应协议,通常在 TCP 之上运行。请求和响应消息头以 ASCII 形式给出。 ### 应用场景 HTTP 最初诞生时,主要用于 WEB 内容检索。那时,内容没有现在丰富,布局也不够美观,用户交互场景几乎不存在。对于这个简单的 WEB 内容检索场景,HTTP 表现得相当不错。但随着互联网的发展和 WEB2.0 的诞生,更多的内容开始被展示(更多的图像文件),布局变得更加美观(更多的 CSS),并引入了更复杂的交互(更多的 JS)。用户打开网站主页时加载的数据总量和请求数量也在不断增加。 ### 消息格式 HTTP 消息由客户端到服务器的请求和服务器到客户端的响应组成。
请求消息
请求消息格式如下:
请求行 - 一般信息头 - 请求头 - 实体头 - 消息体
请求行以方法字段开头,后跟 URL 字段和 HTTP 协议版本字段,以 CRLF 结束。SP 是分隔符。除了 CF 和 LF 在最终 CRLF 序列中是必需的,其他都是可选的。有关一般信息头、请求头和实体头的具体内容,请参阅相关文档。
响应消息
响应消息格式如下:
状态行 - 一般信息头 - 响应头 - 实体头 - 消息体
状态码由 3 位数字组成,指示请求是否被理解或满足。原因分析是对原始状态码的简要描述。状态码用于支持自动操作,而原因分析则供用户使用。客户端无需检查或显示语法。有关一般信息头、响应头和实体头的具体内容,请参阅相关文档。
状态码
服务器接收到 HTTP 请求后,将响应信息发送给客户端,放在第一行。最重要的部分是状态码
1 | HTTP/1.1 200 OK |
状态码类型 - 第一位数字
- 1**:请求成功接收,继续处理;范围 100~101
- 2**:服务器成功处理请求;范围 200~206
- 3**:访问的资源已移动,通知客户端重新发送新请求;范围 300~305
- 4**:客户端错误,服务器无法处理请求,例如访问的资源不存在;范围 400~415
- 5**:服务器错误;范围 500~505
常见 HTTP 状态码
- 200:客户端请求成功(常见)
- 302:重定向
- 404:请求的资源不存在(常见)
- 400:客户端请求语法错误,服务器无法理解
- 401:访问未授权
- 403:服务器收到请求但拒绝服务
- 500:服务器内部错误(常见)
- 503:服务器当前无法处理,可能过一段时间后可以处理
具体细节请参见“图解 HTTP”
通信
内部网络通信(局域网)
以太网
以太网是一种计算机局域网技术。
内部网络通信过程
这里提到的内部网络通常指局域网(LAN)。当我们说两个终端在同一内部网络时,实际上是指两个终端的网络号相同。如果两个终端在同一内部网络,它们的通信方式如下
ARP 介绍
ARP 协议
地址解析协议(ARP)是一个 TCP/IP 协议,用于根据 IP 地址获取物理地址。当主机发送信息时,它向局域网中的所有主机广播包含目标 IP 地址的 ARP 请求,并接收返回消息以确定目标的物理地址;在接收到返回消息后,它将 IP 地址和物理地址存储在本地 ARP 缓存中,并保留一段时间,下一次请求直接查询ARP 缓存以节省资源。地址解析协议基于网络中主机之间的相互信任。局域网中的主机可以自主发送 ARP 回复消息,其他主机在接收到时会将其记录在本地 ARP 缓存中,而不检测回复消息的真实性;因此攻击者可以向某个主机发送伪造的 ARP 回复消息,使得发送的信息无法到达预期主机或到达错误主机,构成 ARP 欺骗。ARP 命令可用于查询本地 ARP 缓存中 IP 地址与 MAC 地址的对应关系,添加或删除静态对应关系等。相关协议包括 RARP 和代理 ARP。NDP 用于在 IPv6 中替代地址解析协议。
ARP 欺骗
ARP 欺骗,也称为 ARP 中毒(在网络上常翻译为 ARP 病毒)或 ARP 攻击,是一种针对以太网地址解析协议(ARP)的攻击技术。通过伪造局域网中访客 PC 的网关 MAC 地址,使访客 PC 错误地认为攻击者更改的 MAC 地址是网关的 MAC,导致网络故障。这种攻击允许攻击者获取局域网中的数据包,甚至篡改数据包,并可能使特定计算机或网络上的所有计算机无法正常连接。
免费 ARP
- 检查地址冲突
- 更新自己的 ARP 缓存
互联网通信过程
如果主机在互联网上,目标地址和源地址不在同一内部网络,意味着它们的 IP 地址的网络号部分不一致。这时,数据包需要发送到“默认网关”进行路由。具体通信过程如下:



