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

深入解析:【网络编程】套接字入门:网络字节序与套接字种类剖析

深入解析:【网络编程】套接字入门:网络字节序与套接字种类剖析


请添加图片描述


半桔:个人主页

个人专栏: 《Linux手册》《手撕面试算法》《C++从入门到入土》

有时候,白纸一张更能呈现无尽可能。 -《帕特森》-

文章目录

  • 一. 前言
  • 二. 套接字
  • 三. 网络字节序
  • 四. 套接字种类

一. 前言

在网络通信构建的数字世界里,套接字是程序叩响网络大门的密钥,网络字节序是数据跨平台流转的通用语言,而套接字种类 UDP 的高效灵活?就是则决定了通信的“战术风格”——是追求 TCP 的可靠稳行,还

本文将从这三个核心维度切入,拆解网络编程的底层逻辑:从套接字的创建与通信流程,到字节序转换的隐蔽陷阱,再到不同套接字类型的适用场景,逐步揭开网络通信的运行密码。无论你是初涉网络开发的学习者,还是希望深耕协议细节的开发者,这些基础命题的剖析,都将为你搭建起从理论到实践的桥梁,让网络编程的复杂原理变得清晰可触。

本文将分为三部分:

  1. 套接字;
  2. 网络字节序;
  3. 套接字类型。

二. 套接字

我们都知道数据在进行参数的时候要进行封装和解包,那么在接收方的传输层解包后他怎么知道交给上层的哪一个程序???

操作系统中的每一个应用都一个端口号Port来记录进程的唯一性,通过在报头中添加目的进程的端口号就可以让对方知道要将信息交付给哪一个程序。

IP使用来标识全网中唯一的一台主机的,而端口号用来标识一台主机上唯一的进程。
因此IP + Port就可以标定全网唯一的进程。这种定位进程的方式就称为套接字。、

在操作系统中PID也能定位唯一的进程呀,为什么不使用PID + IP来进行定位???

也行这样进行定位,但是为了将网络与系统进行解耦,利用新的端口号来标识进程。

在操作系统中一个哈希表,使用key-value的模式来将端口号与进程的task_struct结构体对象进行绑定。

三. 网络字节序

一个机器有大端,也有小端,两者存放数据的形式恰好相反,那么发送到网络中的数据形式是什么样的???

  • 错误的,根本看不懂;就是按照自己机器的数据存放方式进行发送,如果发送方是大端,接收方是小端,就会导致接收方解析出来的数据

能不能在报头中告诉对方自己是大端还是小端的???

不行,本来对方就不知道如何解析数据,而你在这些解析不出来的数据中告诉对方如何解析。

为了方便,TCP/IP规定,网络字节流中统一采用大端字节序,即低地址放高字节。

四. 套接字种类

在套接字编程中,根据通信范围和协议层次,主要可分为域间套接字网络套接字原始套接字三类,它们的应用场景和工作方式有显著区别:

原始套接字(Raw Socket)

以下是三种套接字应用时的结构体:分别对应原始套接字,网络套接字和域间套接字
![[套接字类型.png]]

其结构体字段如下:

struct sockaddr {
sa_family_t	sa_family;	/* address family, AF_xxx	*/
char		sa_data[14];	/* 14 bytes of protocol address	*/
};
struct sockaddr_in {
sa_family_t		sin_family;	/* Address family		*/
unsigned short int	sin_port;	/* Port number			*/
struct in_addr	sin_addr;	/* Internet address		*/
/* Pad to size of `struct sockaddr'. */
unsigned char		__pad[__SOCK_SIZE__ - sizeof(short int) -
sizeof(unsigned short int) - sizeof(struct in_addr)];
};
struct sockaddr_un {
sa_family_t sun_family;	/* AF_UNIX */
char sun_path[UNIX_PATH_MAX];	/* pathname */
};

以上三种套接字如果直接提供接口,就会出现3种不同但是类似的接口,因此为了方便在使用接口的时候统一传struct sockaddr,通过访问前两个字节来确定类型,进而使用不同类型的结构体进行操作。

http://www.jsqmd.com/news/6505/

相关文章:

  • 地产行业,居然还有这样的开发商 - 智慧园区
  • 【半导体物理 | 笔记】 第三章 半导体中的载流子分布
  • vscode提交github时报错:fatal: origin does not appear to be a git repository
  • 2025.9.30——1黄
  • VMware vSphere Replication 9.0.4 发布 - 虚拟机复制和数据保护
  • 【半导体物理 | 笔记】第二章 半导体中杂质和缺陷能级
  • VMware Live Site Recovery 9.0.4 发布 - 数据中心灾难恢复 (DR)
  • 【kafka】基于python发送kafka消息
  • VMware Tools 13.0.5.0 发布 - 客户机操作系统无缝交互必备组件
  • 使用openresty+lua来实现grafana中自动切换实时群集/历史群集对应的vmselect
  • 【python】根据给定的协议,解析一个hexdump 字符串
  • 读博期间的工作节奏与身心状态管理经验总结
  • 【Rust GUI开发入门】编写一个本地音乐播放器(7. 制作歌词显示面板) - Jordan
  • 基于内容可信空间的医疗行业机遇研究报告
  • 2025 年成型机厂商最新权威推荐排行榜:冷弯 / 光伏支架 / 门业等设备企业精度耐用性测评底樑/光伏支架/C型钢/彩钢瓦/快速门成型机厂商推荐
  • .Net Core MVC + Vue + SignalR 实现 后端数据主动推送到前端
  • js 获取下一个月时间和下一年的时间
  • 【Rust GUI开发入门】编写一个本地音乐播放器(5. 制作音乐列表组件) - Jordan
  • 【Nordic】nRF9151的SLM例程常用AT指令说明
  • sql server经典语句「转」
  • Codeforces 2149G Buratsuta 3 题解 [ 蓝 ] [ 摩尔投票 ] [ 线段树 ] [ 随机化 ] [ 主席树 ] [ 根号分治 ]
  • 2025 年最新推荐软件开发机构榜:聚焦微服务架构与 724 小时服务的优质厂商精选指南人力资源管理系统/资产管理系统/数据中台管理系统/流程管理系统软件开发公司推荐
  • 【半导体物理 | 学习笔记】第一章 半导体中的电子状态
  • 计数(5):多项式相关
  • 最新WTAPI开发微信机器人教程说明
  • 线性DP - 学习笔记
  • 2025 年最新制氮机厂家权威推荐排行榜:聚焦行业优质厂商综合实力,助力企业精准选购优质设备制氮机产生氮气/氮气纯化/设备改造/维修/保养/半导体用制氮机厂家推荐
  • idea打包推送maven仓库及同时推送到不同的maven仓库,本地和云上的腾讯云
  • 2025 年除湿机厂家最新权威推荐排行榜:实力厂家技术口碑评测及场景适配选购指南吊顶/泳池/车库/防爆/调温/新风除湿机厂家推荐
  • 2025 年液氨蒸发器厂家联系方式,众众电热:多领域加热设备供应与定制化解决方案提供商