计算机网络协议分析 (46).pdf

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第四章IP

4.3IP实现

4.3.3IP进程的代码实现

概述

➢ipproc()实现

ipproc()在IP软件整体结构中的位置

pep指向输入的以太网帧

pip指向该以太网帧的数据部分,即IP数据报

prt指向当前IP数据报的路由

判断IP报文是否来自外部接口并要转发到外部网络

ifnum存储了相应IP数据报的输入接口号

rdtype在需要发送ICMP重定向报文时记录重定向报文的类型

Ippid-全局变量,表示IP进程的进程号

IP进程初始化完毕,释放信号量,与网络初始化时的一个wait()操作相对应。同步

操作--保证只有在IP进程初始化结束后相应的网络初始化进程才能继续执行。

IP进程无限循环,即从IP进程初始化完成到操作系统

结束运行这段时间,IP进程始终存在于系统中

查看是否有IP报文处理,若无IP进程被阻塞

pip指向相应的IP数据报

IP数据报首部的版本号字段不为4

IpInHrErrors是一个MIB变量

丢弃该报文并准备接收下一个IP数据报

若IP报文目的IP地址是一个D/E类地址,丢弃该

报文并准备接收下一个IP数据报。

//若IP报文非来自回环接口物理接口收到的报文,

非本机自己生成的报文,则需要进行校验

//检验和有误,丢弃该报文并准备接收下一个IP数据报

//将该报文首部字节序转换为主机字节序

//获取路由,准备接收或转发报文

//获取路由失败

//若当前主机是网关

//将该报文首部字节序重新转换为网络字节序

//发送终点不可达的ICMP

Q:此处为何没有丢弃无法转发的报文?

因为在发送ICMP报文的过程中,ICMP

报文替代了原有IP数据报的数据部分。

//IpOutNoRoutes是一个MIB变量

//丢弃报文并准备接收下一个报文

//准备接收下-一个报文

nonlocal=1:报文需要转发且非本机生成。

本机不是网关且需要转发该报文,则:

✓丢弃该报文

✓释放路由

✓准备接收下一个报文

如果可以转发该报文,

则MIB变量IpForwDatagrams(表示转发报文个数)加1

若此报文由本机生成

若报文源IP地址没有填写,则需要本机填写

报文由本机生成且发给本机,则源IP地址=目的IP地址

报文由本机生成且发往外部,则源IP地址=外发接口的IP地址。

转发该报文前更新TTL值(减1)。若TTL=0且该报文的

转发接口不是回环接口(即报文还没有到达目的地),

报文首部字节序转换为网络字节序,

发送ICMP超时报文

释放路由

准备接收下一个报文。

查看该报文是否为定向广播报文,若是则进行定向广播。

是否需要对该报文的路由进行重定向?

需要则发送ICMP重定向报文。

度量字段〈〉0,调用ipputp()函数转发该报文

文档评论(0)

158****6446 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档