我们常说的 「TCP/IP」 是指一个协议族系列,并不是指一个「TCP」和一个「IP」两种协议。一般把「TCP/IP」协议族作为一个「分层系统」,比较常用的是「四层」体系和「七层」体系。这里我们只讨论简单清晰的「四层」体系。
「用户数据」从「应用层」到「传输层」再到「网络层」,「链路层」,要经过每一层的处理,封装,当数据到达别一个主机端是,从反方向解析之前封装的数据。
链路层有三个目的:
TCP/IP支持多种不同的协议,取决于网络所用的硬件(这也说明链路层是关系到物理传输媒介),一般有:以太网,令牌环网,光纤分布数据接口,RS-232串行线路等。
以太网协议在RFC894里定义,IEEE802协议在RFC1042里定义。它们都要求每台Internet主机都与一个10Mb/s的以太网电缆相连。
「IEEE802」和「以太网」协议格式差不多:先是6字节的「目的地址」,及硬件物理地址(MAC地址)。后面是源(本机)物理地址。到于6字节物理地址和4字节的IP地址的映射关系,则是ARP和RARP协议的内容。CRC是冗余检验数据。两个协议不同的是中间部分(虚线内的部分):IEEE802有「长度」字段,指的是「数据」的长度(字节);以太网和IEEE802里的「类型」有一样的定义值,参考RFC1340。
SLIP(serial Line IP)它是一种在串行线路上对IP数据报进行封装的简单形式。在RFC1055中说明。SLIP适用于家庭中有RS-232串行端口和高速调制解调器接入Internet。
SLIP协议比较简单,因为它只是简单的封装了IP数据报,在每个数据帧的的开头和结尾都加上一个结束标志字节:「c0」,如果遇到了IP数据报中有「c0」,就要进行转义,这里定义的转义字节是:「db」,所以「dbc0」代表「c0」,[dbdd]代表「db」。这里听起来比较难理解的话,可以类开高级开发语言中转义字符「\」,「\n」代表换行,「\\」代表「\」。
PPP协议是对SLIP协议的加强版。
PPP相比SLIP多了「协议」类型这个字段:
大家都熟知「127.0.10.1」或者「localhost」,也知道它们主要是同一台主机上两个应用进行TCP/IP通信的IP地址或主机名。这就是「环回接口」的相关概念。
NOTE:
链路层传输中,每次单元传输都有一个长度限制,正如前面看到的以太网,IEEE802。这就是MTU(maximum transmission unit),最大传输单元。
PS:本系列文章是学习《TCP/IP详解》这本书做的笔记,基本上是把书里面的要点记下来。虽然基本上是照着书里的字段和图示记录。但是每个章节基本上也是花了很多时间看了很多遍,还要对着书里的一些参考附录学习,如很多的RFC文档引用。像这篇文章就花了我大概八个小时的时间学习去理解。