TCP/IP-常用网络协议自定义结构体

 1、TCP/IP模型:

2、TCP/IP- 各层级网络协议(从下往上):

    1)数据链路层:
        ARP:    地址解析协议,用IP地址获取MAC地址的协议,通过ip的地址获取mac地                       
        RARP:  逆地址解析协议,   // zhangzx:反过来的,通过mac的地址获取ip地址   

2)网络层:
       IP:网际协议
        ICMP:控制报文协议, ping
    3)传输层:
        TCP:  面向连接的可靠传输协议
        UDP:  无连接的传输协议    
    4)应用层:
        HTTP:
        FTP:
        TELNET:    
        自定义协议:
        
        
 

3、网络中传输的数据包:

    1.ping  //zhangzx:经常使用ping命令,就是icmp协议
        数据包:mac层协议,ICMP协议

    2.www.sohu.com
        数据包:mac层协议,IP层协议,TCP层协议,HTTP协议

    3.qt聊天室
        数据包:mac层协议,IP层协议,TCP层协议,私聊消息结构体

4、以太网、ip、tcp、udp、icmp协议结构体定义:

#pragma once#pragma pack(1)typedef struct ether_header {unsigned char ether_dhost[6];   //目的MAC地址unsigned char ether_shost[6];   //源MAC地址unsigned short ether_type;     //协议类型
}ETHHEADER, *PETHHEADER;typedef struct ipv4_header {unsigned char ver_ihl;          //版本 (4 bits) + 首部长度 (4 bits)unsigned char tos;             //服务类型unsigned short tlen;            //数据报总长度unsigned short identification;    //标识unsigned short flags_fo;        //标志 (3 bits) + 片偏移 (13 bits)unsigned char ttl;             //生存时间unsigned char proto;           //协议unsigned short crc;            //首部校验和unsigned int sourceIP;              //源IP地址unsigned int destIP;              //目的IP地址
}IPHEADER, *PIPHEADER;typedef struct tcp_header {unsigned short SourPort;       //源端口号  unsigned short DestPort;       //目的端口号unsigned int SeqNo;       //序号unsigned int AckNo;       //确认序号unsigned char HLen;          //首部长度(保留位)unsigned char Flag;           //标识(保留位)unsigned short Window;       //窗口大小unsigned short ChkSum;       //校验和unsigned short UrgPtr;        //紧急指针
}TCPHEADER, *PTCPHEADER;typedef struct udp_header {unsigned short sport;          //源端口号unsigned short dport;          //目的端口号unsigned short len;            //数据报长度unsigned short crc;            //校验和
}UDPHEADER, *PUDPHEADER;typedef struct icmp_heard
{unsigned char icmp_type; //type of message(报文类型)   unsigned char icmp_code; //type sub code(报文类型子码)   unsigned short icmp_cksum; //校验和unsigned short icmp_id;    //标识,发送和回收的得一致unsigned short icmp_seq;unsigned char icmp_data[1];  //数据, 1个字节其实是个占位符
}ICMPHEADER, *PICMPHEADER;#pragma pack()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/496826.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POST参数里加号+变成空格的问题处理

今天遇到个这样的问题,从前端传到后端的加密报文,里面包含了号,但在后端日志输出看出,变成空格。这个是由于经过RSA加密后引起的 解决办法: 1.前端转码:使用encodeURIComponent对参数进行转码 2.后端解码…

深入理解Lucene:开源全文搜索引擎的核心技术解析

欢迎关注微信公众号:一休哥助手。多种功能等待你的使用。1. 介绍 Lucene是什么? Lucene是一个开源的全文搜索引擎库,提供了强大的文本搜索和检索功能。它由Apache软件基金会维护和开发,采用Java语言编写,因其高性能、…

Docker(运维工具)—— 学习笔记

快速构建、运行、管理应用的工具 一、安装docker 参考Install Docker Engine on Ubuntu | Docker Docs 二、快速入门 1、镜像和容器 docker镜像可以做到忽略操作系统的差异,跨平台运行,忽略安装的差异 当我们利用Docker安装应用时,Dock…

如何使用Fastapi上传文件?先从请求体数据讲起

文章目录 1、请求体数据2、form表单数据3、小文件上传1.单文件上传2.多文件上传 4、大文件上传1.单文件上传2.多文件上传 1、请求体数据 前面我们讲到,get请求中,我们将请求数据放在url中,其实是非常不安全的,我们更愿意将请求数…

QML | JavaScript函数[自定义方法\导入JavaScript文件中的函数\关联信号和JavaScript 函数]

1、JavaScript函数 在前面的方法特性一节中已经讲解了函数的使用,这里再从JavaScript的角度讲解一些需要注意的方面。程序逻辑可以在JavaScript函数中进行定义。这些函数可以定义在QML文档里面(例如前面讲到的自定义方法),也可以定义在外部导人的JavaScript文件中。 (1)自…

拒绝机械风,让ChatGPT像真人一样对话!

拒绝机械风,让ChatGPT像真人一样对话 在这个信息爆炸的时代,人工智能技术的快速发展让我们的生活变得更加便捷。 特别是在自然语言处理领域,ChatGPT的出现无疑是一次革命性的进步。 然而,虽然ChatGPT在很多方面表现出了惊人的能…

学习笔记-李沐动手学深度学习(七)(19-21,卷积层、填充padding、步幅stride、多输入多输出通道)

总结 19-卷积层 【补充】看评论区建议的卷积动画视频 数学中的卷积 【链接】https://www.bilibili.com/video/BV1VV411478E/?fromsearch&seid1725700777641154181&vd_sourcee81e116c4ffe5e79d4bc44738263eda4 【可判断是否为卷积的典型标志】两个函数中自变量相加…

【HarmonyOS】鸿蒙开发之Video组件——第3.7章

Video组件内VideoOptions属性简介 src:设置视频地址。currentProgressRate:设置视频播放倍速,参数说明如下: number|string:只支持 0.75 , 1.0 , 1.25 , 1.75 , 2.0 。P…

vue-router4 (六) 命名视图

命名视图可以使得同一级(同一个组件)中展示更多的路由视图,而不是嵌套显示, 命名视图可以让一个组件中具有多个路由渲染出口,这对于一些特定的布局组件非常有用。 应用场景: 比如点击login切换到组件A&am…

安装 docker 可视化工具 portainer

portainer 官方网站 https://www.portainer.io/ 一、portainer 介绍 Portainer是一款开源的容器管理平台,它提供了一个直观易用的Web界面,帮助用户管理Docker容器集群、镜像、卷等资源。Portainer 支持多种 Docker 环境,包括本地Docker、Sw…

数据库之MVCC

1、什么是MVCC MVCC(Multi-Version Concurrency Control)即多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。MVCC使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行…

线性表——单链表的增删查改

本节复习链表的增删查改 首先, 链表不是连续的, 而是通过指针联系起来的。 如图: 这四个节点不是连续的内存空间, 但是彼此之间使用了一个指针来连接。 这就是链表。 现在我们来实现链表的增删查改。 目录 单链表的全部接口…