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

Linux——网络(1)

一、IPC(进程间通信方式)

IPC:Inter  Process  Communication  

共享内存(最高效的进程间通信方式) 


        虚拟地址        mmu(memory management unit )

              
共享内存:
  1.是一块,内核预留的空间 
  2.最高效的通信方式 
(避免了用户空间 到 内核空间的数据拷贝)

二、IPC通信方式 ---操作流程类似的操作

    system v :  共享内存 

    IPC对象操作通用框架:
    key值 ==> 申请 ==》读写 ==》关闭 ==》卸载

1、产生key值 

       key_t ftok(const char *pathname, int proj_id);
    功能:
             将pathname 和 proj_id 转换为 key值 
    参数:
          @pathname   //给一个路径名 
          @proj_id        //工程id       eg: 'A'
    返回值
          成功 key值
          失败 -1     

2、通过key获取ipc对象 (共享内存)

    申请对象:shmget()         shared memory get        
    int shmget(key_t key, size_t size, int shmflg);
    功能:
         使用唯一键值key向内核提出共享内存使用申请
    参数:key   唯一键值
          size  要申请的共享内存大小
          shmflg 申请的共享内存访问权限,八进制表示
          如果是第一个申请,则用IPC_CREAT
          如果要检测是否存在,用IPC_EXCL
    返回值:
            成功 返回共享内存id,一般用shmid表示
            失败  -1;

            share memory attach

3、共享内存 绑定 

    映射对象:shmat()
    void *shmat(int shmid, const void *shmaddr, int shmflg);
    功能:将指定shmid对应的共享内存映射到本地内存。
    参数:shmid        要映射的本地内存
               shmaddr  本地可用的地址,如果不确定则用NULL,                                                                                         表示由系统自动分配。
                shmflg     0 ,  表示读写
                                SHM_RDONLY, 只读
     返回值:
            成功 返回映射的地址,一般等于shmaddr
            失败 (void*)-1        

4、解除绑定(映射)

    撤销映射:shmdt
    int shmdt(const void *shmaddr);
    功能:将本地内存与共享内存断开映射关系。
    参数:shmaddr 要断开的映射地址。
    返回值:成功  0
                  失败  -1;

5、销毁IPC对象 

    删除对象:shmctl
    int shmctl(int shmid, int cmd, struct shmid_ds *buf); //ctl = control 
    功能:
          修改共享内存属性,也可以删除指定的共享内存对象。
    参数:shmid  要删除的共享内存对象
               cmd     IPC_RMID 删除对象的宏
               buff      NULL 表示只删除对象。
    返回值:成功 0
                  失败 -1

三、实现网络通信

1.物理层面

有一个信息通路  

  1.   有线 
  2.   无线   5G、4G、星链

2.软件层面(逻辑层面)

        也需要 一个通路 

3、osi七层模型 

osi参考模型 
    1. 物理层 
       规定了物理层面的电气特性及相关机械特性 
       物理层面数据的传输 ---  一位一位二进制数据   //比特流 
    
    2. 数据链路层 
       规定了 传输数据的格式  //帧数据 
                                              //控制传输过程可靠 
    
    3. 网络层 (网际层)
       用于解决 网络 与 网络之间 数据传输  //数据包 
       
    4. 传输层 
       传输控制层,控制传输过程,保证数据完整和可靠 
    
    5. 会话层  
       处理一次会话过程 
    6. 表示层 
       规定了 传输数据的格式 和 方式  //加密 
    7. 应用层 
       就是直接获取要收发的数据    
       
 实际应用到的是 tcp/ip 模型 

  •     应用层 
  •     传输层 
  •     网络层 
  •     数据链路层 
  •     物理层 

4层模型 

  •     应用层 
  •     传输层 
  •     网络层 
  •     网络接口层 

    每个层次中,都有自己的一套规范 --- 协议 
    
操作系统角度:


用户层            应用层  <---- 程序员 
-----------------[socket]----------------------
内核层            传输层         //这些层次 操作系统已经实现 
                       网络层        //tcp/ip 协议 栈  (网络协议栈)
                       数据链路层    
                       物理层 

4、IP (用来标识网络中的一台主机)

      通过ip可以找到对应一台主机

      本质: 32位整型数值 
      表示方式 点分十进制 ( 0~255)


ip地址的组成:
      网络号 + 主机号 
      网络号 ---表示所处的网络 
      主机号 ---表示能容纳的主机
端口号 (用来表示主机中某一个具体(进行网络通信)进程 )
ip+端口  //进程在网络的 地址        

5、网络编程

TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数
                                           据无误、数据无丢失、数据无失序、数据无重复到达的通信)

适用情况:
        1. 适合于对传输质量要求较高,以及传输大量数据
            的通信。
        2. 在需要可靠数据传输的场合,通常使用TCP协议
        3. QQ等即时通讯软件的用户登录账户管理相关
            的功能通常采用TCP协议

tcp协议特点:
        1. 面向连接   //类似打电话通话之前 ,必须先打通 
        2. 可靠传输   //保证数据准确可靠 (tcp协议机制 里面的功能 )
        3. 面向字节流程

UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。
在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

 适用情况:
        1. 发送小尺寸数据(如对DNS服务器进行IP地址查询时)
        2. 在接收到数据,给出应答较困难的网络中使用UDP。(如:无
            线网络)
        3. 适合于广播/组播式通信中。
        4. MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通
            讯通常采用UDP协议
        5. 流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP
            方式进行实时数据传输

UDP特点:广播 
1.不可靠 
2.无连接 
3.数据报  

6、编程

  编程模型 
     c/s    client server    客户端,服务器模型     --- 专用客户端 
     b/s    browser server   浏览器,服务器模型     --- 通用的客户端 
     p2p    peer to peer     点对点传输 

基于UDP c/s通信模型:
               //client ---客户端 --- 角色  --- 主动的角色  
socket    //1.一种特殊的文件 --- 专门用于网络通信(不同主机间的进程)
              //2.socket 编程接口  --- socket 函数 
              //提供了一个可以访问 操作系统 网络功能的接口 
          
sendto //发数据 
            //server --- 服务器端 --角色 --- 被动的角色  
recvfrom    //接收数据 

1)、socket 

int socket(int domain, int type, int protocol);
功能:程序向内核提出创建一个基于内存的套接字描述符    
参数:   
      //domain --域 (范围) ---socket 用于什么范围的通信
      //  ipv4 
      // ipv6 
      domain  地址族,PF_INET == AF_INET ==>互联网程序
                     PF_UNIX == AF_UNIX ==>单机程序
      type    套接字类型:
                SOCK_STREAM  流式套接字 ===》TCP   
                SOCK_DGRAM   用户数据报套接字===>UDP
                SOCK_RAW     原始套接字  ===》IP
      protocol 协议 ==》0 表示自动适应应用层协议。

返回值:

        成功 返回申请的套接字文件描述符 
        失败  -1
      
    ssize_t sendto(    int sockfd,  //用于通信的socket对应的fd
                        const void *buf,  //表示要发送的数据所在的一块空间 
                               size_t len,  //表示发送的字节数 
                                 int flags,  //0  --- 默认  
 const struct sockaddr *dest_addr,                                                                                                                                                     //表示 要发送到的 地址 (网络地址 ip+端口号 ) 
                socklen_t addrlen   //表示dest_addr 这个参数的长度 
                          );
      返回值:
          成功  发送出去的字节的数 
          失败  -1 

2)、端口号

       16位数值(unsigned short ) //0~65535 (65536个数)    //标示一个进程
        TCP和 UDP 的端口号是独立的

(1) 作用

        唯一的标识一个进程
       每一个应用程序进程有一个端口号,
       通讯时区分数据包属于哪个应用程序进程

(2) 分类
   端口号一般由IANA (Internet Assigned NumbersAuthority) 管理
   众所周知端口:
                  1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用)
                  知名端口号(已经分配给标准应用服务软件) 
                  如: 
                  http协议用到的端口号 80 
    已登记端口:  
                  1024~49151
                  注册端口号(非标准应用服务软件的软件可以申请的端口号范围)
    动态或私有端口://50000 以上的端口号 
                  49152~65535 动态分配的端口号(系统动态分配给应用程序使用的)

(3) 长度
    2字节(16bit) 
数字转换函数:
    主机转网络:
                uint32_t htonl(uint32_t hostlong);
                ipv4   192.168.0.1    1~65535
                uint16_t htons(uint16_t hostshort);
网络转主机:host to net 
                net to host 
                uint32_t ntohl(uint32_t netlong);
                uint16_t ntohs(uint16_t netshort);
    htonl --- h(host) to n(network) l (long)  //32位的数据
    htons --- h(host) to n(network) s (short) //16位的数据 
    ntohs --- n(network) to h(host)  s (short) 
    
字符串转换函数:
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>

主机转网络:
    in_addr_t inet_addr(const char *cp);
    inet_addr("192.168.1.20");
    cli.sin_addr
网络转主机:char *inet_ntoa(struct in_addr in); //a -- ascii 

相关文章:

Linux——网络(1)

一、IPC&#xff08;进程间通信方式&#xff09; IPC&#xff1a;Inter Process Communication 共享内存&#xff08;最高效的进程间通信方式&#xff09; 虚拟地址 mmu(memory management unit ) 共享内存: 1.是一块&#xff0c;内核预留的空间 2.最高效的…...

【五】阿伟开始学Kafka

阿伟开始学Kafka 概述 人生若只如初见&#xff0c;阿伟心里回想起了第一次和Kafka见面的场景&#xff0c;记忆虽然已经有些模糊&#xff0c;但是感觉初次见面是美好的。积累了一些实战经验之后&#xff0c;阿伟感觉不能再是面对百度开发了&#xff0c;于是决心系统的学习一下Ka…...

Java—Arrays api

public static String toString(数组) //把数组拼接成一个字符串 public static int binarySearch(数组&#xff0c;查找的元素) //二分查找法查找元素 public static int[] copyOf(原数组,新数组长度) //拷贝数组 public st…...

Java - 基数排序算法介绍、应用场景和示例代码

概述 基数排序&#xff08;Radix Sort&#xff09;是一种非比较型整数排序算法&#xff0c;适用于整数或固定长度的字符串排序。它的基本思想是将待排序的元素分为多个关键字进行排序&#xff0c;通常从最低位&#xff08;最低有效位&#xff0c;Least Significant Digit, LSD…...

Django 后端架构开发:文件云存储,从本地存储到腾讯COS桶集成

⭐ Django 后端架构开发&#xff1a;文件云存储&#xff0c;从本地存储到腾讯COS桶集成 目录 ☁️ 文件云存储 - 项目使用云存储&#x1f4bb; 文件云存储 - 项目中使用本地存储&#x1f4dd; 文件云存储 - 概述和创建项目&#x1f310; 腾讯COS桶 - 概述&#x1f4da; 腾讯CO…...

【系统分析师】-综合知识-计算机网络与信息安全

1、要对消息明文进行加密传送&#xff0c;当前通常使用的加密算法是 报文认证算法&#xff1a;数字摘要 RSA 非对称加密&#xff0c;一般不用于明文 MD5 数字摘要 SHA-1 数字摘要&#xff0c;160位的消息摘要 HMAC 以一个密钥和一个消息为输入&#xff0c;生成一个消息摘要作…...

C++ | Leetcode C++题解之第363题矩形区域不超过K的最大数值和

题目&#xff1a; 题解&#xff1a; class Solution { public:int maxSumSubmatrix(vector<vector<int>> &matrix, int k) {int ans INT_MIN;int m matrix.size(), n matrix[0].size();for (int i 0; i < m; i) { // 枚举上边界vector<int> sum(…...

python动画:场景的线性变换展示

一&#xff0c;主函数 LinearTransformationScene 是 Manim 中用于展示线性变换的场景类。它通过在一幅背景和前景平面上展示向量和变换&#xff0c;帮助理解线性代数中的概念。 LinearTransformationScene(include_background_planeTrue, include_foreground_planeTrue, ba…...

HBase体系架构与环境搭建

这里写目录标题 一、常见的NoSQL数据库二、HBase的体系架构和表结构三、搭建HBasa环境1.本地模式2.伪分布模式全分布模式HA模式 一、常见的NoSQL数据库 NoSQL数据库的说明与定义 NoSQL是一种不同于关系数据库的数据库管理系统设计方式&#xff0c;是对非关系型数据库的统称。它…...

海思SD3403/SS928V100开发(16)Tsensor驱动开发

1. 前言 由于需要检测SD3403芯片内部实时温度,需要开发Tsensor传感器驱动和应用 查看手册发现SD3403内部有三个Tsensor传感器 可以参考之前我写的35系列平台Tsensor驱动开发记录 海思35系列平台Tsensor驱动开发(1)驱动编写_t sensor-CSDN博客 海思35系列平台Tsensor驱动…...

JVM类加载机制—JVM类加载过程

一、概述 代码编译后&#xff0c;就会生成JVM&#xff08;Java虚拟机&#xff09;能够识别的二进制字节流文件&#xff08;*.class&#xff09;。而JVM把Class文件中的类描述数据从文件加载到内存&#xff0c;并对数据进行校验、转换解析、初始化&#xff0c;使这些数据最终成…...

可变参数模板与包装器

抱歉&#xff1a;铁汁们&#xff0c;最近在做兼职&#xff0c;积累社会经验&#xff0c;多有拖欠&#xff0c;请多多包涵&#xff08;抱拳&#xff09; 引子&#xff1a;接上回我们讲了C11的几种新增&#xff0c;今天就来接着讲C11中比较有用的二个东西可变参数模板与包装器。…...

工业控制常用“对象“数据类型汇总(数据结构篇)

合理巧妙的数据结构会大大简化项目的编程工作量,所以任何项目前期第一步应该是设计巧妙的数据结构、封装对象属性。这样会使我们的编程快捷和高效。这篇博客作为数据类型汇总,会不间断更新。 1、普通电机轴对象 2、普通电机轴对象(详细结构变量) TYPE "udtMotorAxis&q…...

优雅处理枚举前端丢失大Long精度问题

1. 枚举-json处理&#xff08;前端 <> 后端 <> 数据库&#xff09; 前端传递 枚举code 后端响应 枚举code 表里存储 枚举code 内存处理 枚举对象 Getter AllArgsConstructor JsonFormat(shape JsonFormat.Shape.OBJECT) public enum SexEnum {MALE(0, "男&…...

【c/c++】 学习ector 容器笔记

c/c 学习ector 容器笔记 int 型的 vector 容器应该使用什么类型的索引&#xff1f; 对于 int 型的 vector 容器&#xff0c;应该使用 size_t 类型的索引。size_t 是一个无符号整数类型&#xff0c;它在标准库中广泛用于表示大小和索引。它足够大&#xff0c;可以表示任何标准…...

DN专业3D图形制作软件win/mac软件安装下载(附下载链接)

目录 一、软件概述 1.1 Adobe DN简介 1.2 Windows/Mac系统要求 Windows系统&#xff1a; Mac系统&#xff1a; 二、安装步骤 2.1 下载与解压 2.2 安装程序 2.3 启动软件 三、使用教程 3.1 界面介绍 3.2 创建和编辑3D内容 3.3 合成与渲染 四、高级技巧与注意事项 …...

VSCode搭建Hzero(SpringCloud架构)后端开发调试环境

正常情况下我们使用IDEA开发Hzero&#xff0c;但是有的公司是不允许破解或者使用IDEA的&#xff0c;此时可以使用eclipse来替代也是可以的&#xff0c;最近尝试使用VSCode来开发调试发现了一些问题其中最大的问题是Vscdoe在绝大多数情况下是不能直接运行Hzero&#xff0c;使用插…...

【C++】OJ习题(初阶)

&#x1f680;个人主页&#xff1a;奋斗的小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 &#x1f4a5;1、字符串&#x1f4a5;1.1 字符串相加&#x1f4a5;1.2 验证回文字符串&#x1f4a5;1.3 反转…...

6.4K+ Star!一个强大的本地知识库问答系统,支持多格式文件和跨语言检索,为企业提供高效、安全的数据洞察……

https://github.com/netease-youdao/QAnything 【阅读原文】跳转Github项目 转自AIGC创想者 项目简介 QAnything 是一个基于本地知识库的问答系统&#xff0c;它能够理解和回答基于任何类型文件的问题。 QAnything支持的文件格式非常广泛&#xff0c;包括PDF、Word、PPT、XL…...

mvn编译的时候出现Perhaps you are running on a JRE rather than a JDK 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 mvn编译的时候出现如下问题: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile (default-compile) on project yudao...

React原理之Fiber详解

前置文章&#xff1a; React原理之 React 整体架构解读React原理之整体渲染流程 -----读懂这一篇需要对 React 整体架构和渲染流程有大致的概念 &#x1f60a;----- 在React原理之 React 整体架构解读中&#xff0c;简单介绍了 Fiber 架构&#xff0c;也了解了 Fiber 节点的…...

远离“优越感”陷阱,拥抱美好人生

在人生的漫长旅程中,我们不断地与他人相遇、相知、相交,在各种关系中寻找温暖、支持与成长。然而,并非所有的关系都如我们所愿,有些关系甚至可能成为我们前进道路上的阻碍。正如我们所知,唯利是图者不可交,但有一种关系比索要金钱更值得警惕,那就是找你索取满足感的关系…...

Redis的线程模型

Redis作为一种基于内存的高性能键值对数据库&#xff0c;其线程模型和IO模型是实现高性能的关键因素。以下将详细探讨Redis的线程与IO模型&#xff0c;内容不少于2000字。 一、Redis的线程模型 Redis的线程模型是理解其高性能的重要基础。在Redis的发展过程中&#xff0c;其线…...

ubuntu24.04安装nginx1.24

ubuntu安装nginx 更新包索引 sudo apt update安装nginx sudo apt install nginx确认安装成功并检查Nginx版本 nginx -v启动Nginx服务 sudo systemctl start nginx设置Nginx开机自启 sudo systemctl enable nginx在浏览器中访问 http://<your_server_IP> 来确认Nginx…...

一款好看的WordPress REST API 主题

介绍&#xff1a; 主题特色&#xff1a; 使用Nuxtjs WordPress Rest Api 实现前后端分离&#xff0c;可完成多端部署&#xff1b; 主题支持自动切换黑夜模式。 使用说明&#xff1a; service 目录为wordpress主题文件&#xff0c;需要拷贝到wordpress主题目录下&#xff0…...

《5G 与区块链融合:智能城市服务质量的飞跃》

在科技飞速发展的时代&#xff0c;5G 技术的普及正以前所未有的速度改变着我们的生活&#xff0c;而区块链技术的兴起也为各领域带来了创新的解决方案。当这两种前沿技术相互结合&#xff0c;将为智能城市的发展注入强大动力&#xff0c;显著提升服务质量&#xff0c;开创更加便…...

前后端分离开发:用 Apifox 高效管理 API

目录 1.前后台分离开发介绍 2.API 2.1 APIfox介绍 2.2 接口文档管理 1.前后台分离开发介绍 前端开发有2种方式&#xff1a;「前后台混合开发」和「前后台分离开发」。 前后台混合开发&#xff0c;顾名思义就是前台后台代码混在一起开发&#xff0c;如下图所示&#xff1a…...

Go Channel 详解

概述 在 Go 语言中&#xff0c;channel 是一种用于在 goroutine 之间传递数据的机制。它提供了同步和通信的能力&#xff0c;使得并发编程变得更加简单和安全。Channel 在 Go 语言中的设计是类型安全的&#xff0c;并且支持发送和接收两种操作。 基本概念 创建通道 创建一个…...

使用FModel提取游戏资产

使用FModel提取游戏模型 前言FModel简介FModel安装FModel使用初次使用资产预览资产导出 附录dumperDumper-7生成usmap文件向游戏中注入dll 前言 这篇文章仅记录我作为初学者使用FModel工具提取某款游戏模型的过程。 FModel简介 FModel是一个开源软件&#xff0c;可以用于查看…...

Qt C++ 屏幕录制 保存mp4

在麒麟系统&#xff08;基于 Linux&#xff09;上优化 Qt C 的屏幕录制&#xff0c;主要针对捕获效率和编码速度。可以参考以下优化策略&#xff1a; 1. 使用更高效的屏幕捕获 API 麒麟系统作为 Linux 系统的一种&#xff0c;可以考虑直接使用 X11、Wayland、或 DRM/KMS API …...

建立一个网站的流程/中国关键词官网

本章重点&#xff1a;学习MySQL DISTINCT 对select语句子集进行去重。MySQL DISTINCT在查询过程中&#xff0c;需要对结果集进行去重&#xff0c;采用 DISTINCT子句与select 配合。语法如下&#xff1a;SELECT DISTINCTcolumnsFROMtable_nameWHEREwhere_conditions;对于NULL&am…...

java做网站模版多站管理/有人看片吗免费观看视频

转载于:https://www.cnblogs.com/upzone/archive/2006/05/05/392235.html...

wordpress摘要添加省略号/宁波seo排名费用

Java NIO Path基本概念Path的创建创建绝对路径Path创建相对路径PathPath类的方法normalize基本概念 Path接口在java.nio.file包下在Java中 ,Path表示文件系统的路径,可以指向文件或者文件夹,有绝对路径和相对路径之分java.nio.file.Path接口和操作系统的path环境变量没有任何关…...

外贸网站建设模板下载/怎样优化网站排名

要记住这个表示重要的事情是 left 和 right 的属性将成为对 BinaryTree 类的其他实例的引用。 例如&#xff0c;当我们在树中插入一个新的左子节点时&#xff0c;我们创建另一个 BinaryTree 实例&#xff0c;并在根节点中修改self.leftChild 来引用新树节点。 我们必须考虑两种…...

wordpress新淘客/建立自己的网站

需求 在使用Docker的过程中&#xff0c;有时候我们会有将Docker容器配置到和主机同一网段的需求。要实现这个需求&#xff0c;我们只要将Docker容器和主机的网卡桥接起来&#xff0c;再给Docker容器配上IP就可以了。 下面我们就使用pipework工具来实现这一需求。 安装pipework …...

网站介绍模板/google图片搜索引擎入口

java eclipse如何显示行数 Eclipsejava编程语言专业回答liuyang0542015-05-18 18:35打开eclipse &#xff0c; 随便打开一个其中的代码 &#xff0c; 然后在窗口的左侧右键鼠标 选中show line numbers 就能显示行数了。 下图有说明 eclipse中查找和替换直接按快捷键 ctrl F …...