Skip to content

FTP 与 DHCP

2026 大纲 六(三)1 FTP 的工作原理六(三)2 控制连接与数据连接;另承载 四(三)4 DHCP——大纲把它编排在「网络层 → IPv4」条目下,与 ARPICMP 列在一起;但那是大纲的目录归属,不是分层判定:DHCP 自身是应用层协议(报文由 UDP 67/68 承载),它分发的只是网络层配置参数。本篇按协议实际所在的层次收在应用层。

速查

FTP

要解决什么减少或消除不同操作系统下处理文件的不兼容性——存储格式/目录结构与命名/命令/访问控制四类差异
🔴 属"复制整个文件"这一类要存取就必须先获得一个本地副本,改完再整份传回;对照 NFS 那类联机访问只在网络上传送少量修改数据
服务器进程结构主进程打开熟知端口 21 接活后立刻回到监听,从属进程(控制进程 + 数据传送进程)干活、完事即终止,两者并发进行
🔴 控制连接 21、数据连接 20控制连接整个会话保持打开、只传命令与响应、不传文件;数据连接每次传送才建立、传完就关闭
🔴 主动/被动说的是服务器的姿态判据是"数据连接的 SYN 由谁发":主动(PORT)服务器从 20 端口连向客户;被动(PASV)服务器开一个随机端口等客户来连,能穿 NAT,实际更常用
🔴 列目录也要开数据连接LISTRETR 同类(都要回传一批内容);CWD、登录鉴别这类只交换命令应答的不开。故 m 次数据传送共需 m+1 条 TCP 连接,任一时刻最多 2 条并存
带外控制的独有价值控制信息不被数据阻塞——传输途中客户还能发"请求终止传输";单连接时这条命令会排在没传完的文件数据后面
FTP 有状态服务器要维护当前目录、认证状态(对照 HTTP 无状态);明文传输,SFTP/FTPS 是安全替代

DHCP

为什么不能出厂烧死 IPIP 地址不仅包括主机号,还包括网络号——它指出这台计算机连在哪个网络上,出厂时无法知道。MAC 标识设备本身,IP 标识接入位置
要配的四项IP 地址、子网掩码、默认路由器的 IP 地址、域名服务器的 IP 地址
端口 67/68服务器 67、客户 68,都是熟知端口。不用 TCP 有两条理由:客户此时连自己的 IP 都没有(TCP 四元组要源 IP);需要广播而 TCP 不支持广播
第一个报文怎么发出去源 IP 设为全 0 0.0.0.0、目的 IP 设为全 1 255.255.255.255;本地网络所有主机都收得到,但只有 DHCP 服务器才对它回答
🔴 Request 已经选定仍用广播为的是让落选的服务器立刻把预留地址收回地址池;若用单播,它们只能干等到超时才敢回收
🔴 广播/单播要分两层看Discover 与 Request 在两层上都必须广播;Offer/ACK 常见组合是 IP 广播 + MAC 单播(用 Discover 带来的客户 MAC)。先分清问的是 IP 还是 MAC
🔴 两个计时器都以租期起点为原点T1=0.5TT2=0.875T 不是叠加关系T1原服务器续租,T2 重发请求,到期仍未成则重走 DORA
🔴 收到 DHCPNACK 要立即停用这与"两次续租都超时"是两条不同的失败路径,不能等到租期届满
租用期用 4 字节二进制表示、单位秒,范围 1 秒到 136 年;协议不规定取多长,由服务器决定,客户也可在报文里提出要求
🔴 中继代理不是 DHCP 服务器它只把广播转成单播转发、等回答再发回主机,自己不分配地址、不维护地址池

第一部分:FTP 文件传送协议

一、两条连接的分工

FTP 客户端与服务器端各有一个控制进程和一个数据传送进程,两端之间同时存在两条 TCP 连接

图源:谢希仁《计算机网络》(第 8 版)「FTP 使用的两个 TCP 连接」,印刷 p270。图中椭圆表示进程;两条连接分别连着两对不同的进程——控制进程对控制进程、数据传送进程对数据传送进程,不是同一个进程开的两个 socket。

工作次序:客户向服务器的熟知端口 21 发出连接请求,同时告诉服务器自己的另一个端口号;服务器的控制进程据此创建数据传送进程和数据连接,用自己的熟知端口 20 与客户提供的端口建立数据连接;传送完毕后数据传送进程关闭数据连接并结束运行,而控制连接仍然保持。

为什么非要两条。 教材给的两条好处里,第一条(协议更简单:命令和数据不必在同一条字节流里混着走,就不需要转义或长度前缀来区分"这是命令还是文件内容"——对照组帧的透明传输问题,单连接必须解决它,双连接直接绕开)只是省事;真正独有的是第二条:传输文件时还可以利用控制连接对文件的传输进行控制。而两个不同的端口号保证了数据连接与控制连接不会发生混乱。

主动模式(PORT)被动模式(PASV)
数据连接发起方服务器(从端口 20 连向客户指定的端口)客户
服务器端数据端口20服务器打开的一个随机端口,通过控制连接告知客户
谁把端口号告诉对方客户告诉服务器自己的数据端口服务器告诉客户自己的数据端口
NAT/防火墙友好性差——客户在 NAT 后面时服务器连不进来好,实际中更常用

传输模式另有两种:ASCII 模式传文本文件、自动做换行符转换,二进制模式逐字节传输不做任何转换(图片、视频、压缩包用它)。

一次会话中的 TCP 连接数怎么数(想把"几条连接、最多几条并存"数到不出错时展开)

某用户登录 FTP 服务器后先执行 2 次 ls(列目录),再下载 3 个文件,最后退出。

第 1 步:控制连接。 整个会话期间只建立一次、一直保持到退出,共 1 条。

第 2 步:数据连接。 判据是"这次操作要不要通过网络回传一批内容"——LIST(列目录)回传的是目录列表、RETR(取文件)回传的是文件,两者同类,都要开数据连接;而 CWD(改变目录)、登录鉴别这类只交换命令与应答的操作不开。所以

数据连接=2列目录+3下载文件=5 

容易漏掉列目录那 2 条。教材只写到"数据传送进程实际完成文件的传送",没有细到命令一级,这条判据要自己补上。

第 3 步:合计与并发数。 总计 1+5=6 条;但同时存在的最多只有 2 条(1 条控制 + 1 条正在传输的数据连接),因为数据连接传完就关闭,那 5 条是先后建立的、不是并存的。

一般化:完成 m 次数据传送(含列目录)的会话共需 m+1 条 TCP 连接,任一时刻最多 2 条并存。

反面参照:TFTP 为什么可以不要这两条连接(大纲外,只作对照,不必背细节)

TFTP(简单文件传送协议)也用客户服务器方式,但使用 UDP,因此需要有自己的差错改正措施。

对比项FTPTFTP
传输层TCPUDP(熟知端口 69
连接数两条(控制 + 数据)无连接
交互支持(列目录、改目录、鉴别)不支持交互,无命令集、不能列目录、不能鉴别用户
可靠性由 TCP 提供自己实现,工作很像停止-等待协议
数据单元字节流每次 512 字节,最后一次可不足 512

TFTP 的可靠机制与停止-等待协议同构:发完一个文件块就等确认,确认时指明所确认的块编号(从 1 开始按序编号),超时未收到确认就重发。它的结束判据很巧妙:若文件长度不是 512 字节的整数倍,最后一个数据报文一定不满 512 字节,这本身就是结束标志;若文件长度恰好是 512 的整数倍,传完后还必须再发一个只含首部、无数据的报文,否则接收方无法判断结束。

它仍然存在的两个理由:可用于 UDP 环境(同时向许多机器下载时很有用);代码所占内存小——无盘设备只要固化 TFTP + UDP + IP 的小容量只读存储器,通电后就能广播一个 TFTP 请求把可执行程序拉下来。

把两者对照着看,FTP 用两条 TCP 连接换来的正是 TFTP 缺的那些:交互、鉴别、目录操作、可靠传输不用自己写。


第二部分:DHCP 动态主机配置协议

二、DORA 四步

DHCP 提供的这套机制称为即插即用连网(plug-and-play networking)——主机接上网线就能自动拿到全部配置,不需要人工干预。

Offer 里有一处次序值得单独记:服务器先在其数据库中查找该计算机的配置信息,找到则返回找到的信息,找不到才从服务器的 IP 地址池中取一个地址分配给它——这正是"位置固定的服务器能拿到永久地址"的实现方式。Offer 的内容包括分配的 IP 地址、子网掩码、默认网关、DNS 服务器地址与租约期限。

三、租约机制

DHCP 分配的 IP 地址是临时的,可用时间称为租用期 T。客户拿到后设两个计时器:

时刻事件客户做什么服务器可能的回应
T1=0.5T租用期过半原服务器DHCPREQUEST 请求更新租用期同意 → DHCPACK,得到新租用期并重设计时器;不同意 → DHCPNACK
收到 DHCPNACK被拒必须立即停止使用原来的 IP 地址,回到第一步重新申请
T2=0.875T原服务器一直不响应重新发送 DHCPREQUEST,然后继续后面的步骤
任意时刻想提前退租发送 DHCPRELEASE

两个系数不是随手取的:T1T2 之间有 0.375T 的余量留给第一次续租重试,T2 到租约到期之间还剩 0.125T 留给第二次——两次机会、逐次收窄、到期前留缓冲

把租约时刻算成钟表时间(想确认自己没把 T2 当成叠加关系时展开)

某服务器把租用期设为 2 小时,客户在 09:00:00 收到 DHCPACK 并开始使用地址。

第 1 步:统一单位。 T=2 h=7200 s。租用期在协议里以为单位表示(4 字节二进制),换成秒之后两个系数直接乘就行。

第 2 步:第一次续租。 T1=0.5×7200=3600 s=60 min,即 10:00:00 向原服务器发 DHCPREQUEST

第 3 步:第二次续租。 T2=0.875×7200=6300 s=105 min,即 10:45:00 重新发送 DHCPREQUEST。注意 T2 是从租期起点算的绝对时刻,不是"从 T1 再过 0.875T"——搞错会把答案算成 09:00 + 60 min + 105 min。

第 4 步:失效时刻。 TT2=900 s=15 min,第二次尝试之后还剩 15 分钟缓冲;到 11:00:00 租期届满仍未续租成功,客户必须停止使用该 IP 地址并重新执行完整的 DORA 过程。

另一条失败路径要分清:若服务器明确回了 DHCPNACK,客户必须立即停止使用原地址、马上重新申请,不能等到 11:00:00。

四、DHCP 中继代理

DHCP 用广播,而广播不能跨越路由器。解决方案不是每个子网都放一台服务器(数量太多),而是让每一个网络至少有一个中继代理,通常就是一台配置了 DHCP 服务器 IP 地址的路由器。

它把"广播 → 单播"这一步做了,正好抵消了"广播不能跨路由器"的限制。顺带一条封装上的提醒:DHCP 报文只是 UDP 用户数据报的数据,还要加上 UDP 首部、IP 数据报首部以及以太网 MAC 帧的首部和尾部,才能在链路上传送。

本节小结

  1. FTP 的两条连接分工固定:控制连接(21,整个会话保持,只传命令与响应,不传文件)+ 数据连接(20 或随机端口,每次传送建立、传完关闭)。带外控制真正独有的价值是控制信息不被数据阻塞——传输途中还能下"请求终止传输"。主动/被动看数据连接由谁发起;m 次数据传送(含列目录)共需 m+1 条连接,任一时刻最多 2 条并存。
  2. DHCP 的存在理由是 IP 地址含网络号:它标识接入位置而非设备本身,出厂时无法确定,只能动态配置。它用 UDP 67/68,因为客户此时还没有 IP、且需要广播;第一个报文靠源 IP 全 0、目的 IP 全 1 发出去,只有 DHCP 服务器才回答。
  3. DORA 四步:Discover 广播找服务器 → Offer 先查数据库、查不到再从地址池取 → Request 仍用广播,为的是让落选服务器收回预留地址 → ACK 进入已绑定状态。租约两个计时器 T1=0.5TT2=0.875T 均以租期起点为原点,收到 DHCPNACK 要立即停用;跨子网靠中继代理把广播转成单播,它自己不分配地址。
教材出处
  • 谢希仁《计算机网络》(第 8 版)印刷 p269,6.2.1 节:「FTP 提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用 ASCII 码),并允许文件具有存取权限」;以及文件共享协议的两大类划分——「它们都是文件共享协议中的一大类,即复制整个文件,其特点是:若要存取一个文件,就必须先获得一个本地的文件副本」,与联机访问(NFS)的对照。
  • 印刷 p270,6.2.2 节:FTP 面临的四类不兼容(存储格式、目录结构与命名、命令、访问控制)与「FTP 的主要功能是减少或消除在不同操作系统下处理文件的不兼容性」;主进程四步工作步骤(打开熟知端口 21 / 等待请求 / 启动从属进程 / 回到等待状态)与「主进程与从属进程的处理是并发进行的」;双连接原文——「在进行文件传输时,FTP 的客户和服务器之间要建立两个并行的 TCP 连接:『控制连接』和『数据连接』。控制连接在整个会话期间一直保持打开……但控制连接并不用来传送文件。实际用于传输文件的是『数据连接』」「由于 FTP 使用了一个分离的控制连接,因此 FTP 的控制信息是带外(out of band)传送的」;端口与好处——「服务器进程用自己传送数据的熟知端口 20 与客户进程所提供的端口号建立数据传送连接。由于 FTP 使用了两个不同的端口号,所以数据连接与控制连接不会发生混乱」「使用两个独立的连接的主要好处是使协议更加简单和更容易实现,同时在传输文件时还可以利用控制连接对文件的传输进行控制。例如,客户发送『请求终止传输』」。本篇引用的图即此页的「FTP 使用的两个 TCP 连接」。
  • 印刷 p271,6.2.3 节:TFTP 的全部对照材料——「虽然 TFTP 也使用客户服务器方式,但它使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施。TFTP 只支持文件传输而不支持交互。TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别」;五条特点(每次 512 字节、按序编号从 1 开始、支持 ASCII 或二进制、可读可写、首部很简单);「TFTP 的工作很像停止等待协议」;熟知端口 69;以及文件长度是否为 512 整数倍时的两种结束判据。
  • 印刷 p304,6.6 节:协议配置的概念与四个配置项目(IP 地址、子网掩码、默认路由器的 IP 地址、域名服务器的 IP 地址);不能出厂烧死 IP 的理由——「这是因为 IP 地址不仅包括了主机号,而且还包括了网络号。一个 IP 地址指出了一台计算机连接在哪一个网络上。当计算机还在生产时,无法知道它在出厂后将被连接到哪一个网络上」;「即插即用连网(plug-and-play networking)」;Discover 的两个特殊地址——「需要 IP 地址的主机在启动时就向 DHCP 服务器广播发送发现报文(DHCPDISCOVER)(将目的 IP 地址置为全 1,即 255.255.255.255)……这台主机目前还没有自己的 IP 地址,因此它将 IP 数据报的源 IP 地址设为全 0……但只有 DHCP 服务器才对此广播报文进行回答」;Offer 的取址次序「DHCP 服务器先在其数据库中查找该计算机的配置信息。若找到,则返回找到的信息。若找不到,则从服务器的 IP 地址池(address pool)中取一个地址分配给该计算机」;以及中继代理的引入。
  • 印刷 p304–p305,6.6 节:中继代理的动作(p304)——「当 DHCP 中继代理收到主机 A 以广播形式发送的发现报文后,就以单播方式向 DHCP 服务器转发此报文,并等待其回答」;封装提醒「DHCP 报文只是 UDP 用户数据报的数据,它还要加上 UDP 首部、IP 数据报首部,以及以太网的 MAC 帧的首部和尾部后,才能在链路上传送」;租用期——「DHCP 协议称这段时间为租用期(lease period),但并没有具体规定租用期应取为多长或至少为多长,这个数值应由 DHCP 服务器自己决定……按照 RFC 2132 的规定,租用期用 4 字节的二进制数字表示,单位是秒。因此可供选择的租用期范围从 1 秒到 136 年。DHCP 客户也可在自己发送的报文中(例如,发现报文)提出对租用期的要求」;端口「DHCP 客户使用的 UDP 端口是 68,而 DHCP 服务器使用的 UDP 端口是 67。这两个 UDP 端口都是熟知端口」。
  • 印刷 p306,6.6 节:工作过程逐条注释——「凡收到 DHCP 发现报文的 DHCP 服务器都发出 DHCP 提供报文,因此 DHCP 客户可能收到多个 DHCP 提供报文」「被选择的 DHCP 服务器发送确认报文 DHCPACK。从这时起,DHCP 客户就可以使用这个 IP 地址了。这种状态叫作已绑定状态,因为在 DHCP 客户端的 IP 地址和 MAC 地址已经完成绑定」;两个计时器——「DHCP 客户现在要根据服务器提供的租用期 T 设置两个计时器 T1 和 T2,它们的超时时间分别是 0.5T 和 0.875T。当超时时间到了就要请求更新租用期」;DHCPNACK 的处理「这时 DHCP 客户必须立即停止使用原来的 IP 地址,而必须重新申请 IP 地址」;以及「若 DHCP 服务器不响应……的请求报文 DHCPREQUEST,则在租用期过了 87.5% 时,DHCP 客户必须重新发送请求报文 DHCPREQUEST」和「DHCP 客户可以随时提前终止服务器所提供的租用期,这时只需向 DHCP 服务器发送释放报文 DHCPRELEASE 即可」。

说明:两个折叠块里的场景与数值(2 次列目录 + 3 个文件;租用期 2 小时)均为自造;能与教材对账的是"数据连接每次传送建立、传完关闭""T1=0.5TT2=0.875T""87.5% 时重发请求"三项,已核对印刷 p270 与 p306 原文。232 秒 ≈ 136 年这一项与教材"1 秒到 136 年"的表述一致。广播标志位等实现细节教材未展开,本篇按"分两层看"这一判据表述,不给绝对结论。

相关知识

网络应用模型TCP 连接管理UDP 用户数据报协议HTTP 协议ARP 地址解析协议ICMP 网际控制报文协议IPv4 地址与子网划分

真题练习

FTP 真题

相关真题(2题)

DHCP 真题