IPv4协议(转载)

转载:http://blog.sina.com.cn/s/blog_1533e35800102wyb0.html

什么是IP协议?

IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网际层协议。

IP协议的格式

Version(版本号)

占据4bit位,如果值是0100,就代表IPv4。而IPv6协议有自己的全新的格式。

Internet Header Length(IHL)

IP包头的长度,也占据4bit位,如果其值为0101=5,那是不是意味着IP包头长度是5个字节呢?不是的,那是多少?5*4byte=20字节byte,为什么呢?当初规定IHL的单位是32bit即4个字节。

ToS:Type of Service

服务质量,占据了一个字节,即8位,但是常用的是3位,即图中的Precedence,我们称之为包的优先级,看出它的作用了吧?包也是有阶级的,101=5这个是高优先级,对应的是VIP、头等舱,一般语音IP包的优先级为5,高优先级代表可以在出口队列里插队,可以快速到达目的地,最小的延迟,语音要的就是这个效果,单程的延迟小于150毫秒,来回的延迟小于300毫秒用户是感觉不到的,IP网络如果能保证语音端对端时延<150ms,包的丢失率<1%%,包的抖动小于<30ms,那可以完全代替目前的程控电话网络。有点扯远了,那000=0代表的是什么服务,这是最低级的服务,如HTTP、FTP,就是浏览的网页、文件共享优先级最低,慢就慢了,丢了就丢了,大不了再重传、再刷新浏览器!

TL:Total Length

IP包的总长度,包括IP头,IP头后面的数据负荷,占据2个字节的长度,最大可以达到2的16次方,即65535byte的长度。那知道了总长度、IP头长度,可以算出IP负荷的长度了吧?

Identification:IP包的序列号

占据两个字节的长度,0—65535,到了65535再从0开始循环往复,问题是谁会用这个序列号呢?非专业或专业同学请认真思考,这个序列号谁会用?那我先来回答,IP包的分片Fragment、重组reassemble会用!当IP=2000byte需要从主机物理接口发送出去,而物理接口的一次最大发送单元maximum transport unit MTU=1500字节,IP包 2000 >1500  MTU,怎么办?丢了吗?No!切割分片,分成两个各1000字节的IP包,那谁来重组这些分片呢?目的地IP主机来重组,那问题来了,目的地主机如何知道谁与谁重组,分片是2片、16片还是其他片?谁是第一片,谁又是第二片呢?

第一个问题的答案是:分片的Identification是一样的,比如都是1000,到达目的地主机就会把ID=1000放在一起重组。IP头还有个标志位,MF,More Fragment,如果是0,表示最后一个分片,如果是1则不是。

第二个问题的答案是:IP头还有一个Fragment Offset,一共占据13bit位,根据其偏移量的值可以知道其是第几片,这里有一个问题大家看出来了吗?IP包长度有16位,而这个分片偏移长度只有13位,怎么匹配他们呢?举例,如果我的IP长度为2的16次方,那你偏移长度最大也只有2的13次方,如何解决!把后者乘以2的三次方不就可以了吗?所以IP协议的创始者很聪明地规定,Fragment offset 的单位为8个字节。

通过ID,MF位,Fragment Offset 三者的紧密协作配合,目的地主机可以完成分片的重组,重组成原来的2000字节的IP包。

Flag: 标志位,一共占据3位

第一位:保留,为0

第二位:DF,Dont Fragment,如果为1,意思是这个IP包在传输的过程中不能分片,如果此IP包大于物理接口的MTU,请直接丢弃,并发消息告诉源主机!什么消息?ICMP的消息,告诉包因为太大了,因为不能分片所以被丢了,并告诉源主机可以重新发小于等于MTU的包; 如果是0,表示可以分片,着就是上文谈到的情况。

第三位:MF,MoreFragment

上文也谈过了,不再啰嗦。

Source Address:源IP地址

这是IP包的始作俑者,占据32位,4 个字节

Destination Address:目的IP地址

IP包的目的地,也是4个字节,IP包从起点到达目的地是采用蛙跳的方式来传输的,在每一跳的路由器上,都是检查目的地IP来决定如何转发IP包的,这很好理解,就好比你寄快递,快递公司事根据目的地送达到离目的地更近的中转站,然后一跳一跳越来越靠近目的地,直到达到目的地。

TTL:
Time To 
Live

占据一个字节,最大值为255,IP包每经过一台路由器就减1,为什么要这么做?万一IP网络发生了环路,IP包在环路里转圈圈,没有这个保护机制,那就应了一句歌词:山无棱,天地合,才敢停下来!哈哈,不关机、不停电、不拔线还无法让它停下来!有了这个机制最多跳255下,TTL=0就会被路由器丢弃了。

Protocol : 上层协议

表示IP头后面的小跟班是什么协议。占据一个字节,比如17为UDP, 6 为
TCP等等

Header Checksum:校验码

占据2个字节,如它的名字所暗示,checksum的计算仅仅覆盖IP头,不覆盖IP负载。IP包在传输过程中有些字段会发生改变,比如TTL、TOS,事实上IP checksum的计算把这些容易改变的字段剔除出去,只计算固定不变的字段。

Options: IP 选项

长度不固定,最大可以有40字节,option 包含有time stamp 等选项,但是现在很少使用,所以就不介绍了。

Padding: 填充位

长度不固定,主机处理IP包一般是以4个字节为一个单元,如果IP包的长度不是4的整数倍,则用这个Padding补足成4的整数倍。

Data: IP载荷

这里才是IP包的有效载荷,长度不固定,长度取决于底层物理接口的MTU的大小,如果MTU=1500,
那么IP载荷长度=MTU- IP Header = 1500-20=1480。

以上是IP各个字段的详细介绍,我们可以看看真正的IP包是什么样子,基本上和我们描述一样,IP头后面的是UDP协议。

现在来总结一下IP协议可以提供的服务

1)服务质量 即可以提供差异化服务 ,由TOS来完成

2)分片和重组 ,由ID,MF ,Fragment Offset完成

3)环路保护 ,由TTL来完成此服务

4)传输任务,由Destination Address 完成此任务

5)协议复用,由protocol 完成此任务

6)校验服务,由checksum来完成此任务

原文地址:https://www.cnblogs.com/java-meng/p/15189290.html