上次在机房做网络配置作业的时候,盯着屏幕反复纠结面向连接的协议有哪些,课本上零散记了几个,又分不清哪些是虚电路哪些只是简单建立连接,越翻笔记脑子越混沌,旁边同学直接把一张整理好的清单推过来,我也没直接照抄,想着自己抓包看一看才踏实。
打开抓包软件,先点开TCP的流量,能清晰看见三次握手的包来回传递,先是SYN,再是SYN+ACK,最后ACK,连接建立起来之后才开始传数据,传输完还要四次挥手断开链路。那会才直观感受到,面向连接不是随便说的一句话,通信双方在收发数据之前,就得提前搭好一条逻辑通路,后续的数据沿着这个通路有序交付,还会做差错校验、重传,保证数据不会乱序丢失。
一开始脑子混,把UDP也混进来了,还傻乎乎在抓包里找UDP的握手包,翻了半天一个都找不到,才反应过来它本身就是无连接的,不用提前协商链路,发出去就不管了。那一阵总容易把两者放一块对比,看着屏幕上跳动的报文,一点点把不属于这一类的协议剔除出去。
还有FTP,之前一直以为它只是个文件传输工具,没多想底层特性。后来看课程讲解才晓得,FTP控制连接就是基于TCP,先建立连接再下发指令,上传下载文件都依托这条建好的连接去交互,中途连接断了,传输会话也就跟着断掉,没法继续接着跑。
Telnet也是,之前偶尔用来远程登录设备,敲命令的时候一旦网络波动断开连接,会话直接终止,得重新发起连接再登录,它同样跑在TCP之上,属于面向连接的应用层协议。
还有X.25,这个课本里提的不多,当时看资料的时候留意到,它是分组交换里典型的虚电路协议,属于面向连接,通信前要先呼叫建立虚电路,分组沿着同一条路径转发,结束之后释放虚电路,只是现在日常环境里很少能碰到了,大多只出现在理论习题里面。帧中继也算,也是虚电路类型,不过它简化了很多差错控制的工作,交给上层去处理。
折腾好久才搞明白,不是所有叫虚电路的,或者跑在TCP上面的,归类逻辑都一模一样。TCP本身是传输层的面向连接协议,而FTP、Telnet这些应用层协议,是依托TCP这个底层能力,才具备面向连接这个特点,不能把它们放在同一个层级混在一起说。当时踩的误区就是一股脑全部堆在一起记,不分协议所在层级,做题的时候很容易选错。
翻到后面还看见ATM,异步传输模式,同样是面向连接,靠虚通道、虚通路来传输信元,之前只听过名字,完全不清楚它的连接特性,资料上写它可以保障带宽和时延,多用于早年的专线场景,现在日常上网基本接触不到。
那几天晚上对着实验报告,一遍一遍梳理抓包拿到的报文记录,没有刻意背名词,就是顺着通信过程去感受差别。有些协议哪怕名字记住了,不去看它建立、维持、释放连接这一套流程,过两天又会记混。我只说我自己当时梳理时候的感受,不同教材划分方式会有出入,有些老旧协议不同版本的定义也不一样,没法拿我这个当作标准答案。
做到后面那道选择题的时候,还是犹豫了一小会,盯着选项反复回想抓包时候看到的握手报文,慢慢把不属于面向连接的选项划掉。做完保存实验文档的时候,屏幕右下角的抓包软件还在持续抓取来往报文,源源不断的TCP报文还在持续完成连接、传输、断开的整套流程。