计算机网络计网实验.pdf
实验三IPv4收发分组实验
一、实验目的
Ipv4协议是互联网的协议,它保证了网络节点(包括网络设备和主机)
在网络层能够按照标准协议互相通信。IPv4地址唯一标识了网络节点和网络的
连接关系。在我们日常使用的计算机的主机协议栈中,IPv4协议必不可少,它
能够接收网络中传送给本机的分组,同时也能根据上层协议的要求将报文封装
为IPv4分组发送出去。
本实验通过设计实现主机协议栈中的IPv4协议,让学生深入了解网络层
协议的基本原理,学习IPv4协议基本的分组接收和发送流程。
另外,通过本实验,学生可以初步接触互联网协议栈的结构和计算机网络
实验系统,为后面进行更为深入复杂的实验奠定良好的基础。
二、实验内容
实现IPv4分组的基本接收处理功能
对于接收到的IPv4分组,检查目的地址是否为本地地址,并检查IPv4分组
头部中其它字段的。提交正确的分组给上层协议继续处理,丢弃错误的
分组并说明错误类型。
实现IPv4分组的封装发送
根据上层协议所提供的参数,封装IPv4分组,调用系统提供的发送接口
函数将分组发送出去。
三、实验过程及结果
发送流程图
接受流程图
IPV4头部数据结构
按照IPv4首页的顺序构造结构体,其中char是一个字节,即8Bits,short
是两个字节,即16bit,unsignedint是4个字节,即32Bits。
structIpv4
{
charversion_ihl;//版本号
chartype_of_service;.//协议类型
shorttotal_length;//总长度
shortidentification;//标志符
shortfragment_offset;//偏移量
chartime_to_live;//TTL
charprotocol;//协议
shortheader_checksum;//首部校验和
unsignedintsource_address;//源地址
unsignedintdestination_address;//目标地址
}
错误检测原理
1)版本号校验
版本号在第一个字节的前4位里面,version_ihl是结构体的第一个字节,
则它的前4位代表版本号,右移4位,和0xF进行逻辑与运算,如果结果依旧
是4,则代表版本号正确。
2)头部长度出错
头部长度在第一个字节的后4位里面,则version_ihl和0xF进行逻辑与
运算,因为头部长度最小为20个字节,如果结果为大于等于5,则代表头部长
度没有问题。
3)TTL出错
TTL存在于第9个字节里面,按照数据结构的定义(char+char+short+
short+short),存在于time_to_live里面,按照规定,如果ttl的值是0,
则代表生命周期结束,要抛弃这个包。