计算机网络实验(5)

计算机网络实验目录

  • eth协议实现
  • ARP协议实现
  • RIP路由配置和协议分析
  • IP协议实现
  • ICMP协议实现
  • UDP协议实现
  • NAT组网
  • 邮件客户端的设计与实现

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

实验指导书网址
HITSZ 2022春计算机网络实验完成记录


ICMP

IP协议本身并没有为终端设备提供直接的方法来发现发往目的地址失败的IP数据包,也不能进行问题诊断。为解决这些不足,将Internet控制报文协议(Internet Control Message Protocol,ICMP)与IP结合使用,以便提供与IP协议层配置和IP数据包处理相关的诊断和控制信息。ICMP是为了主机或者路由器报告差错情况或者提供有关异常情况的报告。ICMP封装在IP数据报中,作为其中的数据部分。ICMP的头部长度为8字节,后面是ICMP报文的数据部分。ICMP报文实际上还是通过IP层传输,ICMP头部和ICMP数据部分组成完整的报文,然后再添加IP协议头部报文,形成完整的IP报文,然后再通过数据链路层生成以太网帧进行传输
在这里插入图片描述


ICMP工作流程

  • 向目标发送IP数据包的时候出错,返回差错报告报文
  • 向目标发送询问报文,收到回答报文
    在这里插入图片描述

ICMP报文结构

头部结构

ICMP头部结构的前4个字节是统一的格式,分为类型,代码,校验和后面4个字节取决于ICMP报文的类型,最后是数据字段

  • 类型(Type):用于说明ICMP报文的作用及格式;
  • 代码(Code):于详细说明某种ICMP报文的类型;
  • 16位校验和(Checksum):涵盖了整个报文,其校验和的计算方法和IP协议校验和算法是一样的;
  • 标识符(Identifier):如果是ICMP请求报文,该字段在Linux/macOS中用的是进程ID。如果是ICMP应答报文,则只需拷贝来自ICMP请求报文的标识符字段;
  • 序列号(Sequence number):如果是ICMP请求报文,该字段在Linux/macOS中是从0递增的,每个进程独立。如果是ICMP应答报文,则只需拷贝来自ICMP请求报文的序列号字段
  • 数据(Optional data):如果是ICMP请求报文,该字段包括时间戳以及一串填充数据。如果是ICMP应答报文,则只需拷贝来自ICMP请求报文的数据字段。
    在这里插入图片描述

实验部分

遇到的一些问题

  • 遇到一个segFault,后面发现是memcpy()的问题,dst_ptr写成&txbuf了(本来应该是txbuf.data)

代码

#include "net.h"
#include "icmp.h"
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值