1.17号网络

网络属性

1> 对于套接字而言,在不同的层中,可以设置不同的属性,如端口号快速重用、超时时间、设置广播、加入多播组等等

2> 关于网络属性,有两个函数,分别是 setsockopt、getsockopt

 #include <sys/types.h>          /* See NOTES */
 #include <sys/socket.h>

       int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
       功能:获取网络属性
       参数1:套接字文件描述符
       参数2:套接字要设置的层次
               应用层:SOL_SOCKET
               tcp传输层:IPPROTO_TCP
               udp传输层: IPPROTO_UDP
               网络层:IPPROTO_IP
        参数3:指定层内的属性,见下表
        参数4:存放该属性的容器起始地址
        参数5:参数4的大小
        返回值:成功返回0,失败返回-1并置位错误码
        
        
       int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
       功能:设置网络属性
       参数1:套接字文件描述符
       参数2:套接字要设置的层次
               应用层:SOL_SOCKET
               tcp传输层:IPPROTO_TCP
               udp传输层: IPPROTO_UDP
               网络层:IPPROTO_IP
        参数3:指定层内的属性,见下表
        参数4:设置该属性的容器起始地址
        参数5:参数4的大小
        返回值:成功返回0,失败返回-1并置位错误码

多点通信

单播

1> 单播发生在主机之间一对一的通信模式,交换机或者路由器只对数据进行转发,不做复制

2> 每次只有两个实体之间进行相互通信,发送端和接收端都是唯一确定的

广播

1> 主机之间的一对多的通信模式,网络对其中的每一台主句发出的信息都进行复制并转发

2> 所有主机都可以收到广播消息(无论你是否愿意接收),所以,广播是基于UDP通信模式

3> 广播地址:网络号 + 255

例如:主机地址为192.168.125.171 ---> 192.168.125.255

4> 广播消息是不能穿过路由器的,也就是说广播消息禁止在外网上进行传播,所以广播只能完成局域网内的多点通信

广播的发送端模型 ----> 类似于UDP的客户端

1> socket 创建套接字

2> setsockopt 设置网络属性,允许广播

3> bind 非必须绑定

4> 填充接收端地址信息结构体

ip:填广播地址(192.168.125.255)

port:与接收端保持一致

5> sendto 发送消息

6> close 关闭套接字

广播的接收端模型 ----> 类似于UDP的服务器端

1> socket 创建套接字

2> 填充地址信息结构体

ip:广播地址

port:与发送端保持一致

3> bind 绑定端口号与ip地址

4> recvfrom 接收消息

5> close 关闭套接字

组播

1> 组播也是实现主机之间一对多的通信模型,跟广播不同的是,组播发送的消息,只有加入多播组的成员才能收到,没有加入的就无法收到,不会占用柜台对的网络带宽

2> 组播也是使用UDP实现

3> 组播地址:就是D类网络,224.0.0.0 -- 239.255.255.255

组播的发送端模型 --->类似于UDP的客户端

1> socket 创建套接字

2> bind 非必须绑定

3> 填充接收端地址信息结构体

ip:组播地址,与接收端保持一致

port:与接收端保持一致

4> sendto 发送组播消息

5> close 关闭套接字

组播的接收端模型 ---> 类似于UDP的服务器

1> socket 创建套接字

2> setsockopt 设置网络属性

设置层级:IPPROTO_IP

设置属性:IP_ADD_MEMBERSHIP

属性类型:

struct ip_mreqn {

struct in_addr imr_multiaddr; /* IP multicast group address / //组播ip地址

struct in_addr imr_address; / IP address of local interface / //本地IP地址

int imr_ifindex; / interface index */ 网络索引 0表示使用默认网络索引

ip ad:查看自己的网卡索引号 ens33 ---> 2

};

3> 填充地址信息结构体

ip:组播IP,与发送端保持一致

port :与发送端保持一致

4> bind 必须绑定

5> recvfrom 接收消息

6> close 关闭套接字

域套接字相关概念

1> 只能在同一主机之间完成多个进程间的通信方式,是最原始的套接字通信模型

2> 由于不需要借助网络,所以在通信时,无需使用ip地址和端口号

3> 会在内核空间使用 套接字文件 进行通信

4> bcd-lsp 中的s,说的就是套接字文件类型

5> socket函数的说明

流式域套接字

1> 基于TCP通信原理,面向连接的通信方式

2> bind函数,只能绑定一个不存在的套接字文件,如果绑定的套接字文件存在,则bind函数报错:Address already in use

3> 对于客户端而言,如果不绑定一个套接字文件,系统不会给客户端绑定套接字文件

流式域套接字服务器端实现

流式域套接字客户端实现

报式域套接字

1> 基于UDP面向无连接的通信方式

2> 如果客户端没有绑定套接字,系统不会为其绑定套接字文件,当服务器想要给客户端发消息时:怎么办?

报式域套接字服务器端

报式域套接字客户端

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/632583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库(基础理论+MySQL安装和部署)

目录 基础理论 1.1 什么是数据库&#xff1f; 1.2 DBMS数据库管理系统 1.3 数据库与文件系统的区别 1.4 数据库的发展和规划 1.5 常见的数据库 1.5.1 关系型数据库 1.5.2 非关系型数据库 1.6 DBMS支持的数据模型 层次模型 网状模型 关系模型 面向对象模型&#xf…

T2T VIT 学习笔记(附代码)

论文地址&#xff1a;https://arxiv.org/abs/2101.11986 代码地址&#xff1a;https://github.com/PaddlePaddle/PASSL/tree/main/configs/t2t_vit 1.是什么&#xff1f; T2T-ViT是一种基于Transformer的视觉模型&#xff0c;用于图像分类任务。它通过将图像分割成小的图块&…

在uni-app中使用sku插件,实现商品详情页规格展示和交互。

商品详情 - SKU 模块 学会使用插件市场&#xff0c;下载并使用 SKU 组件&#xff0c;实现商品详情页规格展示和交互。 存货单位&#xff08;SKU&#xff09; SKU 概念 存货单位&#xff08;Stock Keeping Unit&#xff09;&#xff0c;库存管理的最小可用单元&#xff0c;通…

【MyBatis-Plus】逻辑删除

对于一些比较重要的数据&#xff0c;我们通常采用逻辑删除。&#xff08;即用一个字段表示是否删除&#xff0c;实际上始终在数据库没有被删除&#xff09; 当逻辑删除字段为 true&#xff0c;业务处理的时候会自动把该数据当做一个“不存在”的数据处理。&#xff08;即不处理…

这篇Java基础快速入门学习教程,让我至少少走3个月弯路

一、作为刚接触Java的新手&#xff0c;先了解Java的基础。 Java 基本语法、Java 平台应用、Java的核心概念&#xff1a;JVM、JDK、JRE以及Java面向对象思想&#xff0c;同时要会学到如何在系统中搭建Java开发环境&#xff0c;以及如何利用第三方工具进行Java程序的开发。 还有…

计算机网络课程设计-Tracert 与 Ping 程序设计与实现

目录 前言 1 实验题目 2 实验目的 3 实验内容 3.1 步骤 3.2 关键代码 3.2.1 发送ICMP数据报 3.2.2 解析收到的数据报 4 实验结果与分析 5 代码 5.1 ping代码 5.2 Tracert代码 前言 本实验为计算机网络课程设计内容&#xff0c;基本上所有代码都是根据指导书给的附录…

BigeMap在Unity3d中的应用,助力数字孪生

1. 首先需要用到3个软件&#xff0c;unity&#xff0c;gis office 和 bigemap离线服务器 Unity下载地址:点击前往下载页面(Unity需要 Unity 2021.3.2f1之后的版本) Gis office下载地址:点击前往下载页面 Bigemap离线服务器 下载地址: 点击前往下载页面 Unity用于数字孪生项…

Flutter中的图片查看器:使用photo_view库

在移动应用开发中&#xff0c;图片查看器是一个常见的需求。Flutter提供了许多库来简化这一过程&#xff0c;其中photo_view库是一个强大而灵活的选择。本文将介绍photo_view库的基本概念以及如何在Flutter应用中使用它来实现漂亮的图片查看体验。 1. 什么是photo_view库&…

ilqr 算法说明

1 Introduction 希望能用比较简单的方式将ilqr算法进行整理和总结。 2 HJB方程 假定我们现在需要完成一个从A点到B点的任务&#xff0c;执行这段任务的时候&#xff0c;每一步都需要消耗能量&#xff0c;可以用下面这个图表示。 我们在执行这个A点到B点的任务的时候&#xf…

什么是区块链?

区块链 区块链 &#xff08;英语&#xff1a;blockchain&#xff09;是借由 密码学 与 共识机制 等技术建立&#xff0c;存储数据的 保证不可篡改和不可伪造的 分布式技术。 什么是区块 区块 就是将一批数据打包在一起&#xff0c;并且给打包出来的区块编号。第一个区块的编…

AT24C02读写操作 一

//AT24C02初始化 void AT24C02_Init(void) { IIC_Init(); } //AT24C02的字节写入 写一个字节 void AT24C02_WordWrite(uint8_Address,uint8_t Data) { //1。主机发送开始信号 IIC_StartSignal(); //2.主机发送器件地址 写操作 IIC_SentBytes(0xA0); //3.主机等侍从机应…

vue3-事件处理

事件监听 DOM 事件监听指令 v-on 简写 v-on:click"handler" 或者 click"handler"事件处理器 (handler) 的值可以是&#xff1a; 内联事件处理器&#xff1a;比如 click 方法事件处理器&#xff1a;一个指向组件上定义的方法的属性名或是路径。 在内联…

【干货】网络安全之URL过滤

热门IT课程【视频教程】-华为/思科/红帽/oraclehttps://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 URL过滤是一种针对用户的URL请求进行上网控制的技术&#xff0c;通过允许或禁止用户访问某些网页资源&#xff0c;达到规范上网行为和降低安全…

matlab行操作快?还是列操作快?

在MATLAB中&#xff0c;通常情况下&#xff0c;对矩阵的列进行操作比对行进行操作更有效率。这是因为MATLAB中内存是按列存储的&#xff0c;因此按列访问数据会更加连续&#xff0c;从而提高访问速度。 一、实例代码 以下是一个简单的测试代码&#xff0c; % 测试矩阵大小 ma…

Python实战 -- PySide6 制作天气查询软件

一、环境准备 开发环境&#xff1a;Python 3.9.2 pycharm PySide6 申请天气情况 API &#xff1a;https://console.amap.com/dev/key/app designer 设计 ui 目录下 Weather.ui 转换为 Weather.py 结果显示 二、完整代码 import sysfrom PySide6 import QtWidgetsimport…

redis持久化机制:RDB和AOF

Redis的持久化机制主要依赖于两种方法&#xff1a;RDB&#xff08;Redis Database&#xff09;和AOF&#xff08;Append Only File&#xff09;。这两种机制可以单独使用&#xff0c;也可以同时使用&#xff0c;以提高数据的持久性和可靠性。 RDB&#xff08;Redis Database&a…

Mysql深度分页优化的一个实践

问题简述: 最近在工作中遇到了大数据量的查询场景, 日产100w左右明细, 会查询近90天内的数据, 总数据量约1亿, 业务要求支持分页查询与导出. 无论是分页或导出都涉及到深度分页查询, mysql通过limit/offset实现的深度分页查询会存在全表扫描的问题, 比如offset1000w, limit10…

7. UE5 RPG修改GAS的Attribute的值

前面几节文章介绍了如何在角色身上添加AbilitySystemComponent和AttributeSet。并且还实现了给AttributeSet添加自定义属性。接下来&#xff0c;实现一下如何去修改角色身上的Attribute的值。 实现拾取药瓶回血功能 首先创建一个继承于Actor的c类&#xff0c;actor是可以放置到…

c++八股6

C内存释放&#xff1a; 在C中&#xff0c;动态分配的内存通过new操作符分配&#xff0c;并通过delete操作符释放。当不再需要对象时&#xff0c;应当确保正确调用delete以防止内存泄漏。现代C中&#xff0c;智能指针如std::unique_ptr、std::shared_ptr等可以自动管理内存&…

WAF攻防相关知识点总结2-代码免杀绕过

WAF的检测除了有对于非正常的流量检测外还对于非正常的数据包特征进行检测 以宝塔为例 在宝塔的后台可以放置一句话木马的文件 宝塔不会对于这个文件进行拦截&#xff0c;但是一旦我们使用菜刀蚁剑等webshell工具去进行连接的时候&#xff0c;数据报中有流量特征就会被拦截 …