当前位置: 首页 > news >正文

浅谈 Linux 网络编程 - 网络字节序

文章目录

    • 前言
    • 核心知识
    • 关于 小端法
    • 关于 大端法
    • 网络字节序的转换 函数

前言

在进行 socket 网络编程时,会用到字节流的转换函数、例如 inet_pton、htons 等,那么为什么要用到这些函数呢,本篇主要就是对这部分进行介绍。

核心知识

重点需要记住的就是以下三点:
① 本地的数据和网络的数据,其排列方式是有区别的。本地数据存储 采用的是 “小端法”,网络数据流 采用的是 “大端法” 。(这就会导致 本地字节序 和 网络字节序 之间需要做转换)

② 记住两个 IP 地址转换函数
inet_pton(): 该函数用于将点分十进制字符串形式的IP地址,转换为网络字节序的二进制形式IP地址。通常在需要从用户输入的IP地址解析为网络字节序形式时使用。

inet_ntop(): 该函数用于将网络字节序的二进制形式IP地址,转换为点分十进制字符串形式的IP地址。通常在需要将IP地址转换为可读性更好的形式(如日志输出)时使用。

记住二者使用场景:
例如,在接收到来自客户端的连接请求时,通常会使用 inet_ntop() 将客户端的IP地址转换为可读性更好的字符串格式进行显示或记录。而在需要把用户输入的IP地址转换为网络字节序进行套接字地址填充时,则会使用 inet_pton()。

③ 记住几个能完成 网路字节序 和 主机字节序 转换的库函数
在这里插入图片描述
注意,以上四个函数是进行整数之间的转换。

h 表示 host,n:network,l:32 位长整型,s:16 位短整型。

例如 htonl,用于将 32位主机字节序 的整数转换为 网络字节序 (大端字节序)表示。(结合 INADDR_ANY 参数可用于 IP 转换)。

例如 htons,用于将 16位主机字节序 的整数转换为 网络字节序 (大端字节序)表示。(结合 SERV_PORT 参数可用于 端口 转换)。

以上的 转换函数 为什么只提到了 IP 和 端口 的转换呢?
因为 IP 地址 + 端口号,可以在网络环境中,唯一标识一个进程。

关于 小端法

本地数据流,高位存高地址。低位存低地址。 int a = 0x12345678
在这里插入图片描述

关于 大端法

网络数据流, 高位存低地址。低位存高地址。int a = 0x12345678
在这里插入图片描述
本地存储的数据 和 网络字节序 的存储方式不一致,这会导致在进行 socket 网络通信时,需要做字节序的转换。

为什么不采用一致的存储方案,而是分成 大端法 和 小端法,这涉及到历史原因。

网络字节序的转换 函数

可以调用以下库函数做 网络字节序主机字节序 的转换。
在这里插入图片描述
h 表示 host,n:network,l:32 位长整型,s:16 位短整型。

例如 htonl,用于将 32位主机字节序 的整数转换为 网络字节序 (大端字节序)表示。(结合 INADDR_ANY 参数可用于 IP 转换)。

例如 htons,用于将 16位主机字节序 的整数转换为 网络字节序 (大端字节序)表示。(结合 SERV_PORT 参数可用于 端口 转换)。

#include <arpa/inet.h>

int inet_pton(int af, const char *src, void *dst); 本地字节序(string IP) —> 网络字节序

		af:AF_INET、AF_INET6src:传入,IP地址(点分十进制)dst:传出,转换后的 网络字节序的 IP地址。 返回值:成功: 1异常: 0, 说明src指向的不是一个有效的ip地址。失败:-1

const char * inet_ntop(int af, const void *src, char *dst, socklen_t size); 网络字节序 —> 本地字节序(string IP)

		af:AF_INET、AF_INET6src: 网络字节序IP地址dst:本地字节序(string IP)size: dst 的大小。返回值: 成功:dst。 	失败:NULL

提问:
htonl 函数也能将本地字节序转换成网络字节序。那么,htonl 函数 和 inet_pton 函数有什么区别呢

解答:
htonl() 和 inet_pton() 这两个函数在功能上是不同的:

htonl(): 该函数用于将32位主机字节序的整数转换为网络字节序(大端字节序)表示。它通常用于处理整数类型数据的字节序转换。

inet_pton(): 该函数用于将点分十进制字符串形式的IP地址转换为二进制格式的网络字节序IP地址。它将一个IP地址从人类可读的字符串格式转换为计算机网络设备能够理解的二进制格式。

总结来说,
htonl() 用于 整数类型数据 的 字节序 转换。
inet_pton() 用于 IP地址(字符串) 表示形式和 网络字节序 之间的转换。

相关文章:

浅谈 Linux 网络编程 - 网络字节序

文章目录 前言核心知识关于 小端法关于 大端法网络字节序的转换 函数 前言 在进行 socket 网络编程时&#xff0c;会用到字节流的转换函数、例如 inet_pton、htons 等&#xff0c;那么为什么要用到这些函数呢&#xff0c;本篇主要就是对这部分进行介绍。 核心知识 重点需要记…...

Nginx网络服务六-----IP透传、调度算法和负载均衡

1.实现反向代理客户端 IP 透传 就是在日志里面加上一个变量 Module ngx_http_proxy_module [rootcentos8 ~]# cat /apps/nginx/conf/conf.d/pc.conf server { listen 80; server_name www.kgc.org; location / { index index.html index.php; root /data/nginx/html/p…...

【Linux进程】进程状态---进程僵尸与孤儿

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.进程排队2.进程状态…...

MySQL数据库基础知识总结(适合小白入门使用)一

文章目录 一 数据库数据表的创建等基本操作二 数据类型的测试三 完整性约束条件四 数据表结构的相关操作五 对表中数据的操作六 表达式与查询七 高级的查询功能 一 数据库数据表的创建等基本操作 #注释内容&#xff08;与python很像&#xff09; -- 也为注释内容 -- 创建一个数…...

历史新知网:寄快递寄个电脑显示器要多少钱?

以下文字信息由&#xff08;新史知识网&#xff09;编辑整理发布。 让我们赶紧来看看吧&#xff01; 问题1&#xff1a;快递寄电脑显示器要多少钱&#xff1f; 此物有多重&#xff1f; 顺丰寄就可以了&#xff0c;但是必须是原包装的&#xff0c;不然不好寄。 问题2&#xff1…...

在两台CentOS 7服务器上部署MinIO集群。

环境说明&#xff1a; 2台Centos7服务器 IP地址分别为172.16.1.9和172.16.1.10 1. 创建minio用户和目录 在两台服务器上执行以下命令&#xff1a; sudo useradd -m -d /app/minio minio sudo mkdir -p /app/minioData sudo mkdir -p /app/minio/logs sudo chown -R mini…...

【计算机网络】深度学习使用应用层的HTTP协议

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【计算机网络】深度学习使用应用层的HTTP协议 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 一:HTTP是什么二:HTTP请求1.HTTP请求的组成2.HTTP请求的方法…...

Ubuntu18.04 系统上配置并运行SuperGluePretrainedNetwork(仅使用CPU)

SuperGlue是Magic Leap在CVPR 2020上展示的研究项目&#xff0c;它是一个图神经网络&#xff08;Graph Neural Network&#xff09;和最优匹配层&#xff08;Optimal Matching layer&#xff09;的结合&#xff0c;训练用于对两组稀疏图像特征进行匹配。这个项目提供了PyTorch代…...

协议-http协议-基础概念01-发展历程-http组成-http是什么-相关的应用-相关的协议

发展历程-http组成-http是什么-相关的应用-相关的协议 参考来源&#xff1a; 极客时间-透视HTTP协议(作者&#xff1a;罗剑锋)&#xff1b; 01-HTTP的发展历程 1989 年&#xff0c;任职于欧洲核子研究中心&#xff08;CERN&#xff09;的蒂姆伯纳斯 - 李&#xff08;Tim Ber…...

UI学习-学习内容

教程网址1&#xff1a;UI 新手如何从设计规范中提升自己 推荐一下高质量的设计规范 满屏干货 语雀 B站地址1&#xff1a;新像素 UI 新手如何从设计规范中提升自己 推荐一下高质量的设计规范 满屏干货 UI设计培训_哔哩哔哩_bilibili 教程地址2&#xff1a;UI 新手成长经验分享…...

Flink CDC 提取记录变更时间作为事件时间和 Hudi 表的 precombine.field 以及1970-01-01 取值问题

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…...

【网络安全】网络安全意识教育实用指南

随着科技的不断发展和数字世界的变革&#xff0c;我们不仅从中获得前所未有的力量&#xff0c;也同时面临着前所未有的风险挑战。多数CISO&#xff08;首席信息安全官&#xff09;时刻致力于协助企业抵御各种安全威胁。在“武器库”中有一件珍贵的法宝&#xff1a;网络安全意识…...

wordpress模板购买网站推荐

简站wordpress主题 老牌wordpress开发团队&#xff0c;开发过数百款wordpress主题&#xff0c;作品是最好的简历&#xff0c;靠作品说话&#xff0c;看作品喜欢不喜欢就可以了。 https://www.jianzhanpress.com WP模板牛 免费wordpress下载网站&#xff0c;上面有上百款免费…...

LeetCode 刷题 [C++] 第240题.搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 题目分析 通过分析矩阵的特点发现&#xff0c;其左下角和右上角可以看作一个“二叉搜索树的根节…...

HP笔记本电脑如何恢复出厂设置?这里提供几种方法

要恢复出厂设置Windows 11或10的HP笔记本电脑,你可以使用操作系统的标准方法。如果你运行的是早期版本,你可以使用HP提供的单独程序清除计算机并重新安装操作系统。 恢复出厂设置运行Windows 11的HP笔记本电脑​ 所有Windows 11计算机都有一个名为“重置此电脑”的功能,可…...

Elasticsearch:了解人工智能搜索算法

作者&#xff1a;来自 Elastic Jessica Taylor, Aditya Tripathi 人工智能工具无处不在&#xff0c;其原因并不神秘。 他们可以执行各种各样的任务并找到许多日常问题的解决方案。 但这些应用程序的好坏取决于它们的人工智能搜索算法。 简单来说&#xff0c;人工智能搜索算法是…...

(HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕

一、电路接法 电路接法参照江科大视频。 二、相关代码及文件 说明&#xff1a;代码采用hal库&#xff0c;通过修改江科大代码实现。仅OLED.c文件关于引脚定义作了hal库修改&#xff0c;并将宏定义OLED_W_SCL(x)、OLED_W_SDA(x)作了相关修改。 1、OLED.c void OLED_I2C_Init(voi…...

分享便携式血氧仪单片机方案

血氧仪主要测量指标分别为脉率、血氧饱和度、灌注指数。血氧饱和度是临床医疗上重要的基础数据之一。以家用指压式血氧仪为例&#xff0c;一个血氧仪一般由MCU、存储芯片、两个控制LED的数模转换器、两个发光二极管驱动等组成。 灵动微电子的MM32MCU产品已被广泛地应用在了一些…...

【Java设计模式】四、适配器模式

文章目录 1、适配器模式2、举例 1、适配器模式 适配器模式Adapter Pattern&#xff0c;是做为两个不兼容的接口之间的桥梁目的是将一个类的接口转换成客户希望的另外一个接口适配器模式可以使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 最后&#xff0c;适配器…...

RV32/64 特权架构 - 特权模式与指令

RV32/64 特权架构 - 特权模式与指令 1 特权模式2 特权指令2.1 mret&#xff08;从机器模式返回到先前的模式&#xff09;2.2 sret&#xff08;从监管模式返回到先前的模式&#xff09;2.3 wfi&#xff08;等待中断&#xff09;2.4 sfence.vma&#xff08;内存屏障&#xff09; …...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...