我们在前面讨论 OSI 和 TCP/IP 分层协定概念的时候╋已经指出?不管协定设计者如何定义层级╋各层级协定大致分成两类?网路群组?和使用者群组。前面介绍的 ARP ?IP?RIP 等协定╋可以算是网路群组的范围╋假如您对前述概念都有一定认识╋已经知道了一个封包如何从一个节点传递到另一个节点。然而╋这仅是 TCP/IP 协定的一半而已╋要完全了解 TCP/IP 的精髓╋在 IP 协定的更上一个层级╋属于使用者群组协定之一?TCP 协定╋是不可不知道的。只有当我们同时把 IP 协定和 TCP 协定理解进来╋才能完整的描述电脑与电脑之间的资料传送过程?也只有如此╋我们才有把握进行日常的 TCP/IP 网路管理。TCP 与 IP 这对孪生兄弟╋是每一个网路管理人员必须混熟的朋友。下面╋我们将一起探讨在 TCP/IP 协定中举足轻重的传送层╋是如何影响我们日常的网路资料传输的。
传送层的功能
在前面讨论网际网路层的时候╋我们知道?网际网路层协定只提供路由资讯的判断╋以确定封包的传送路径。但事实上 IP 协定只确保封包交换设备之间的传输╋并没有提供一套机制来确保数据的传输。在低层的通讯里╋封包可能在传送过程中发生错误╋诸如网路硬体的损坏?网路负荷过重等等╋导致封包被丢弃或损坏。由于封包路由的多样性和复杂性╋以及影响路由因素众多及其不可预测性╋封包之抵达常是不依序的╋或是会发生重复传送的情形。因此╋我们必须提供一套网路技术╋以达成更可靠和有效的传送。
再者╋ IP 封包的体积是有限的╋然而╋网路程式之间交换的数据往往会超过这个体积限制?那么╋我们必须有另一套机制将程式送来的资料进行规划╋以符合 IP 封包的传送要求。在高层的程式里╋除非利用非可靠和非连线型(connectionless)的资料传送方式╋否则,程式设计者必须对每一个一个应用程式处理侦错和修复的动作╋这无疑增加了程式设计和修改的难度╋而且也做成许多重复的处理动作。因此╋我们也有必要找出一个可靠的资料流传送方法╋以建立单独且适用于所有应用程式的资料传送协定。这样就可以将应用程式与网路内部协定隔离╋同时提供一致的资料流传送界面。
在技术上╋行程使用哪一个埠口并不重要╋关键是能让对方知道埠口是哪一个就行。我们可以把 IP 位址看成主机的门牌号码╋而埠口则是服务柜台。在多工的环境下╋行程会在一个门牌上面开启多个柜台。您或许会问:由起始端主动发起之连线封包抵达之后╋它究竟凭什么来判断究竟哪个柜台才是正确的行程呢?在日常的生活中╋大不了逐个柜台去问... 然而在网路系统上面╋这个似乎有点不切实际。因为╋每一个埠口的建立和关闭都是随机的╋在不同的时段里╋所开启的埠口数目和号码都不尽相同。既然如此╋等待连线那端何不先将接收行程所使用埠口号码告知起始端呢?但问题是:既然连线要由起始端主动建立才能连上等待端╋在没有真正连上之前如何得知呢?不是鸡生蛋、蛋生鸡的问题吗?