解读《TCP/IP详解》(卷1):02章:链路层
来源:互联网 发布:第四产业是什么知乎 编辑:程序博客网 时间:2024/06/05 02:46
2.1引言
在TCP/IP协议族中,链路层主要有三个目的:
(1)为IP模块发送和接收IP数据报。
(2)为ARP模块发送ARP请求和接收ARP应答。
(3)为RARP发送RARP请求和接收RARP应答。
TCP/IP支持多种不同的链路层协议,具体取决于网络所使用的硬件,本文讨论以太网链路层协议,串行接口链路层协议(SLIP和PPP)以及回环(127.0.0.1)驱动程序。
2.2以太网和IEEE 802封装
以太网(Ethernet)指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带局域网规范,是当今现有局域网采用的最通用的通信协议标准。以太网络使用CSMA/CD(载波监听多路访问及冲突检测)技术,并以10M/S的速率运行在多种类型的电缆上。后来IEEE 802委员会公布了一个稍有不同的标准集。
在TCP/IP世界中,以太网IP数据报的封装格式是在RFC 894中定义的,IEEE 802网路的IP数据报格式封装格式是在RFC 1042中定义的。主机需求RFC要求每台Internet主机都与一个10M/s的以太网电缆相连:
(1)必须能发送和接收 RFC 894(以太网)封装格式的分组。
(2)应该能接收与RFC 894混合的RFC 1042(IEEE 802)封装格式的分组。
(3)也许能够发送采用RFC 1042格式的分组。如果主机能同时发送两种类型的分组数据,那么发送的分组必须是可以设置的,而且默认必须是RFC 894分组。
这里我们可以看出以太网的封装格式还是最普遍被人们接受的。
两种帧格式都采用48位(6字节)的目的地址和源地址,802.3允许16位地址,但一般也是48位。这就是我们通常所说的硬件地址(MAC地址)。接下来的两个字节在两种帧格式中互不相同。802中,长度字段是指它后续数据的字节长度,不包括CRC(循环冗余)校验码。而以太网中这两个字节是定义了后续数据类型的类型字段。802中的类型字段则由后续的SNAP(子网接入协议)的首部给出。幸运的是,802的有效长度指和以太网的类型值无一相同,这就可以对两种帧格式进行区分。
上图为IEEE 802.2/802.3(RFC 1042)与以太网封装格式图
其中:
LLC:逻辑链路控制 这是802网络共有的
DSAP:目的服务访问点 值0xaa
SSAP:源服务访问点 值0xaa
以太网和802.3都有帧的最小长度要求。802.3规定数据部分至少38字节,而以太网而要求46字节。如不能满足,则在不足的空间插入填充(pad)字节。
------------------------------
另外,RFC 893 描述了一种尾部封装,这种封装格式已经遭到反对。它的内容是将以太网数据帧的IP首部与TCP首部移到尾部CRC之前。
2.3 SLIP(串行线路IP)
SLIP
SLIP(Serial Line Internet Protocol,串行线路网际协议),主要在Unix远程访问服务器中使用,现今仍然用于连接某些ISP。因为SLIP协议是面向低速串行线路的,可以用于专用线路,也可以用于拨号线路,Modem的传输速率在1200bps到19200bps。RFC1055中有详细描述。
帧格式的规则:
(1)IP数据报以一个被称作END(0xc0)的特殊字符结束。同时为防止数据到来前的噪声,通常在开始处也会传一个END,用来标识数据的起始部分。
(2)若IP报文中某个字符为END,那么要连续传输两个字节0xdb,0xdc来代替。(好比,编程语言中要打印特殊含义的字符的时候要加转义字符)
(3)若IP报文中某个字符为ESC,那么要连续传输两个字节0xdb,0xdd来代替。
SLIP的缺陷:
(1)每一端必须知道对方的IP地址,不能把本端的IP地址通知给另一端
(2)数据帧中没有类型字段。如果一条串行线路用于SLIP,那么它不能同时使用其他协议。
(3)SLIP中没有类似于以太网的CRC校验字段,这样纠错能力差。
CSLIP
传统的串行线路速率较低,为了传输1个字节的数据需要20个字节的IP首部和20个字节的TCP首部。因此,人们提出CSLP(压缩SLIP),他将前面提到的40个字节压缩到3到5个字节,且能够在两端维持多大16个TCP连接,并且知道其中每个连接的首部中的某个字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。被压缩的首部大大缩短了交互响应时间。
2.4 PPP(点对点协议)
PPP协议修改了SLIP协议中的所有缺陷:
包括三个部分:
(1)在串行链路上封装了IP数据报的方法。PPP既支持数据位8为和无奇偶检验的异步模式,还支持面向比特的同步链接。
(2)建立、配置及测试LCP(数据链路的链路控制协议)。它允许通信双方进行协商,以及确定不同的选项。
(3)针对不同网络层协议的NCP(网路控制协议)体系。当前RFC定义的网络层有IP、OSI网络层、DECnet以及AppleTalk。例如,IP NCP允许双方商定是否对报文首部进行压缩,类似于CSLIP
PPP数据帧的格式看上去很像ISO的HDLC(高层数据链路控制)。每一帧都以标志0x7e开始和结束,紧接着是一个地址字节,值始终是0xff,然后是一个值为0x03de控制字节。接下来是协议字段(类似于以太网中的类型字段):
其值为0x0021时,表示信息字段是一个IP数据报
其值为0xc021时,表示信息字段是链路控制数据
其值为0x8021时,表示信息字段是网络控制数据
标志字节值是0x7e,因此如果信息字段中出现此字符时,PPP需要对其转义。同样特殊字符0x7d也需要进行转义。
过程如下:
(1)当遇到0x7e时,需连续传送两个字符:0x7d和0x5e,以实现标志字符的转义。
(2)当遇到0x7d时,需连续传送两个字符:0x7d和0x5d,以实现转义字符的转义。
(3)默认的,如果字符的值小于0x20,一般都要进行转义。由ASCLL表可以看出20(16进制)以内的字符大都是控制字符,所以需要转义。
HEX
字符
解释
HEX
字符
解释
00
NUL
空字符
10
DLE
数据链路转义
01
SHO
标题开始
11
DC1
设备控制1
02
STX
正文开始
12
DC2
设备控制2
03
ETX
正文结束
13
DC3
设备控制3
04
EOT
传输结束
14
DC4
设备控制4
05
ENQ
请求
15
NAK
拒绝接收
06
ACK
收到通知
16
SYN
同步空闲
07
BEL
响铃
17
ETB
传输块结束
08
BS
退格
18
CAN
取消
09
HT
水平制表符
19
EM
介质中断
0A
LF
换行符
1A
SUB
替补
0B
VT
垂直制表符
1B
ESC
溢出
0C
FF
换页符
1C
FS
文件分割符
0D
CR
回车符
1D
GS
分组符
0E
SO
不用切换
1E
RS
记录分割符
0F
DI
启用切换
1F
US
单元分割符
PPP比SLIP只多了额外3个字节,一个字节留给协议字段,另外两个留个CRC字段。
总体看,PPP比SLIP有如下优点:
(1) PPP 支持在单根串行线路上运行多种协议,不只是I P 协议
(2) 每一帧都有循环冗余检验
(3) 通信双方可以进行 I P地址的动态协商(使用I P 网络控制协议)
(4)与C S L I P类似,对T C P和I P 报文首部进行压缩
(5) 链路控制协议可以对多个数据链路选项进行设置
为这些优点付出的代价是在每一帧的首部增加 3个字节。。虽然如今SLIP用户依然比PPP用户多,但最终SLIP将会被取代。
2.5回环接口(127.0.0.1)
回环接口,又叫环回接口都是Loopback Interface的翻译,不过我觉得环回有点拗口。关于这个127.0.0.1基本上学过网络编程的人都不会陌生。比如你用java写一个c/s的程序,要用自己的PC又当Server又当Client。就需要这个回环地址。同样java中可以用localhost代替。A类网络号就是为了回环接口预留的,大多数系统喜欢分配127.0.0.1,所以在你不装网卡的时候用ping命令也是可以通的。.当你把ip数据报传给这个接口的时候,就不能再任何网络上出现了。
也许你会觉得,既然是自己给自己传递数据。那么就不必先一层一层向下传,再一层一层向上传递了。但是多数厂品还是会完成传输层和网络层的传递过程。回环接口可以看作是网络层下面的另一个链路层。与其他链路层一样,只不过他把数据又返回了IP输入队列中。
2.6MTU(最大传递单元)
链路层对于传输的数据是有长度限制的。不同网络有所不同。
网络
MTU字节超通道
65535
10Mb/s令牌环(IBM)
17914
4Mb/s令牌环(IEEE 802.5)
4464
FDDI
4352
以太网
1500
IEEE 802.2/802.3
1492
X.25
576
点到点(低时延)
296
上面的点到点的链路层(SLIP和PPP)的MTU并非是值网络媒体的物理特性,只是一个逻辑限制,为了加快交互相应速度。
如果两台主机在同一个网络,那么该网络的MTU就不用说了,确定了。但是如果两个主机在两个不同的网络,进行通信的时候中间又经过不同的网络,美每个网络都有不同的MTU,那么该次通信的MTU是多少呢?答案也很理解,就是其中的最小值。称为“路径MTU”。实际上,两台主机之间的路径MTU不是一个常数。这取决于当时所选的路由。比如,从小明到小红家有好多条路可以走,小明并不一定每一次都走同一条路哦。
- 解读《TCP/IP详解》(卷1):02章:链路层
- 解读《TCP/IP详解》(卷1):01章:概述
- 解读《TCP/IP详解》(卷1):03章:IP(网际协议)
- 解读《TCP/IP详解》(卷1):04章:ARP(地址解析协议)
- 解读《TCP/IP详解》(卷1):05章:RARP(逆地址解析协议)
- TCP/IP 详解 卷1 ch2 链路层
- 《TCP/IP详解 卷1》 笔记: 链路层
- TCP/IP详解卷1:协议(第二章:链路层)
- TCP/IP详解卷1:第二章(链路层)
- TCP/IP详解卷1 读书笔记:第二章 链路层
- 《TCP/IP详解 卷1:协议》 读书笔记 第二章 链路层
- TCP/IP详解卷1笔记_第二章 链路层
- 《TCP/IP详解 卷1:协议》第二章 链路层
- 《TCP/IP详解 卷1:协议》 读书笔记 第二章 链路层
- TCP/IP详解卷1-协议:TCP
- TCP/IP详解卷1:第三章(IP:网际协议)
- TCP/IP详解卷1 读书笔记:第三章 IP网际协议
- TCP/IP详解卷1 读书笔记:第九章 IP选路
- 数据结构之顺序表
- Ubuntu下MPI并行环境配置
- 编译QtE-4.5.3出现的问题
- Permutations II 排列II
- java 动态代理 黑马程序员学习笔记(8)
- 解读《TCP/IP详解》(卷1):02章:链路层
- tslib移植中环境变量编辑
- 物化视图 数据库
- java基础
- 注册表的读写
- 寒假ACM训练(二)
- 二维数组和二级指针
- 转行的2013
- 编译qtopia-opensource-src-4.2.4错误总结