我所说的“老式”是指速度低于 56k 的调制解调器(尽管它们实际上并没有那么快)。本附录将老式调制解调器与现代调制解调器进行比较。如果您对调制解调器历史感兴趣,或者打算实际使用老式调制解调器,则应该阅读它。此外,许多现代调制解调器和软件仍然支持旧协议,您可能会发现这些旧协议被错误地配置了。
上表排除了租用线路的历史标准:Bell 201B,C (2400 bps) Bell 208A,B (4800 bps;208B = V.27)。
在 1960 年之前,110 bps 调制解调器用于电传打字机(就像电动打字机,但噪音更大)。在电传打字机上输入的内容(或保存在穿孔纸带上的内容)可以打印在远处的远程电传打字机上。没有计算机参与。
1960 年,AT&T 推出了 300 bps 调制解调器(用于其电话系统)。然后在 1962 年,它开始向公众销售 Bell 103 调制解调器。这种速度慢且昂贵的调制解调器后来主要用于在大型计算机之间传输数据,或用于通过电话线将哑终端连接到大型计算机。许多哑终端甚至没有屏幕显示,而是将您在键盘上输入的内容以及来自计算机的响应打印在纸上。
随着 1980 年代初期个人计算机 (PC) 的出现,人们可以使用调制解调器拨号连接到远程大型计算机。在这种情况下,PC 被用作哑终端。但现在可以传输文件,并且一台 PC 可以通过调制解调器连接到另一台 PC。
1980 年代见证了电子公告板系统 (BBS) 的兴起。BBS 仅仅是一台装有调制解调器,监听传入呼叫的计算机。公众可以使用调制解调器拨号连接到 BBS,然后下载免费软件,参与各种主题的讨论,玩在线游戏等。拨号连接到 BBS 就像访问 Internet 站点。不同之处在于,要访问另一个 BBS 站点,您需要拨打另一个号码(并可能支付长途电话费)。许多 BBS 会收取月费,但有些是由志愿者运营的,是免费的。许多公司为客户建立了 BBS,其中包含支持信息、目录等。在 1990 年代初期,BBS 蓬勃发展。到 1990 年代中期,有些甚至提供 Internet 连接。有关 BBS 的一些历史,请参阅 系统操作员角:BBS 历史
然后在 1990 年代中期,Internet 的发展导致 BBS 在 1990 年代末期消亡。一些 BBS 变成了网站,但是当 BBS 大量消亡时,网站非常昂贵,所以大多数 BBS 就消失了。Internet 包含的信息远比任何一个 BBS 可以维护的信息多,因此 BBS 不再具有竞争力。
调制解调器允许公众连接到 Internet。在 1990 年代,调制解调器变得快速、廉价且被广泛使用。然后在 1990 年代后期,出现了更快的非模拟“调制解调器”:ISDN、DSL 和电缆。这些历史不在本 HOWTO 中。
在 V.32 (9600 bps) 之前,调制解调器的速度通常为 300 到 2400 bps。一些超快速的调制解调器具有更高的速度(例如 19.2k bps)并使用非标准协议。要使用这些“快速”调制解调器,连接的两个调制解调器都需要支持相同的专有协议,这通常意味着它们必须是同一品牌。
在 V.42 纠错标准和 V.42bis (1990) 数据压缩标准之前,MNP 标准通常用于纠错和数据压缩。X.PC 纠错标准用于某些商业数据网络。压缩和纠错在某些 2400 bps 调制解调器上可用。
从 1960 年到 1980 年,大多数调制解调器的速度只有 300 bps(这也是 300 波特)。这仅为 0.3kbps。现代调制解调器速度快 100 多倍。一些旧的慢速调制解调器仍在使用,因此它们还不是真正的“老式”。
这些不符合 ITU V 系列标准。使用它们是为了在建立更标准化的更高速度之前获得更高的速度。另一端的调制解调器需要支持相同的协议才能使其工作。下面显示的日期可能只是近似值。
此术语有几种不同的含义。一般来说,它意味着调制解调器到调制解调器速度或调制解调器到串行端口速度的自动调整。
现代调制解调器在首次相互连接时协商调制解调器到调制解调器的速度和协议,并且通常以尽可能高的速度相互连接。如果一方无法协商,另一方应接受固定方可用的任何速度和协议。除非某些现代调制解调器可能不再支持某些老式协议。由于协商的结果,一个调制解调器可能需要使用低于其最大速度的速度才能与另一个调制解调器通信。这有时称为“自动波特率检测”或“自动模式”。它也可能被称为“回退”。“回退”一词更直观的用法是两个调制解调器都因线路噪声而自动降低其速度。虽然自动波特率检测通常是默认设置,但使用 AT 命令(如 或)或寄存器(如 S37)设置固定的调制解调器到调制解调器速度而不是自动波特率检测。
早期的调制解调器没有这种自动波特率检测或回退功能。如果您有这样的调制解调器,那么如果您连接到的另一个调制解调器是现代的,可以调整其速度和协议以适应您的调制解调器,则它很可能可以正常工作。但是,如果想要相互通信的两个调制解调器都是老式的,并且不支持自动模式,则会出现问题。在这种情况下,它们需要手动设置为相同的速度和协议。
即使存在这种自动模式,有时速度的选择也有限(例如仅 1200/300 bps)。在过去(今天很少见),计算机拨号站点可能有一个电话号码用于特定速度(例如 2400),而另一个电话号码用于不同的速度(例如 1200)。通常没有这么简单,因为一种速度可能有一些不同的电话号码,或者一个电话号码可能仅支持几种速度(例如 1200/300)。此外,一个电话号码可能仅支持某种协议,例如 Bell 212A 调制解调器。一旦站点获得了可以支持更广泛的速度和协议的调制解调器,就没有必要拥有不同的电话线路组。
对于旧的调制解调器(主要低于 9600 bps),调制解调器到串行端口的速度必须与调制解调器到调制解调器的速度相同。这是因为数据直接流经调制解调器,而调制解调器内部没有“速度缓冲”(存储字节)。这意味着调制解调器的串行端口和计算机的串行端口都必须设置为此速度。也就是说,串行电缆的两端都必须设置为此速度。
人们可能会错误地推断,如果串行端口速度高于调制解调器到调制解调器速度,一切都会正常工作,因为这样串行线路中就不会有瓶颈。这在从调制解调器到 PC 的方向上可以正常工作,因为速度较高的线路由于字节之间的时间间隔更大,因此吞吐速度可能较低。但是,对于从 PC 到调制解调器的流量,灾难会发生,因为它会以比调制解调器可以传输数据的速度更快的速度流入调制解调器。由于没有速度缓冲,数据将会丢失。
如果调制解调器只有一个调制解调器到调制解调器速度(或者通过软件或物理开关设置为仅以一种速度运行),那么这不是问题,因为只需将 PC 的串行端口设置为此速度即可。调制解调器也会将其串行端口设置为此速度。使速度相等的另一种方法是让调制解调器检测 PC 的串行端口速度,然后将其串行速度和调制解调器到调制解调器的速度都设置为相同。稍后将对此进行解释。
但是,对于使用多种调制解调器到调制解调器速度的调制解调器,则存在问题。在这种情况下,事先不知道调制解调器将以什么速度连接到另一个调制解调器。例如,如果固定速度调制解调器拨号连接到您的调制解调器,并且您的调制解调器支持远程调制解调器的固定速度,那么这就是它将连接的速度。如果 PC 的串行端口速度之前已设置为不同的速度,则需要更改此速度。
但是,将计算机的串行端口设置为调制解调器到调制解调器的速度是一个问题,因为调制解调器无法直接向 PC 的串行端口发出命令来更改其速度。只有系统软件才能做到这一点。调制解调器根据与另一个调制解调器的协商来确定要使用的速度,因此串行端口速度的更改无法提前完成。调制解调器如何将其调制解调器到调制解调器的速度传达给系统软件?
这是一种方法。考虑其他人拨号连接的拨入调制解调器的情况。getty 程序将用于通过调制解调器向用户的终端屏幕发送登录提示。Getty 也将是更改串行端口速度的系统软件。调制解调器将通过向 getty 发送给出调制解调器到调制解调器速度的“CONNECT”消息(例如“CONNECT 2400”)来告诉 getty 它正在使用的调制解调器到调制解调器速度。
但这里有一个问题。如何确保调制解调器通过串行端口发送给 getty 的“CONNECT”消息以与 PC 的串行端口相同的速度发送,而 PC 的串行端口正在期望“CONNECT”消息?这是它的工作方式。
当调制解调器首先被发送初始化字符串时,调制解调器会检测计算机串行端口的速度,并将其调制解调器到串行端口的速度设置为该值。现在它可以与 getty 通信,“CONNECT”消息可以顺利通过。
为了感知速度,调制解调器检查了字符串开头的“AT”。这有时也称为自动波特率检测。对于现代调制解调器,即使在调制解调器连接到另一个调制解调器之后,并且无论调制解调器到调制解调器的速度是多少,此相同的调制解调器到串行端口速度始终保持不变。但是对于我们的旧调制解调器,一旦建立连接,此初始串行速度可能需要稍后更改为调制解调器到调制解调器的速度。
例如,getty 从调制解调器接收到 CONNECT 2400,并将 PC 的串行端口速度切换到 2400。调制解调器也会将其串行端口速度切换到 2400。现在调制解调器串行电缆的两端都为 2400,并且不存在速度不匹配。然后 getty 通过调制解调器在电话线上发送登录提示。2400 bps 现在既是调制解调器到调制解调器的速度,也是调制解调器到串行端口的速度。问题解决了。Mgetty 可以通过将其配置为“自动波特率检测”来做到这一点,但它仅对非常旧(且速度慢)的调制解调器有用。
对于拨出,使用相同的方法,但现在通信软件必须处理它,而不是 getty。
切换调制解调器到调制解调器速度的另一种方法是使用调制解调器功能,其中调制解调器会将其调制解调器到调制解调器的速度设置为与其检测到的调制解调器到串行端口速度相同。Bn AT 命令将启用此功能,并确定每种速度要使用的协议。因此,启用此功能后,通过计算机设置串行速度也会将调制解调器到调制解调器的速度设置为相同。这应该导致此调制解调器在调制解调器之间的任何速度协商中都不灵活。
当拨号连接到站点时,解决串行速度问题的另一种(但更粗略的)方法是让远程站点更改其调制解调器到调制解调器速度以匹配您的串行端口速度。它的工作原理如下:尝试通过调制解调器连接登录的人由于速度不匹配而看不到任何登录提示。因此,尝试登录的人员按下“break”键以通过电话线(通过调制解调器)向远程计算机上的 getty 发送中断信号。即使串行线路中存在速度不匹配,中断信号也始终会通过。
远程 getty 接收到此中断信号,并将远程计算机的串行端口切换到其 getty 配置文件中指定的下一个速度。这个新的远程串行端口速度导致远程调制解调器切换到先前由 ATB 命令配置的相同调制解调器到调制解调器速度。然后,本地调制解调器将以该速度通过本地串行线路传输登录提示。如果看不到登录提示,则再次按下中断键,并尝试新的速度。如此继续,直到远程 getty 最终获得正确的速度(等于本地 PC 上设置的串行速度),并且最终显示登录提示。请注意,PC 键盘没有“break”键,但哑终端键盘有。Mgetty、agetty 和 uugetty 可以执行这种过时的中断方法,它被称为“手动波特率调整”。
在 Linux 中,如果速度设置为 Linux 串行端口不支持的速度(例如 7200 bps),则会出现问题。您可能会拨出并以 7200 bps 连接(调制解调器到调制解调器和调制解调器到串行端口速度),但您只会看到乱码,因为 Linux 不支持串行端口上的 7200。连接后,没有简单的方法可以挂断,因为即使是 +++ 转义序列也无法通过 7200 波特接口发送到调制解调器。
要使用某些现代调制解调器通过老式方法拨出,请设置 &Q0 N0 和 S37=5(如果您想要 1200 bps)。某些 S17 设置因调制解调器的品牌而异。S37=0 是默认值,它以支持的最高速度以现代方式连接。
现代调制解调器可以使用几乎任何串行端口速度。它根本不依赖于调制解调器到调制解调器的速度。为此,它们采用速度缓冲和流量控制。速度缓冲意味着调制解调器具有缓冲区,因此调制解调器到调制解调器的速度和调制解调器到串行端口的速度可能存在差异。如果进入调制解调器的流量快于流出调制解调器的流量,则多余的流量将简单地存储在调制解调器中的缓冲区中。然后,为了防止缓冲区溢出,调制解调器会发送流量控制信号以停止输入到它的流量。这对于任何流量方向都是如此。有关更多详细信息,请参阅 流量控制。
Hayes 引入了 AT 命令集,其他调制解调器制造商也将其作为标准采用。在 AT 命令之前,许多调制解调器使用拨码开关来配置调制解调器。另一个命令集是 CCITT V.25bis 命令集。一些调制解调器同时支持 CCITT 和 AT 命令。CCITT V.25bis 还规定了如何使用 ASCII 或 8 位 EBCDIC 字符集进行同步调制解调器到串行端口通信。
这是将调制解调器连接到电话的方式,使用您可以听到的音频音调。调制解调器包含一个麦克风和扬声器,它们“直接对话”到电话听筒中,而无需使用任何电线。从某种意义上说,它是“无线”的,但使用声波而不是无线电波。调制解调器扬声器与电话麦克风(在听筒上)接触,以便来自调制解调器的音调进入电话。调制解调器麦克风从电话听筒扬声器拾取音调。这种方案称为“声耦合”。
一个主要问题是外部噪音会干扰并导致错误。优点是方便:无需插入电缆。大多数可以做到这一点的调制解调器只有 300 波特,但也使用了更高的速度。据说 9600 bps 使用此方案效果不佳。
MNP 2、3 或 4 用于纠错。MNP 5 是压缩。现代调制解调器通常使用 V42(纠错)和 V42bis(压缩)。许多调制解调器同时支持 MNP 和 V42。
PC Today,2004 年 9 月,v.2 #9,pp 110-111:“拨号上网的兴衰”
Modem-HOWTO 结束