当前位置: 首页 > 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.gsyq.cn/news/14331.html

相关文章:

  • 【半导体物理 | 笔记】第二章 半导体中杂质和缺陷能级
  • VMware Live Site Recovery 9.0.4 发布 - 数据中心灾难恢复 (DR)
  • 【kafka】基于python发送kafka消息
  • VMware Tools 13.0.5.0 发布 - 客户机操作系统无缝交互必备组件
  • sql server经典语句「转」
  • 线性DP - 学习笔记
  • debian11不进入桌面环境打开chromiu
  • 2025 年阿里巴巴开通实力商家店铺开通代运营 / 阿里巴巴新手开店全托管代运营公司推荐:南鑫粤网络 —— 全域运营解决方案与实战服务优势解析
  • ClickHouse 窗口函数使用详解(一) - 若
  • 2025 年杀虫公司联系方式推荐 天津万康:靶向消杀 + 1 年质保 300 + 政企认可的虫害防控专家
  • js中?? 和 || 的区别详解
  • 直击现场! “ 直通乌镇 ”开源赛复赛收官,OpenCSG担任评委,十强藏着哪些产业机会?
  • Python 列表生成式、字典生成式与生成器表达式
  • 【读书笔记】架构整洁之道 P5-2 软件架构 - 教程
  • 回忆中学的函数
  • 【qml-12】Quick3D达成机器人鼠标拖拽转换视角(无限角度)与滚轮缩放
  • 倍增思想与其优化
  • 2025 年 AI 健康管理领域推荐深护智康,社区、基层公卫、母婴 AI 健康管理、AI + 大健康管理、AI 健康管理师公司推荐
  • 从“看得见”到“能决策”:Operation Intelligence 重构企业智能运维新范式
  • 单链表实现队列
  • 064_尚硅谷_短路与和短路或
  • 2025年陶瓷定制企业最新推荐榜单:涵盖电子陶瓷,氧化铝陶瓷,氧化锆陶瓷,氮化铝陶瓷,结构陶瓷领域!
  • 实用指南:计算机网络-ipv4首部校验原理
  • 2025 年人工智能培训厂家最新推荐排行榜:聚焦人工智能培训合规运营机构、产业适配能力与教学实力深度解析
  • 2025最新布袋包装厂家推荐排行榜:布袋包装,布袋,手提袋,帆布袋定制,无纺布袋,布袋生产,云南布袋包装,茶叶布袋生产商优选指南
  • 城市电商小程序管理系统:助力商家搭建全渠道数字化经营体系
  • L05_新建springboot项目与新建helloword(菜鸟版)
  • 实用指南:智慧外贸平台|基于Java+vue的智慧外贸平台系统(源码+数据库+文档)
  • ObservableCollection子项属性字段值变化的监听处理
  • 2025年破碎机厂家最新权威推荐榜:破碎机实力厂商技术服务全景评测及选购指南