编辑: 赵志强 | 2018-11-21 |
2000 地址的功能,一方面接收处理发送给自己的分组,另一方面根据应用需求填 写目的地址并将上层报文封装发送. IPv4 地址可以在网络中唯一标识一台主 机,因而在相互通信时填写在 IPv4 分组头部中的 IPv4 地址就起到了标识源 主机和目的主机的作用.在后面 IPv4 分组的转发实验中,我们还将深入学 习IPv4 地址在分组转发过程中对选择转发路径的重要作用. 在两个主机端系统通信的环境中, 网络的拓扑可以简化为两台主机直接 相连, 中间的具体连接方式可以抽象为一条简单的链路, 如图 1.1 所示. IPv4 分组收发实验就是要在实验系统客户端的开发平台上,实现 IPv4 分组的接 收和发送功能. 图1.1 实验环境网络拓扑结构 1.4.1 处理流程 客户端接收到测试服务器发送来的 IPv4 分组后,调用接收接口函数 stud_ip_recv( )(图1.2 中接口函数 1) .学生需要在这个函数中实现 IPv4 分 组接收处理的功能.接收处理完成后,调用接口函数 ip_SendtoUp( ) 将需要 上层协议进一步处理的信息提交给上层协议(图1.2 中接口函数 2) ;
或者调 用函数 ip_DiscardPkt( )丢弃有错误的分组并报告错误类型 (图1.2 中函数 5) . 在上层协议需要发送分组时, 会调用发送接口函数 stud_ip_Upsend( ) (图1.2 中接口函数 3) .学生需要在这个函数中实现 IPv4 分组封装发送的功能. 根据所传参数完成 IPv4 分组的封装,之后调用接口函数 ip_SendtoLower( ) 把分组交给下层完成发送(图1.2 中接口函数 4) . -
2 - 计算机网络实验系统 NetRiver
2000 图1.2 实验接口函数示意图 1.4.1.1 接收流程 在接口函数 stud_ip_recv( )中,需要完成下列处理步骤(仅供参考) : 1) 检查接收到的 IPv4 分组头部的字段,包括版本号(Version) 、头部 长度(IP Head length) 、生存时间(Time to live)以及头校验和 (Header checksum)字段.对于出错的分组调用 ip_DiscardPkt( ) 丢弃,并说明错误类型. 2) 检查 IPv4 分组是否该由本机接收.如果分组的目的地址是本机地 址或广播地址,则说明此分组是发送给本机的;
否则调用ip_DiscardPkt( )丢弃,并说明错误类型. 3) 提取得到上层协议类型,调用 ip_SendtoUp( )接口函数,交给系统 进行后续接收处理. 1.4.1.2 发送流程 在接口函数 stud_ip_Upsend( )中,需要完成下列处理步骤(仅供参考) : 1) 根据所传参数(如数据大小) ,来确定分配的存储空间的大小并申 请分组的存储空间. 2) 按照IPv4 协议标准填写IPv4 分组头部各字段,标识符(Identification)字段可以使用一个随机数来填写.注意,部分字 段内容需要转换成网络字节序. 3) 完成 IPv4 分组的封装后,调用 ip_SendtoLower( )接口函数完成后 续的发送处理工作,最终将分组发送到网络中. 1.4.2 IPv4 分组头部格式 IPv4 分组头部格式如图 1.3 所示, 具体字段的定义请参考教材[1]和文献 [2]. -
3 - 计算机网络实验系统 NetRiver
2000 图1.3 IPv4 分组头部格式 1.4.3 接口函数说明 1.4.3.1 需要实现的接口函数 1) 接收接口 int stud_ip_recv(char * pBuffer, int length) 参数: pBuffer:指向接收缓冲区的指针,指向 IPv4 分组头部 length:IPv4 分组长度 返回值: 0:成功接收 IP 分组并交给上层处理 1:IP 分组接收失败 2) 发送接口 int stud_ip_Upsend(char* pBuffer, short len, unsigned int srcAddr, unsigned int dstAddr ,byte protocol, byte ttl) 参数: pBuffer:IPv4 上层协议数据 len:IPv4 上层协议数据长度 srcAddr:源IPv4 地址 dstAddr:目的 IPv4 地址 protocol:IPv4 上层协议号 ttl:生存时间(Time To Live) -