TCP/IP之一:网络结构与网络接口层

TCP/IP的层次结构如图1所示,是一个四层结构,各层的核心协议都已经包含在途中,

需要指出的是:

(1)ICMP虽然是放在网络层,但是ICMP也是需要先封装成IP数据包再交给网络接口层的,同理,ARP和RARP也得先由网络接口层封装成帧,再在物理链路上传输。

(2)各层网络协议之间只要接口固定,彼此之间就可以互相通信,各层协议内部实现是自由的,最能体验这一点的是网络层与网络接口层,虽然一般网络层都是运行IP等协议,但是网络接口层确往往有多种选择,比如 以太网、令牌总线、令牌环网、FDDI 等。

(3)处于互联网中的所有运用TCP/IP进行网络通信的主机操作系统都实现了TCP/IP协议栈,这样,当处理网络中的两台主机想彼此通信时,其数据传输过程如图2所示。

图1

图2

图2中的应用层数据途径各层网络协议传输过程如图3所示,数据由上往下传输时,每一层都会在上层传下来的数据前面加个首部,以太网不仅仅加首部,还加尾部。图3中的应用层首部是可选的,可有可无,视应用程序需求而定。在接收端数据由下往上传输,各层会一次取下自己的首部及尾部。

图3

以上是TCP/IP网络的总体结构及数据传输模型,接着我们逐层学习各层的协议,我们由下往上,从底层出发。

网络接口层负责封装数据在物理链路上传输,屏蔽了物理传输的细节,它一方面从网络层拿数据,然后封装发送出去;另一方面是接收数据提交给网络层。

总结而言,它主要是为网络层的IP服务的。

网络接口层中最为著名,应用最为广泛的是以太网,以太网帧格式如下:

帧头8

目的地址6

源地址6

类型域2

数据域46-1500

CRC4

对于以太网的帧格式,需要注意以下几点:

(1)各种图中数字说明的是各字段的字节数,如帧头8表示帧头占8个字节。

(2)各字段的说明:帧头用于同步接收机,并且标识一帧的开始;接下来是目的地址和源地址分别6字节;类型域2个字节,类型域说明数据域放的是哪种类型的数据,ARP,RARP还是IP? 因为这三种数据都需要封装成以太网帧在物理链路上传输,也就是说以太网帧不仅仅是为IP服务的,还为ARP和RARP服务;然后是数据域,数据域的大小由46字节到1500字节,这个取值范围在(3)中说明;最后是4字节的CRC循环冗余校验,对校验码感兴趣的读者可以参考相关信道编码的书籍,如果不想深究,只要知道通过这个校验码我们就可以判断出数据有误出错就行了,这个CRC校验是针对数据域的。

(3)数据域之所以有46-1500这样一个范围,是有原因的。之所以有46的最小长度限制,主要是由于CSMA/CD协议的需要,具体参考http://blog.csdn.net/ericming200409/archive/2010/06/06/5650542.aspx ;之所以有1500的上限限制是比较好理解的,因为如果帧太大的话,一个主机占用链路时间太长,带来不好的用户体验。

(4)由于数据域有了上限和下限的限制,这就引发了一个问题,网络层传下来的数据少于46字节怎么办?或者多于1500字节又怎么办?事实上,ARP和RARP的数据域是28字节,是比46字节少的。对于大于1500字节的数据包,IP层是需要进行IP分片的,这等到网络层的时候再仔细介绍;对于少于46字节的数据包,采用的办法是填充0

(5)MTU:即最大传输单元,是网络接口层的重要概念之一,在以太网中其大小往往就是我们刚刚所说的1500字节。在linux中可以通过命令ifconfig或者netstat的查看主机的所有接口及其MTU。

(6)在用ifconfig或者netstat的查看主机的所有接口及其MTU的时候,我们会发现LO接口,即环回接口,环回接口也是运行在网络接口层,它负责处理发送给本机的数据,发送给网络上其它主机的数据由以太网驱动程序负责发送。



你可能感兴趣的:(TCP/IP)