Chinaunix首页 | 论坛 | 博客
  • 博客访问: 239248
  • 博文数量: 108
  • 博客积分: 3092
  • 博客等级: 中校
  • 技术积分: 1172
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-25 16:35
文章分类

全部博文(108)

文章存档

2011年(3)

2010年(43)

2009年(19)

2008年(43)

我的朋友

分类: 系统运维

2009-06-13 11:28:42

1.IP软件的设计思想
1)统一的输入队列及统一的选路过程:IP过程对必须由它所处理的所有数据采用相同的输入队列形式,与这些数据是来自于网络还是由本机产生无关。
2)独立的IP进程:IP软件作为一个独立的自包含的进程执行。
3)本地主机接口:为避免将发往本机的情况作为特例对待,为本地传送创建了一个伪网络接口,当本地接口收到一份数据报时,它利用PROTO字段来决定由本机上的哪个协议软件模块来接收此数据报。这样,IP认为所有选择路由的过程是统一而且对称的。
 
2.IP软件结构和数据报流程
1)选择传入数据报的策略
ipgetp:实现循环法选择的策略
为了公平合理,避免出现‘饥饿’状态,对所有网络接口采用循环法的策略。
在ipgetp中包括一种微妙的优化思想,即当所有输入队列都为空时,ip进程在调用ipgetp时被阻塞,一旦有一个数据到达,ip进程恢复执行并检查已有数据报到达的端口。
ipproc:ip进程
通过ipgetp获取数据报
验证校验和
如果校验正确,则通过rtget计算获取路由,如果路由不存在发送ICMP“目的不可达”报文
生成ip报文
(ipdbc处理定向广播)
 
2)定向广播定向广播包括了目的网络的网关和主机,如果一个网关接收到的数据报的目的地址是直接与这个网关相连的某个网络的定向广播地址,那么这个网关必须做两件事:
a)为本机的协议软件复制一份数据报
b)在指定的网络上广播该数据报
 
3)IP首部的字节顺序
在发送一个数据前,主机必须将所有的整型值从本机字节顺序转换成标准的网络字节顺序。而当接收到一个数据报后要做相反的转换。
数据的顺序是由cpu决定的,与操作系统无关。 
Intel x86结构下,short型数0x1234表示为34 12,int型数0x12345678表示为78 56 34 12  
IBM power PC结构下,short型数0x1234表示为12 34,int型数0x12345678表示为12 34 56 78由于这个原因不同的机器之间无法通信,所以要转换成一种约定的数序,也就是网络字节顺序,其实就是如同power pc那样的顺序。
 
4)向IP发送数据报
发送本地的数据报
ipsend:填写ip首部并将数据报放入本机接口队列中
发送传入的数据报
ip_in:当一个经由网络发送来的数据报到达时,网络接口层设备驱动通过这个函数将其放置在适当的IP队列中。
阅读(713) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~