linux网络编程7

24.9.24学习目录

  • 一.网络通信过程(续)
    • 1.路由器
  • 二.原始套接字(SOCK_RAW)
    • 1.创建原始套接字
    • 2.数据包解析

一.网络通信过程(续)

1.路由器

路由器是用于连接多个逻辑上分开的网络;
具有判断网络地址和选择IP路径的功能;
工作在网络层,可以实现不同网段的主机之间进行通信,而路由器则是设置为默认网关;

二.原始套接字(SOCK_RAW)

其是一种不同于TCP和UDP使用的套接字,它实现于系统核心;
可以接收本机网卡上所有的数据帧(即数据包),对于监听网络流量和分析网络数据很有作用;
开发人员可发送自己组装的数据包到网络上;
广泛应用于高级网络编程;
网络专家、黑客通常用来编写奇特的网络程序;

原始套接字可以收发:
1.数据包,其包含头部和数据,需要访问其他协议
2.发送的数据需要使用原始套接字的

1.创建原始套接字

(1)创建链路层的原始套接字

//头文件用于使用ETH_P_ALL这个宏
#include <netinet/ether.h>
int socket(PF_PACKET,SOCK_RAW,protocol);

PF_PACKET:也可以使用AF_PACKET参数;
protocol:用于指定可以收发的数据包类型,ETH_P_IP(为IPV4数据包)、ETH_P_ARP(为ARP数据包)、ETH_P_ALL(为所有协议的数据包)

注意:使用原始套接字时,程序需要管理员权限,即在运行时添加sudo即可

2.数据包解析

在TCP/IP中使用一些“协议类型”标记不同的类,如图:
在这里插入图片描述

(1)UDP报头
在这里插入图片描述
源端口号:发送方的端口号
目的端口号:接收方端口号
长度:UDP用户数据报的长度,最小值为8(没有数据只有首部)
校验和:检测UDP用户数据报在传输中是否有错,有错就丢弃

(2)IP报头
在这里插入图片描述
版本:IP协议版本,通信双方版本必须一致
首部长度:单位时32位
服务类型:一般不适用,取值为0
总长度:指首部加上数据的总长度
标识:用来标识主机发送的每一份数据报
标志:
  标志字段中的最低位记为MF,当为1时表示后面还有数据的分片,当为0时表示时数据中的最后一个分片
  标志字段中的中间位置,记为DF,意思为不能分片,当为0时才可以分片
片偏移:用于说明该分片数据为总数据中的位置
生存时间:TTL,为跳数限制,用于限制数据包在路由器中转发的次数,当下降为0时表示丢弃该数据包
协议:指明数据报采用什么协议发送
首部校验和:只用于校验数据报的首部,不包括数据
源地址:发送方的IP地址
目的地址:接收方的IP地址
选项:用于定义一些任选项

(3)以太网格式
在这里插入图片描述
目的地址:目的mac地址
源地址:源mac地址
类型:IP、ARP、RARP数据包
CRC、PAD在组包时可以忽略

(4)TCP报头
在这里插入图片描述
源端口号:发送发端口号
目的端口号:接收发端口号
序列号:本报文中数据的第一个字节的序号
确认序号:期望接收到对方下一个报文中第一个数据字节的序号
首部长度:报文中除去数据的长度
保留:保留今后使用
紧急URG:当为1时,表示该报文有紧急数据,需要尽快传输
确认ACK:当ACK为1时才有效
推送PSH:当为1时,表示在两个应用进程中希望其尽快的接收到对方的响应
复位RST:用于复位相应的TCP连接
同步SYN:只有在三次握手时有效
终止FIN:当为1时,表示数据已经发送完毕,申请释放连接
窗口:指发送本报文段的一方的接收窗口
校验和:校验和字段校验的范围包括首部和数据两部分
紧急指针:当URG为1时才有效
选项:长度可变

(5)ICMP封包格式

在这里插入图片描述
注意:
不同的类型值以及代码值,代表不同的功能

(6)数据包的组包和解包

在这里插入图片描述

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

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

相关文章

React-Native 中使用 react-native-image-crop-picker 在华为手机上不能正常使用拍照功能

背景: React-Native 0.66 中使用 react-native-image-crop-picker 在安卓 华为手机上不能正常使用拍照功能, 其他品牌正常 代码如下: import ImagePicker from react-native-image-crop-picker;ImagePicker.openCamera(photoOptions).then(image > {callback(image);}) …

不靠学历,不拼年资,怎么才能月入2W?

之前统计局发布了《2023年城镇单位就业人员年平均工资情况》&#xff0c;2023年全国城镇非私营单位和私营单位就业人员年平均工资分别为120698元和68340元。也就是说在去年非私营单位就业人员平均月薪1W&#xff0c;而私营单位就业人员平均月薪只有5.7K左右。 图源&#xff1a;…

DownShift: Tuning Shift Reduction With Reliability for Racetrack Memories

目录 DownShift: Tuning Shift Reduction With Reliability for Racetrack Memories文章摘要&#xff1a;文章的主要贡献包括&#xff1a;文章的结构如下&#xff1a;DownShiftDownShift通过以下方式改进了现有的数据放置策略&#xff1a; GROGU&#xff08;Generating Reliabi…

简单题94. 二叉树的中序遍历 (python)20240921

问题描述&#xff1a; python&#xff1a; # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution(object…

【重学 MySQL】三十七、聚合函数

【重学 MySQL】三十七、聚合函数 基本概念5大常用的聚合函数COUNT()SUM()AVG()MAX()MIN() 使用场景注意事项示例查询 聚合函数&#xff08;Aggregate Functions&#xff09;在数据库查询中扮演着至关重要的角色&#xff0c;特别是在处理大量数据时。它们能够对一组值执行计算&a…

图书管理系统实现

图书管理系统实现 图书管理系统作用图书管理系统绘图创建Book创建BookListOperation包下代码User包AdminUserNomalUser Main方法整体代码&#xff08;带有注释&#xff09;Opertaion包下的代码IOpertaion&#xff08;接口&#xff09;Add添加图书代码Dele删除图书代码Borrow借阅…

PyTorch 池化层详解

在深度学习中&#xff0c;池化层&#xff08;Pooling Layer&#xff09;是卷积神经网络&#xff08;CNN&#xff09;中的关键组成部分。池化层的主要功能是对特征图进行降维和减少计算量&#xff0c;同时增强模型的鲁棒性。本文将详细介绍池化层的作用、种类、实现方法&#xf…

C++——多线程编程(从入门到放弃)

进程&#xff1a;运行中的程序 线程&#xff1a;进程中的进程 线程的最大数量取决于CPU的核心数 一、将两个函数添加到不同线程中 demo&#xff1a;两个函数test01()和test02()&#xff0c;实现将用户输入的参数进行打印输出1000次 将这两个函数均放到独立的线程t1和t2中&…

vue3+element-plus icons图标选择组件封装

一、最终效果 二、参数配置 1、代码示例 <t-select-icon v-model"selectVlaue" />2、配置参数&#xff08;Attributes&#xff09;继承 el-input Attributes 参数说明类型默认值v-model绑定值string-prefixIcon输入框前缀iconstringSearchisShowSearch是否显…

从角速度向量的角度理解姿态角速度和机体角速度的转换公式

一、什么是姿态角速度 这是我从《多旋翼飞行器设计和控制》上截取的关于欧拉角的定义。无人机的姿态角速度即偏航角、俯仰角、滚转角的一次导数&#xff0c;分别是、、。 二、什么是机体角速度 这是我在网上随便找的图&#xff0c;展示了机体坐标系。这个坐标系与飞机固定连接&…

【软件测试】详解测试中常用的几种测试方法

目录 一、集成测试二、 系统测试三、验收测试四、回归测试 总结 一、集成测试 术语 集成测试是继组件测试之后的又一个层次。集成测试假定交给这个层次的测试对象已经经过了组件测试&#xff0c;并且任何组件内部的缺陷都已经尽可能地被纠正。 集成 开发人员、测试人员和专…

6种常见位运算符+异或运算符的使用(加密、解密)

一、位运算符 位运算符进行的是整数与整数之间的运算 1、右移运算符&#xff1a;>> &#xff08;1&#xff09;相当于对整数除以2 &#xff08;2&#xff09;举例&#xff1a; int num 2; System.out.println(num >> 1); 2、左移运算符&#xff1a;<< …

定制智慧科技展厅方案:哪些细节是成功的秘诀?

随着数字科技浪潮的迅猛推进&#xff0c;智慧科技展厅跃升为科技成果展示与技术对话的前沿阵地。其策划与实施方案因而显得尤为关键。在此过程中&#xff0c;精雕细琢每一环节&#xff0c;确保创意与技术的无缝对接&#xff0c;成为不可或缺的要点。现在&#xff0c;让我们深入…

《程序猿之设计模式实战 · 适配器模式》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

《深入解析:水果销售数据库操作与查询技巧》

文章目录 一、数据库结构与数据源插入1.1 创建数据库与表1.2 插入数据 二、基础数据查询2.1 查询客户信息2.2 查询供应商信息 三、查询优化与技巧3.1 使用LIMIT子句 四、高级查询技巧4.1 使用聚合函数4.2 连接查询4.3 使用子查询 五、案例分析5.1 客户订单详情查询 一、数据库结…

MySQL篇(窗口函数/公用表达式(CTE))(持续更新迭代)

目录 讲解一&#xff1a;窗口函数 一、简介 二、常见操作 1. sumgroup by常规的聚合函数操作 2. sum窗口函数的聚合操作 三、基本语法 1. Function(arg1,..., argn) 1.1. 聚合函数 sum函数&#xff1a;求和 min函数 &#xff1a;最小值 1.2. 排序函数 1.3. 跨行函数…

DeiT(ICML2021):Data-efficient image Transformer,基于新型蒸馏且数据高效的ViT!

Training data-efficient image transformers & distillation through attention&#xff1a;通过注意力训练数据高效的图像转换器和蒸馏 论文地址&#xff1a; https://arxiv.org/abs/2012.12877 代码地址&#xff1a; https://github.com/facebookresearch/deit 这篇论文…

14.第二阶段x86游戏实战2-C++语言开发环境搭建-VisualStudio2017

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

vue-入门速通

setup是最早的生命周期&#xff0c;在vue2里边的data域可以使用this调用setup里面的数据&#xff0c;但是在setup里边不能使用thisvue项目的可执行文件是index&#xff0c;另外运行前端需要npm run vue的三个模块内需要三个不同的结构&#xff0c;里边放置js代码&#xff0c;注…

2024/9/21 leetcode 21.合并两个有序链表 2.两数相加

目录 21.合并两个有序链表 题目描述 题目链接 解题思路与代码 2.两数相加 题目描述 题目链接 解题思路与代码 --------------------------------------------------------------------------- 21.合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返…