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