Linux——网络(1)

news2024/11/28 20:37:34

一、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 

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

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

相关文章

攻击手法罕见!ESET披露最新网络钓鱼活动,专门针对Android、iPhone用户

ESET 研究人员发现了一种罕见的网络钓鱼活动&#xff0c;专门针对 Android 和 iPhone 用户。他们分析了一个在野外观察到的案例&#xff0c;该案例主要是针对一家著名的捷克银行的客户。 值得注意的是这种攻击主要是从第三方网站安装钓鱼应用程序&#xff0c;而无需用户主动安…

东方博宜OJ 训练计划:前缀和、差分 习题集

前缀和、差分 听到这个名字&#xff0c;大家一定感觉不陌生吧&#xff0c;毕竟学过动态规划的人大部分 都知道&#xff0c;那我就简单介绍一下&#xff0c;并奉上习题供大家参考&#xff01; 题目描述我就不放了&#xff0c;根据题号参见 东方博宜OJ 东方博宜OJ 网址&#xf…

【2024国赛速成系列】建模手三天必成计划

内容来自https://www.bilibili.com/video/BV14M4m1y77t 目录 一、第一天 1、常见模型分类 2、两大学习神器 &#xff08;1&#xff09;SPSSPRO &#xff08;2&#xff09;ChatGPT 二、第二天 三、第三天 一、第一天 建模手在最开始需要了解模型分类及国赛常见模型的用法…

专利有哪几种类型?

专利有哪几种类型&#xff1f;

高并发登录模块

1. 配置⼀主⼆从mysql57 1. mycat对mysql8不完全⽀持 2. mysql8主从问题不⼤ get_pub_key1 1. gtids事务复制 2. 删除/etc/my.cnf 3. 同步data⽂件需要先停⽤mysql服务&#xff0c;删除data⽬录中的 auto.cnf 4. gtid模式以及经典模式都需要锁表 flush tables with read …

击破传统跨境电商客服系统痛点:中关村科金如何帮助品牌实现跨境电商业务开拓?

有家总部位于中国、销售市场主要集中在北美的知名眼镜品牌&#xff0c;主要从事时尚眼镜的设计、生产和销售&#xff0c;近年跨境电商业务规模不断扩展&#xff0c;现有的客服体系却“落伍”了&#xff0c;难以适应当前阶段公司的发展要求。 因此希望与中关村科金合作&#xf…

【Harmony OS 4.0】生命周期

1. 自定义组件生命周期 自定义组件&#xff1a;Component 装饰的UI单元&#xff0c;可以组合多个系统组件实现UI的复用。 组件生命周期&#xff0c;即一般用Component装饰的自定义组件的生命周期&#xff0c;提供以下生命周期接口&#xff1a; 2.1 aboutToAppear&#xff1a;组…

8个我平时每天都会看的网站,涵盖办公、娱乐、学习等

分享8个我平时每天都会看的网站&#xff0c;涵盖办公、娱乐、学习等多种类别&#xff0c;试过就知道有多好用&#xff01; 1、MyFreeMP3 tools.liumingye.cn/music/#/ 一个可以免费听歌的平台&#xff0c;不用充会员&#xff0c;里面收录了大多数的国内外知名流行歌手、乐队的…

【C++初阶】一篇手撕vector类

vector类 一&#xff0c;vector的介绍二&#xff0c;vector的使用2.1 vector的定义2.2 vector iterator2.3 vector空间增长问题2.4 vector增删查改2.5 vector<char> 可以替代 string 嘛&#xff1f; 一&#xff0c;vector的介绍 vector 是表示可变大小数组序列容器。就像…

[数据集][目标检测]手钳检测数据集VOC+YOLO格式141张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;141 标注数量(xml文件个数)&#xff1a;141 标注数量(txt文件个数)&#xff1a;141 标注类别…

加载dvb文件出错解决方案

1、在c: \Windows\System32文件夹下&#xff0c;放入fm2.0.dll&#xff08;此文件已资源绑定在本文章&#xff09;文件 2、若还是不行&#xff0c;可尝试&#xff1a; 3、或重装CAD vba vba下载官网地址&#xff1a;下载适用于 Inventor 的 Microsoft VBA 模块 https://www…

Spring AI集成Ollama+llava:7b:实战探索大模型的多模态应用

前面的文章介绍的基本上都是单一数据格式的输入处理&#xff0c;比如输入文本输出文本的Chat模型、输入文本输出图片的图片模型、输入文本输出音频的模型等。本篇文章将介绍如何实现同时处理多种类型的数据格式&#xff1f; 什么是多模态 多模态是指模型同时理解和处理来自各种…

初识指针の学习笔记

目录 1>>前言 2>>内存和地址 3>>指针变量和地址 3.1取地址和解引用 3.2>>指针类型是什么&#xff1f; 3.3>>指针变量占用空间 4>>指针变量类型的意义 4.1>>指针的解引用 4.2>>指针-整数 5>>关于指针的运算 5…

「OC」暑假第三周——天气预报的仿写

「OC」暑假第三周——天气预报的仿写 文章目录 「OC」暑假第三周——天气预报的仿写写在前面预览UItableView嵌套UICollectionView毛玻璃效果SVGKit库的使用简单的动画实现主页之中详情页的编写总结 写在前面 天气预报作为暑假最后的一个项目&#xff0c;算得上我觉得有点用的…

西门子PLC跟汇川H5U系列PLC标签方式以太网通讯的快速实现方案

PLC通讯智能网关IGT-DSER模块支持汇川、西门子、三菱、欧姆龙、罗克韦尔AB、GE等各种品牌的PLC之间通讯&#xff0c;同时也支持PLC与Modbus协议的变频器、智能仪表等设备通讯。网关有多个网口、串口&#xff0c;也可选择WIFI无线通讯。PLC内无需编程开发&#xff0c;在智能网关…

金九银十秋招大模型岗位攻略来了,已收offer,非常详细收藏我这一篇就够了

秋季招聘季节是求职者寻找新机会的重要时期&#xff0c;特别是对于想要进入大模型领域的专业人士来说。以下是一份大模型学习攻略和应聘攻略&#xff0c;帮助你为秋季招聘做好准备&#xff1a; 大模型学习攻略 理解大模型基础 学习AI基础&#xff1a;了解机器学习、深度学习的…

[数据集][目标检测]扳手检测数据集VOC+YOLO格式1042张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1042 标注数量(xml文件个数)&#xff1a;1042 标注数量(txt文件个数)&#xff1a;1042 标注…

论文阅读1 Scaling Synthetic Data Creation with 1,000,000,000 Personas

Scaling Synthetic Data Creation with 1,000,000,000 Personas 链接&#xff1a;https://github.com/tencent-ailab/persona-hub/ 文章目录 Scaling Synthetic Data Creation with 1,000,000,000 Personas1. 摘要2. 背景2.1 什么是数据合成2.2 为什么需要数据合成2.3 10亿种人…

【Datawhale AI夏令营第四期】 浪潮源大模型应用开发方向笔记 Task04 RAG模型 人话八股文Bakwaan_Buddy项目创空间部署

【Datawhale AI夏令营第四期】 浪潮源大模型应用开发方向笔记 Task04 RAG模型 人话八股文Bakwaan_Buddy项目创空间部署 什么是RAG&#xff1a; 我能把这个过程理解为Kimi.ai每次都能列出的一大堆网页参考资料吗&#xff1f;Kimi学了这些资料以后&#xff0c;根据这里面的信息综…

支持2.4G频秒变符合GB42590的标准的飞行器【无人机GB42590发射端】

使用方法: 放在飞机 上&#xff0c;按键那一面需要朝上对着天空(因为GPS陶瓷天线在按键面)&#xff0c;支持基本ID&#xff0c;向量和系统包&#xff0c;电池容量240mAH充电1小时&#xff0c;使用时间大概2小时。 1.长按3秒开关机 2.开机红灯慢闪&#xff0c;只发射基本ID数据…