看一下当用户键入中断键时Telnet将发生什么情况。假定在客户主机bsdi和服务器cangogh.cs.berkeley.edu之间建立了一个Telnet会话。图26-17显示了当用户键入中断键后的时间系列(去掉了窗口通告和服务类型)。
报文段1中显示的是中断键(通常是Control_C或Delete已经转换为Telnet的ip(中断进程)命令:。下面的3个字节:,组成了Telnet的DOTIMINGMARK选项。这个标志由客户进程发送,必须使用WILL或WONT响应。所有在响应前收到的数据都要丢弃(除非是Telnet命令)。这是服务器进程和客户机端的同步过程。报文段1没有采用TCP紧急方式。
HostRequirementsRFC叙述了IP命令不能使用Telnet的同步信号来发送。假如可以的话,那么的后面将跟随,同时紧急指针指向DM字节。大多数的UnixTelnet客户有一个选项来使用同步信号发送IP命令,但是这个选项默认是不用的(正如我们这里看到的)。
图26-17行方式下键入中断键后的情况
报文段2是服务器进程对DOTIMINGMARK选项的响应。紧随其后的是报文段3和4中Telnet的同步信号:。报文段3中的紧急指针指向将在报文段4中发送的DM字节。
假如服务器进程到客户进程的窗口已满,那么客户进程发送了如报文段1中的IP命令后就丢弃收到的所有数据。即使服务器进程被TCP流量控制所终止而不能发送如报文段2、3和4中的数据,紧急指针仍然可以发送。这和图26-7中的Rlogin类似。
为什么同步信号要分为两个数据段发送(3和4)?原因就是我们在20.8节中具体讨论TCP紧急指针时提到的情况。有关主机需求的RFC中提到紧急指针应指向紧急数据的最后一个字节,而很多衍生于伯克利的系统中,紧急指针指向紧急数据的倒数第2个字节(回忆一下在图26-6中,紧急指针指向命令字节的前一个字节)。Telnet服务器进程故意把同步信号的第1个字节作为紧急数据,它知道紧急指针将指向下1个字节(即DM字节),而IAC字节和紧急指针必须立即发送,在下一步才发送DM字节。
最后一个报文段6发送的是数据,它是服务器进程发生的提示符。