Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1299694
  • 博文数量: 436
  • 博客积分: 7854
  • 博客等级: 少将
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-18 16:30
文章分类

全部博文(436)

文章存档

2013年(2)

2012年(56)

2011年(70)

2010年(308)

分类:

2010-08-01 16:45:55

-----------------------------------------
封装         协议 
-----------------------------------------        
IP协议      ICMP、IGMP、TCP、UDP
以太网驱动  IP、ARP、RARP

注意,虽然IP、ARP和RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层。虽然 ICMP、IGMP、TCP、UDP的数据都需要IP协议来封装成数据报,但是从功能上划分,ICMP、IGMP与IP同属于网络层,TCP和UDP属于 传输层。

--------------Linux一站式学习

===================================================

-----------------------------------------
层           协议
-----------------------------------------
应用层       Telnet、Ftp、e-mail
传输层       TCP、UDP
网络层       ICMP、IGMP、IP
链路层       ARP、RARP,设备驱动和接口卡
物理层


数据包在不同层的不同称呼:
不同的协议层对数据包有不同的称谓,
在传输层叫做段(segment),
在网络层叫做数据报(datagram),
在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1。loopback是系统中一种特殊的网络设备,
如果发送数据包的目的地址是环回地址,或者与本机其它网络设备的IP地址相同,则数据包不会发送到网络介质上,
而是通过环回设备再发回给上层协议和应用程序,主要用于测试。

-------------------------------------

(1) IP数据包的格式为:

doc_128065229277357539.files/image0.emf

与数据报的分片与重组有关的字段是:总长度、标识、标志、分片偏移、TTL16位首部校验和。

总长度:总长度以字节为单位,指该IP数据报的总大小,包括首部的20字节以及实际的来自应用层的数据。判断一个数据包是否要进行分片,就是将收到的数据报的总长度与MTU进行比较。如果总长度大于MTU,就需要进行分片。

标识:这个16位的字段标识从源主机发出的数据报。当数据报离开源主机时,这个标识与源IP地址唯一地定义了这个数据报。为了保证唯一性,IP协议使用了一个计数器来标识数据报。当IP协议发送数据报时,就把这个计数器的当前值复制到标识字段中,并把这个计数器的值加1。当数据报被分片时,标识字段的值就被复制到所有的分片中,即同一个数据报的所有分片具有相同的标识。这个标识主要是用于在分片组装的时候对每个分片属于哪个数据报进行判断。本次实验只考虑对同一个数据报进行分片,并把这些分片重新组装,因此不需要做这个判断,只要直接把标识拷贝到各分片中即可。

标志:这是一个3位的字段,如下图所示:

doc_128065229277357539.files/image1.emf

第一个比特保留为以后用;第二个比特是不分片(Do not fragment)位。若这个值是1,机器就不能把该数据报进行分片。若无法把这个数据报通过任何可用的物理网络进行转发,就丢弃这个数据报,并向源主机发送ICMP差错报文。若这个值为0,则在需要的时候可把这个数据报进行分片。第三个比特是还有分片(More fragment),若这个值是1,则表示这个数据报不是最后的分片,这个分片后面还有更多的分片。若这个值是0,则表示这已是最后的或者是唯一的分片。

分片偏移:这个13位的字段表示这个分片在整个数据报中的相对位置。是在原始数据报中的数据偏移量,以8字节为度量单位。这样做是因为分片偏移字段只有13bit长,它不能表示超过8191的字节数。而IP数据报最大的长度为65535字节,因此按8字节为单位可以用13位来表示更多的字节。把数据报进行分片的主机或路由器必须选择每个分片的长度,使得这个长度可以被8整除。

如下图所示,一个具有4000字节的数据报,当MTU=1420字节的时候,被划分为3个分片,每个分片长度为1400字节,1400字节是可以被8整除的。

doc_128065229277357539.files/image2.emf

为减少分片的数量,每个分片的长度应尽可能大。为用片偏移表示片段的起始位置,除最后一个分片外,其它分片的长度(数据部分,不包括IP)应能被8整除。如MTU=505的时候,除去20字节IP头,可以传输的最大数据段长度为485字节,但可被8整除及不不超过485的最大整数为480,需要按480来进行分片。

TTL在分片的时候需要对原数据报的TTL进行减1操作,组装的时候不需要此操作。

首部检验和:对于每一个分片,设置好各自的总长度、标识、标志、片偏移、TTL之后,需要重新对该IP报头重新计算校验和。

阅读(1463) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~