OSI-ipv4协议

来源:互联网 发布:树状目录生成算法 编辑:程序博客网 时间:2024/06/05 04:12
session 1 ipv4数据包格式
      ip数据包属于L3层协议,是地址定位的一个符号,主要用于路由的寻址。其本质是最终被翻译成二进制机器码再由L1层物理介质串行化成电脉冲(网线)或者光脉冲(光纤)、电磁波(无线电波)等在网络介质上传输。
 下图为ip数据包的格式


session 2 ip包详解
一、ip数据包分为ip包头部和数据部分2个组成部分,其中头部为20-60个byte不等,一般没有选项位的时候是20byte(字节)=20*8=160bit
二、选项位置是0-40个byte,其中以32的倍数bit位填充,至今保留使用,定义了5种高级用途,但是基本没有人用。
三、在20个byte的ip包头中各个位置的定义和解释如下:
1、ip包版本号4bit(versions numb)
答、这个是标示ip包的版本的,ipv4版本是4,固定值4个bit,所以就是0100
2、ip包头部长度4bit(head length)
答、这个是标示ip包头的总长度的,一般没有可选项的话都是20byte=160bit
3、服务类型8bit(TOS type of server)
答、这个服务质量QOS做数据流优先级控制的
4、ip数据包总长度16bit(total length)
答、这个是标示这个ip包的总共的长度,包头+数据部分的长度,ip包的最大长度为2的16次方=65535bit,因为是16个bit,每个bit可以是0和1所以就是2的16次方,所以为什么一个ip包最大只能是65535bit了,这里的16bit只是用来标示这个ip包到底是多长。
5、ip数据包标识位16bit(identifier)
答、5、6、7这三个标示都是与ip包的分片有关的标识,因为我们现在传输用的L1层物理介质所能承载的数据包的大小有固定的值,比如说网线的最大承载(MTU最大传输单元)是1500byte=1500*8=12000bit,而不是最大数据包的大小(数据包最大要65535bit),所以一次不能传输超过12000bit的数据包,那么超过了的话就只能将完成的ip数据包进行分片,每一个分成小于12000bit的数据包进行传输,传输到对端后再由对端ip协议根据分片的序列号进行ip包的重组,把完成ip包拼装起来进行解析。
假如一个要发送的ip数据包为60000bit,那么它就会被切成5片,每片是12000bit(不超过1500Byte),刚好。切片成5片后就可以传输。这个ip数据包标识位就是标识这个ip数据的序号和分片后的ip数据包分片的序号,当然这2个序号是同一个,不然下一个传输的节点(路由器、PC等)就无法知道这个包分片是属于哪一个ip数据数据包的了。比如这离的标示位是33,那么这个完整的ip数据包和它的分片包的序号都应该是33
6、ip数据包标志3bit
答、这个也是跟包的分片有关的,这里面有三个标示:
CU:保留用
DF:表示这个ip包是否可以分片。bit位为0标示可以分片,为1表示不能分片,哪怕是长度超过1500Byte都不能分片,宁可丢包都不能分片,用于安全等用途。
MF:表示是否更多分片。bit位为0标志着这个分片是整个数据包的最后一个分片,为1表示是中间的一个分片,后面还有分片。
7、ip数据包分片偏移13bit(offset)
答、这个是分片的顺序序号,用于区分N个分片切割时候的顺序,下一个传输端或者接收端将端根据序号来排序这些分片从而拼成一个正确的完整数据包。算法为第一个分片的序号为0,第二个分片起,后一个分片的序号是前一个分片的大小。比如第一个分片的序号是0,大小是30Byte,那么第二个分片的序号就是30,第二个分片的大小为200Byte,那么第三个分片的序号就是200,以此类推。
8、TTL生存时间8bit(time to live)
答、这个早期的单位是秒,因为设备传输的速度有延迟。现在设备的速度很快都是ms级别的,所以现在单位被默认为跳数了,主要是用于防止数据的无限传输产生的环路。因为有8个bit,那么计算个数最大的就是2的8次方256,所以一个数据包的最大跳数就是256,也就是说一个数据包最多能经过255个设备,如果经过了255个设备还没有到达目的地那么这个数据包就被drop掉
9、上层协议号8bit(protocol)
答、这个是标识了ip包所使用的第四层的协议号,比如TCP、UDP号等
10、ip包头校验和16bit(checksum)
答、仅仅是对于ip包头部(前20byte)的校验作用,与ip包中的数据data无关,无法保证数据部分的真实性和完整性。
11、源ip地址32bit
答、这个ip包的发送方的ip地址
12、目标ip地址32bit
答、这个ip包的最终接收方的ip地址
13、保留选项40byte
答、高级属性
14、数据data
答、真正的数据
 
session 3 MTU

      MTU分为L2层MTU和L3层MTU,一般来讲说的都是L2层MTU,因为数据最终是封装到L2层进行传输的,由物理介质决定了最大承载的量1500Byte(字节)。但是现在默认L3层也是1500Byte了,因为现在的物理介质(网线)已经可以支持一种叫做小巨人帧的帧,MTU要超过1500Byte,所以现在L2层的MTU超过1500Byte也可以的,但是不能超过的太多(多出20个Byte应该可以的)。这里说的MTU是不包括头部的,比如L3层MTU=1500Byte是不包括L3层头部的,L2层MTU=1500Byte也是不包括L2层头部的,只是L3L4Data部分的数据。L2层帧(包括L2头部)最大应该1546Byte,再加上能传输小巨人帧,最大帧(包括L2层头)可能超过1560Byte。


这里要提一下MTU的概念和三层VPN技术中遇到关于MTU导致VPN不通或者缓慢的现象:

      数据的最大传输单元,由物理介质决定,最大1500Byte,超过1500Byte的数据包都被分片成小于1500Byte大小的数据包进行传输。一般MTU分2层的MTU和3层的MTU,常说的数据包能传输的MTU是L2的MTU,因为最终数据包是要被封装到2层的头部,所以以2层的最大为准。问题是封装了2层的头部的数据包不能超过1500Byte,那么L3的ip包的大小就应该是1500byte-L2头部的大小,假如这里L2的头部是20字节,那么ip包最大只能是1500-20=1480Byte大小才可以。如果数据包又采用了三层VPN-ipsec技术,那么等于L3的头部除了ip包头部还要有一个VPN的头部,等于L3有2个头部,所以这1300Byte的数据是:ip头+L3VPN头+数据的大小,路由器在正常分片的时候会忽略了其中的一个VPN头部(因为原本的ip包是没有VPN头的,这种附加的VPN头部是通过VPN技术添加上去的,可是路由器并不知道,它还是按照正常ip包的分片模式进行分片),只将ip头+数据部分分片成1500Byte以内,比如刚好1480Byte,或者1470Byte这样的,然后因为这个数据包走了VPN协议,所以包的分片上需要再加上一个VPN的头部,这样整个L3的MTU就大于1480了,再加上L2的头部20Byte的话整个MTU就会大于1500Byte,传输介质(网线)就无法传递这样的大数据分片,或者是传输的时候会很慢,导致VPN很慢或者不通,所以有时候VPN或者其他特殊协议在ip协议上传输时候,就需要按照这些特殊协议的头部大小来重新确定L3头部(ip头+特殊协议头部)的大小,修改L3的MTU,将他的值改小,让他完全封装完成后再封装了L2的头部后整个分片的大小仍不超过1500Byte大小,就可以解决这种问题了。


0 0