【Linux:网络字节序+大小端转换函数】

目录

网络字节序:

小端存储:

大端存储:

能否在报文中添加大小端信息?

字节转换函数:


网络字节序:

计算机中存在两种存储字节的方式,分别是:大端存储和小端存储,TCP/IP协议规定,网络数据字节流应采用大端字节序。如果当前发送的主机是小端机就需要将数据转化为大端,再发送。

小端存储:

  • 数据的低位字节存储到内存的低地址位, 数据的高位字节存储到内存的高地址位
  • 我们使用的PC机,数据的存储默认使用的是小端

大端存储:

  • 低位字节存储到高地址位处,高位字节存储到低地址位处
  • 套接字通信的存储是大端存储

能否在报文中添加大小端信息?

不可以,当报文发送时,对端主机解析报文解析报文是大端解析还是小端解析呢,可以理解该问题为一个"蛋生鸡还是鸡生蛋"的问题。压根儿就行不通

因此,网络协议(TCP/IP)直接规定网络通信必须大端字节序(低地址高字节),由此就需要有大小端转换的函数了

发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出

字节转换函数:

#include <arpa / inet.h>
uint 32_t htonl (uint 32_t hostlong)
uint 16_t htons (uint 16_t hostshort)
uint 32_t ntohl (uint 32_t netlong)
uint 16_t ntohs (uint 16_t netshort)
[字节转换函数]
  • h表示host,n表示network,l表示32位长整数,s表示16位短整型
  • 主机为小端字节序,这些函数将参数做相应的大小端转换然后返回
  • 主机为大端字节序,这些函数不做转换,参数原封不动的返回
相关推荐
云游牧者18 分钟前
K8S故障排查三板斧-CSDN博客
运维·docker·云原生·kubernetes·k8s·容器化·故障排查
程序员老邢36 分钟前
【技术底稿 32】Nginx 经典大坑复盘:本机公网域名自环代理,导致接口返回首页 / 404 实战排障
java·运维·nginx·前后端分离·技术底稿·后端部署
霸道流氓气质44 分钟前
SpringAIAlibaba整合 Streamable HTTP 调用免费 MCP Server 实战全解
网络·网络协议·http
Lust Dusk1 小时前
移动安全资产--MobSF工具搭建教程
网络·安全·web安全·安全架构
сокол1 小时前
【网安-Web渗透测试-内网渗透】局域网ARP攻击与DNS劫持
服务器·网络·网络安全
忧云1 小时前
开源 SSH 客户端 Netcatty:免费替代 Termius,带 AI 的现代化运维工具
运维·开源·ssh
想唱rap1 小时前
传输层协议TCP
linux·运维·服务器·网络·c++·tcp/ip
曦夜日长2 小时前
Linux系统篇,权限(二):缺省权限、最终权限的计算、文件隔离的两种方式
linux·运维·服务器
云水一下2 小时前
黑客的“猜密码”游戏:SSH暴力破解实战与Linux安全加固
linux·渗透测试·ssh·暴力破解
许彰午2 小时前
政务远程帮办部署踩坑实录——从互联网到政务外网
开发语言·网络·政务