linux网络编程7

news2024/9/25 1:36:26

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.coloradmin.cn/o/2162043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Krita连接comfyui报错缺少节点如何解决

介绍一下我用的版本&#xff1a; krita5.2.3 ComfyUI-aki-v1.3 首先&#xff1a;文件夹必须严格按照ComfyUI进行命名&#xff0c;我不知道这个是不是必须得&#xff0c;但是看官方的文档以及我解决这个问题的过程时&#xff0c;是这样的。 报错信息如下图(这个报错图…

EasyCVR全方位安全守护智慧电厂:构建高效视频监控系统优势分析

随着信息技术的飞速发展和数字化时代的到来&#xff0c;电厂作为能源供应的重要枢纽&#xff0c;其安全性和管理效率成为社会各界关注的焦点。为了满足电厂对高效、智能、可靠视频监控系统的需求&#xff0c;基于EasyCVR平台建设的电厂视频监控系统应运而生。 一、系统构成 基…

110Redis 简明教程--Redis 数据类型

Redis strings 字符串是一种最基本、最常用的 Redis 值类型。 Redis 字符串是二进制安全的&#xff0c;这意味着一个 Redis 字符串能包含任意类型的数据&#xff0c;例如&#xff1a; 一张经过 base64 编码的图片或者一个序列化的 Ruby 对象。通过这样的方式&#xff0c;Redis …

MybatisPlus: Can‘t generate mapping method with primitive return type

今天启动 SpringBoot 项目时&#xff0c;报了如下错误&#xff1a;java: Cant generate mapping method with primitive return type. 这个异常是因为引入的Mapper有问题&#xff0c;解决&#xff1a; // 错误的引入 import org.mapstruct.Mapper;// 正确的引入 import org.ap…

今日指数项目之大盘指数功能实现

1、国内大盘指数功能 1.1国内大盘指数业务分析 1.1.1 页面原型效果 查询A股大盘最新的数据&#xff1a; 国内大盘数据包含&#xff1a;大盘代码、大盘名称、开盘点、最新点、前收盘点、交易量、交易金额、涨跌值、涨幅、振幅、当前日期 1.1.2 相关表结构分析 大盘指数包含国…

sprintf()函数的介绍及其用法

目录 前言 一&#xff1a;sprintf&#xff08;&#xff09;函数的介绍 二&#xff1a;sprintf&#xff08;&#xff09;函数的原型 三&#xff1a;sprintf&#xff08;&#xff09;函数的用法 1.控制输出格式 2.将数字转化成字符串 3.拼接字符串 4.当然&#xff0c;也可…

Q必达任务脚本

文章目录 1.购买服务器地址2.部署教程3. 代码如下4. 如何联系我 1.购买服务器地址 服务器购买地址 https://t.aliyun.com/U/rUHk58 若失效&#xff0c;可用地址 https://www.aliyun.com/activity/wuying/dj?source5176.29345612&userCode49hts92d 2.部署教程 2024年最…

从零开始构建后台管理系统列表:新手友好教程,全程使用 HTML+CSS+JavaScript,涵盖增删查改、导入导出、排序等功能(含完整源码)

b站视频演示效果&#xff1a; 效果图&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>后台管理系统</title><!-- 引入正确的 Vue.js 版本 --><script src"https:/…

鸿蒙 OS 开发零基础快速入门教程

视频课程: 东西比较多, 这里主要分享一些代码和案例. 开关灯效果案例: 开灯 开关灯效果案例: 关灯 Column 和 Row 的基本用法 Entry Component struct Index {State message: string 张三;build() {// 一行内容Row() {// 一列内容Column() {// 文本内容Text(this.mess…

27 C 语言标准库 <stdio.h> 中的两个重要字符串函数:sprintf、sscanf

目录 1 sprintf 1.1 函数原型 1.2 功能说明 1.3 案例演示 1.4 注意事项 2 sscanf 2.1 函数原型 2.2 功能说明 2.3 案例演示 2.4 注意事项 1 sprintf 1.1 函数原型 sprintf 函数是 C 语言标准库中的一个函数&#xff0c;用于将格式化的数据写入字符串。其函数原型定义…

9.24作业

将昨天的My_string类中的所有能重载的运算符全部进行重载 、[] 、>、<、、>、<、! 、&#xff08;可以加等一个字符串&#xff0c;也可以加等一个字符&#xff09;、输入输出(<< 、 >>) 代码如下 MyString.h #ifndef MYSTRING_H #define MYSTRING_…

使用Docker和cpolar在Linux服务器上搭建DashDot监控面板

使用Docker和cpolar在Linux服务器上搭建DashDot监控面板 前言环境准备安装Docker下载Dashdot镜像 部署DashDot应用本地访问DashDot服务安装cpolar内网穿透固定DashDot公网地址结语 前言 在这个数字化飞速发展的时代&#xff0c;服务器作为支撑各种应用和服务的基础设施&#xf…

C++类和对象(中)【下篇】

&#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏: C专栏 目录 赋值运算符重载 运算符重载 赋值运算符重载 日期类实现 运算符重载<和运算符重载 运算符重载进行复用 运算符重载< 运算符重载> 运算符重载> 运算符重载! 获取某年某月的天数…

大模型算法岗常见面试题100道(值得收藏)非常详细收藏我这一篇就够了

大模型应该是目前当之无愧的最有影响力的AI技术&#xff0c;它正在革新各个行业&#xff0c;包括自然语言处理、机器翻译、内容创作和客户服务等等&#xff0c;正在成为未来商业环境的重要组成部分。 截至目前大模型已经超过200个&#xff0c;在大模型纵横的时代&#xff0c;不…

在Markdown中实现内部查询

markdown实现内部查询 在想要跳转到的位置添加 <a idxxx></a> 标签&#xff0c;如下图&#xff1a; 然后按如下格式添加目录 [跳转文字](#id)&#xff1a; 如上操作即可实现markdown内部查询。 具体实现效果如下&#xff1a;

八大排序——万字长文带你剖析八大排序(C语言)

本篇文章主要介绍八大排序的思想和具体实现&#xff0c;也会分析具体的时间复杂度和空间复杂度&#xff0c;提醒一些容易出现的坑和实现一些不同版本的排序&#xff0c;以及这些不同排序之间的效率分析 目录 1.插入排序 1.1直接插入排序 1.1.1 直接插入排序的思想&#xff…

PyTorch模型转ONNX量化模型

你是否发现模型太大&#xff0c;无法部署在你想要的云服务上&#xff1f;或者你是否发现 TensorFlow 和 PyTorch 等框架对于你的云服务来说太臃肿了&#xff1f;ONNX Runtime 可能是你的救星。 如果你的模型在 PyTorch 中&#xff0c;你可以轻松地在 Python 中将其转换为 ONNX…

关于YOLOX的一些优势

YOLOX 是旷视开源的高性能检测器。旷视的研究者将解耦头、数据增强、无锚点以及标签分类等目 标检测领域的优秀进展与 YOLO 进行了巧妙的集成组合&#xff0c;提出了 YOLOX&#xff0c;不仅实现了超越 YOLOv3、 YOLOv4 和 YOLOv5 的 AP&#xff0c;而且取得了极具竞争力的推理速…

FME学习笔记

读取数据 方法一&#xff1a;add reader 通过读模块来进行数据的读取 方法二&#xff1a;FeatureReader Parameters 通过转换器来进行数据的读取 可以通过空间范围进行筛选 在FME中&#xff0c;所有数据处理都要用到的&#xff0c;绝对的重点&#xff1a;转换器&#xff…