[转]车小胖谈网络:IP协议

一直纠结于该怎样写我的网络之旅,开始不是很清晰,现在写着写着开始清晰了,那就是用亲爱读者可以懂的语言来阐述技术,有血有肉,而不是冷冰冰技术的堆积。读者里有我远在大洋彼岸的同桌,有初中、高中、大学、研究生的老同学,有一起工作奋斗的同事兼老朋友,有自己的兄弟姐妹,还有默默支持我的陌生的朋友,感谢您们!没有您们的支持,到第三篇就可能放弃了。为了回馈朋友们的支持,决定从网络最基础的元素开始,一点点讲起,如果您看不太懂,可以给我留言,我可以用再浅显直白的语言来讲,各位朋友,那我们开始吧!

 

穿梭在互联网世界数据流99%是IP数据包,剩下的1%有其它的网络协议组成,现在网络IP化已经成为生米煮成熟饭,也是源于其开放、兼容并蓄的个性。

 

什么是IP协议?

 

Internet Protocol的缩写,我们经常称之为网络层协议,IP协议里有目的地IP地址,可以将一个IP包送到目的地,那我们先来看看IP协议的庐山真面目。

 

IP协议的格式

 

Version: 版本号

占据4bit位,如果0100,就代表IPv4,那0110是不是就代表IPv6了呢?不是,因为IPv6重启炉灶,有自己全新的IPv6协议,我们一般说的IP协议就是指IPv4,所以这四位就是0100。

 

IHL: Internet Header Length

IP包头的长度,也占据4bit位,如果其值为0101=5,那是不是意味着IP包头长度是5个字节呢?不是的,那是多少?5*4byte=20字节byte,为什么呢?当初规定IHL的单位是32bit即4个字节,再举个例子,如果1100=12,那IP包头长度是多少呢?哈哈,赵本山说:小样都学会抢答了!对的,答案是48字节。

 

ToS:Type of Service

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

说到服务质量,想起了一个真实故事,有一个奇葩公司,网管为了拍领导马屁,给老板静态分配了一个IP地址,然后给予这个IP最高优先级的服务,无论老板浏览网页、网上购物、还是网络聊天都能快速响应,这种行为尽管有点可耻,也属于差异化服务的范畴!

 

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来完成此任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值