流量控制是数据链路层的一项重要的职能,它在接收确认前协调发送的数据数量。
在大多数协议中,流量控制是一系列程序,告知发送方在等到来自接收方的确认之前它能传输多少数据,任何接收设备都有处理进入数据的速度限制和存储进入数据的容量限制。接收设备必须能够在达到这些限制前提示发送设备,并要求传输设备发送的帧少一些或者暂时停止发送。进入的数据必须进过校验和处理才能使用。这些过程通常比传输速度慢。因此,每个接收设备都有一块存储区,称之为缓冲区,存储进入的数据直到他们被处理。如果缓冲区也装满了,接收方必须能告知发送方停止传输直到它能够再次接收为止。
下一篇在介绍数据链路层协议时会介绍窗口机制,就是用于流量控制。
数据链路层需要将位组合成帧,并使帧之间是可识别的。
在数据链路层中,通过添加发送放地址和接收方地址,成帧将一条从源端到目的端的报文分离开来,或者将到不同目的端的报文分离开来。目的方地址定义了分组要去的地方,而发送方地址帮助接收方确认接收。
帧可以分为固定长度成帧和可变长度成帧。
1.固定长度成帧11:43:26.893811 IP 10.135.1.108.39936 > 10.135.38.95.8090: P 1:247(246) ack 1 win 12 <nop,nop,timestamp 3216248128 3584896032>
0x0000: 4500 012a cfdf 4000 3d06 3016 0a87 016c E..*..@.=.0....l
0x0010: 0a87 265f9c00 1f9a a70c c2e3 d9e2 fee9 ..&_............
0x0020: 8018 000c 9e30 0000 0101 080a bfb4 0d40 .....0.........@
0x0030: d5ad 2c20504f 5354 202f 6d71 7173 6572 ..,.POST./mqqser
0x0040: ……
0x0050: ……
0x0060: ……
0x0070: ……
0x0080: ……
0x0090: ……
0x00a0: ……
0x00b0: ……
0x00c0: ……
0x00d0: ……
0x00e0: ……
0x00f0: ……
0x0100: ……
0x0110: ……
0x0120: 7468 3a20 3631 0d0a 0d0a th:.61....
11:43:26.893811 IP 10.135.1.108.39936 > 10.135.38.95.8090: P 1:247(246) ack 1 win 12 <nop,nop,timestamp 3216248128 3584896032>
从IP、TCP首部提取出来的信息:
源IP端口、目的IP端口、PUSH标志、起始字节序号(数据长度)、ack标志、窗口大小12、<TCP选项中的NOP、TCP选项中的NOP、TCP选项中的时间戳、TCP选项中的回送时间戳>
0x0000: 4500 012a cfdf 4000 3d06 3016 0a87 016c
0x0010: 0a87 265f
4500 012a
4:版本号
5:首部长度,5*4字节=20字节
00:服务类型
012a:IP数据包总长度0x12a=298字节=IP首部长度20字节+TCP首部长度32字节+数据净荷246字节
cfdf 4000
cfdf:包唯一标识,0xcfdf=53215
4000:0x4000=010 0 0000 0000 0000:
010:0+不要分片+没有后续分片
0 0000 0000 0000:片偏移0
3d06 3016
3d:生存时间,0x3d=61
06:协议,0x06=6,TCP协议
3016:首部校验和
0a87 016c 0a87 265f
0a87 016c:源IP=10.135.1.108
0a87 265f:目的IP=10.135.38.95
0x0010: 9c00 1f9a a70c c2e3 d9e2 fee9
0x0020: 8018 000c 9e30 0000 0101 080a bfb4 0d40
0x0030: d5ad 2c20
9c00 1f9a
&nbs