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.xdnf.cn/news/1544845.html

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

相关文章

谷歌收录查询工具,有哪些常见的可以查询谷歌收录情况的工具

在SEO&#xff08;搜索引擎优化&#xff09;领域中&#xff0c;了解网站在谷歌搜索引擎中的收录情况是至关重要的。这有助于网站所有者评估网站的可见性和优化效果。以下是一些常见的、可用于查询谷歌收录情况的工具&#xff0c;它们各自具有独特的功能和优势。 1.GoogleSe…

Vue2是什么?有什么用?超详细+通俗易懂版!

Vue2是一种流行的JavaScript前端框架&#xff0c;由尤雨溪&#xff08;Evan You&#xff09;开发&#xff0c;并于2014年首次发布。它旨在使用户能够更轻松地构建用户界面&#xff0c;具有一系列显著的特点和优势&#xff0c;使其成为前端开发领域的重要工具。 Vue2的主要特点包…

VMWare虚拟机键盘卡顿

文章目录 环境问题解决办法参考 环境 Windows 11 家庭中文版VMware Workstation 17 ProUbuntu 24.04.1 问题 最近新入手了一台电脑台式机&#xff0c;型号是联想拯救者刃7000K&#xff0c;自带Win11家庭版。主机的CPU是第14代英特尔酷睿i9处理器&#xff0c;异构24核32线程。…

​无文字高德电子地图分享

如果你有对高德的电子地图进行过自定义加载&#xff0c;你应该知道高德的电子地图是有带文字标注的&#xff0c;这里为你分享无文字版高德电子地图。 普通电子地图 打开下面的网址进入水经微图&#xff08;简称“微图”&#xff09;网页版。 https://map.wemapgis.com 点击…

力扣题解2207

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述&#xff08;中等&#xff09;​&#xff1a; 字符串中最多数目的子序列 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern &#xff0c;两者都只包…

DataWhale X 南瓜书学习笔记 task03笔记

对数几率回归 使用场景&#xff1a;分类任务。根据广义线性模型&#xff0c;分类任务构建模型的基本思想&#xff1a;找到一个单调可微函数将分类任务的真实标记&#xff08;值&#xff09;与线性回归模型的预测值联系起来。 对数几率回归的引入 二分类任务 输出标记&#…

windows下成功运行MicroRTS-Py项目

1.microRTS&#xff08;java&#xff09; microRTS是java写的跨平台的小型即时战略模拟器。 Farama-Foundation/MicroRTS: A simple and highly efficient RTS-game-inspired environment for reinforcement learning (github.com)https://github.com/Farama-Foundation/Micr…

828华为云征文|华为云Flexus X实例:极速搭建个人代码仓库GitLab平台

目录 前言 一、Flexus云服务器X介绍 1.1 Flexus云服务器X实例简介 1.2 Flexus云服务器X实例特点 1.3 Flexus云服务器X实例使用场景 二、Flexus云服务器X购买 2.1 Flexus X实例购买 2.2 重置密码 2.3 登录服务器 三、Flexus X 实例安装GitLab 3.1 GitLab镜像下载 3.2 GitLab部署…

Arthas mbean(查看 Mbean 的信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.10 mbean&#xff08;查看 Mbean 的信息&#xff09;举例1&#xff1a;列出所有 Mbean 的名称&#xff1a;举例2&#xff1a;查看 Mbean 的元信息&#xff1a;举例3&#xff1a;查看 mbean 属性信息&#xff1a;举例4&#xff1a;mbea…

游戏化在电子课程中的作用:提高参与度和学习成果

游戏化&#xff0c;即游戏设计元素在非游戏环境中的应用&#xff0c;已成为电子学习领域的强大工具。通过将积分、徽章、排行榜和挑战等游戏机制整合到教育内容中&#xff0c;电子课程可以变得更具吸引力、激励性和有效性。以下是游戏化如何在转变电子学习中发挥重要作用&#…

基于Vue3组件封装的技巧分享

本文在Vue3的基础上针对一些常见UI组件库组件进行二次封装&#xff0c;旨在追求更好的个性化&#xff0c;更灵活的拓展&#xff0c;提供一些个人的思路见解&#xff0c;如有不妥之处&#xff0c;敬请指出。核心知识点$attrs,$slots 需求 需求背景 日常开发中&#xff0c;我们经…

【React】(推荐项目)使用 React、Socket.io、Nodejs、Redux-Toolkit、MongoDB 构建聊天应用程序 (2024)

使用 React、Socket.io、Nodejs、Redux-Toolkit、MongoDB 构建聊天应用程序 (2024) 学习使用 React、Socket.io、Node.js、Redux-Toolkit 和 MongoDB 构建响应式实时消息聊天应用程序。这个项目涵盖了从设置到实施的所有内容&#xff0c;提供了宝贵的见解和实用技能。无论您是…

P2568 GCD(GCD求和的常用变化 欧拉函数)

通过/p改变为互质的情况 维护欧拉函数前缀和即可。 GCD - 洛谷 #include<bits/stdc.h> using namespace std; const int N 1e78; vector<int> pri; bool not_prime[N]; long long phi[N]; long long sum[N]; void pre(int n) {phi[1] 1;for (int i 2; i < …

plt常用函数介绍一

目录 前言plt.figure()plt.subplot()plt.subplots()plt.xticks()plt.xlim() 前言 Matplotlib是Python中的一个库&#xff0c;它是数字的-NumPy库的数学扩展。 Pyplot是Matplotlib模块的基于状态的接口。在Pyplot中可以使用各种图&#xff0c;例如线图&#xff0c;轮廓图&#…

关于区块链的安全和隐私

背景 区块链技术在近年来发展迅速&#xff0c;被认为是安全计算的突破&#xff0c;但其安全和隐私问题在不同应用中的部署仍处于争论焦点。 目的 对区块链的安全和隐私进行全面综述&#xff0c;帮助读者深入了解区块链的相关概念、属性、技术和系统。 结构 首先介绍区块链…

AI大模型项目实战v0.2: 结合个人知识库

前言 在AI大模型项目实战v0.1版本中&#xff0c;我们实现了一个最简单的基于纯LLM的问答机器人Tbot。 今天升级到v0.2版本&#xff0c;结合个人知识库。 本系列每个版本&#xff0c;都将提供完整的代码文档&#xff0c;获取方法见文末。 下面开启我们的v0.2版本之旅。 v0.2 Tb…

如何用AI实现自动更新文章?(全自动更新网站)

AI的诞生确实给我们的生活和工作都带来了很大的改变&#xff0c;从我自身来讲&#xff0c;也渐渐习惯了遇到事情先问问AI&#xff0c;不管是翻译、专业性问题、PPT制作、总结写作这些&#xff0c;确实帮我迅速理清了思路&#xff0c;也可以有很多内容的借鉴。 作为一个业余爱好…

力扣 简单 206.反转链表

文章目录 题目介绍题解 题目介绍 题解 法一&#xff1a;双指针 在遍历链表时&#xff0c;将当前节点的 next 改为指向前一个节点。由于节点没有引用其前一个节点&#xff0c;因此必须事先存储其前一个节点。在更改引用之前&#xff0c;还需要存储后一个节点。最后返回新的头引…

鸿蒙OpenHarmony【小型系统基础内核(进程管理任务)】子系统开发

任务 基本概念 从系统的角度看&#xff0c;任务Task是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源&#xff0c;并独立于其它任务运行。 OpenHarmony 内核中使用一个任务表示一个线程。 OpenHarmony 内核中同优先级进程内的任务统一调度、运…

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

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