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

嵌入式学习第二十三天--网络及TCP


进程通信的方式:


同一主机
传统 
system V
不同主机 
网络 --- 解决不同主机间 的进程间通信 

网络 (通信)

  //1.物理层面 --- 联通(通路)
     //卫星 
     2G
     3G
     4G
     5G 
     星链 (千帆)


  //2.逻辑层面 --- 通路(软件)
      MAC os
      LINUX 
      windows 

协议
    一套规则 
    网络协议 --- 网络通信的一套规则 
    通信协议 --- EDID 

ARPA (阿帕网)
   早期的ARPA网络使用(Network Control Protocol)NCP协议,不支持不同类型的操作系统、不同类型的计算机之间的通信,不支持纠错功能。
      不同类型 计算机 
      不同 操作系统 
      无法纠错
 


TCP协议(Transmission Control Protocol)

控制传输过程 
tcp/ip 

ip地址: 作用  ---唯一标识网络上的一台主机
                 主机 ---网络中一台设备 
   
   ip地址 ---本质上是一个32位的数值 
             存储 -- 大端方式存储 
   ip地址组成 
   ip = 网络号 + 主机号 
        网络号 用来标识 --- 是在哪一个网络 
        主机号 用来标识 --- 在该网络中的哪一台计算机 

www.baidu.com (网址)
    |  
    | ---DNS解析 (Domain Name Server)
    |
    | ---DNS解析---ip地址  183.2.172.17
    | ---[路由器]
       

 子网掩码  ---- 用来区分 和 识别 网络号 和 主机号 
  
  连接特定的 DNS 后缀 . . . . . . . :
   IPv4 地址 . . . . . . . . . . . . : 192.168.0.41
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.0.1

   192    .   168     .     0     .   1      
1111 1111 . 1111 1111 . 1111 1111 . 0000 0000  &
--------------------------------------------------
   192         168          0           0        //网络号 


协议:
   OSI标准  (open system )
       open system interconnect


1、OSI 模型

 ===》开放系统互联模型  ==》分为7层:

 理想模型  ==》尚未实现
        应用层   
        表示层  加密解密  gzip   
        会话层  网络断开,连接状态,keep-close keep-alive 

        传输层tcp  udp  协议  文件    视频,音频  ipx 
                "12345"
        网路层ip   NAT
               网间层 网际层 

        链路层  交换机  数据的格式化  帧 校验
        物理层         100Mb/8  10Gbits   100MB 同轴电缆
         发送 比特流  //
               
      tcp/ip协议栈
        应用层   ====》应用程序
        传输层   ====》端口号tcp udp
        网络层   ====》IP 地址
        物理层   ====》网卡 驱动  1GB



网络编程 


编程 
 
linux操作系统 
[用户空间]          应用层                      //程序员实现
------------------------------------------------------
[内核空间]          传输层   [网络协议栈]       //内核已经实现好的 属于网络功能
                    网络层
                    数据链路层
                    物理层 
                    
                    
程序发送数据 
  
系统调用 --- 通过系统调用来使用操作系统提供的网络功能 

函数接口 --- socket 

socket:
  1. 操作系统提供的函数接口  //通过这个接口可以使用网络功能
  2. 套接字
     在使用的思路上,套接字 被抽象成了文件 
     特殊文件 --- 专门用来进行网络通信 
     文件 描述符
     read
     write 
      


    
网络编程模型:


  1.c/s 模型 
  
   client ----- server
   QQ   
   
  2.b/s 模型 
    Brower / server  //浏览器 - 服务器 
  
  3.p2p 模型 
    peer 2 peer   //点 对 点 

   迅雷下载 
   云盘下载
   


c/s 模型 
  基于 两种传输协议实现 
  tcp 协议
  传输层的协议 --- 控制传输过程 
   tcp 
        特点:
        1.面向链接  
        2.可靠传输 
        3.字节流 
        
  应用:
      登录网站 ---tcp 
      qq登录 
  udp 协议 
    侧重  传输效率 
     udp 
       特点:
        1.无连接 
        2.不可靠
        3.数据报 
  应用:
      视频传输 
      
   
   
tcp的连接:
    三次握手 
    client --------------  server
           1--连接请求-->
           2<--回应------
           3---确认----->
    client //作为主动的角色 
    server //被动角色 

可靠传输:
       无差错
       无丢失 --- 每个字节 都编号 
       无失序 --- 
       无重复 --- 

tcp的编程:
流程
  1.建立连接 
  2.数据通信 
  
  //通信模型 cs   --- 打电话 
  
  //客户端 
  1.socket         //买了个手机 
  2.bind (可选)    // sim 卡 
  3.connect        // 拨打电话
  
  
  //服务器端 
  1.socket         //买了个手机 
  2.bind           // sim 卡 
  3.listen         // 监听 --待机
  4.accept         // 接听 

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

int socket(int domain, int type, int protocol);


功能:程序向内核提出创建一个基于内存的套接字描述符

参数:domain  地址族,PF_INET == AF_INET ==>互联网程序
                      PF_UNIX == AF_UNIX ==>单机程序
      type    套接字类型:
                SOCK_STREAM  流式套接字 ===》TCP   
              SOCK_DGRAM   用户数据报套接字===>UDP
              SOCK_RAW     原始套接字  ===》IP
      protocol 协议 ==》0 表示自动适应应用层协议。

返回值:成功 返回申请的套接字id
        失败  -1;
  
  


connect 

2.int connect(int sockfd, const struct sockaddr *addr,
                   socklen_t addrlen);
   功能:该函数固定有客户端使用,表示从当前主机向目标
            主机发起链接请求。
   参数:sockfd 本地socket创建的套接子id
            addr 远程目标主机的地址信息。
         addrlen: 参数2的长度。
   返回值:成功 0
              失败 -1;


网络通信过程 

                    QQ_A                        QQ_B
[用户空间]           |                            |
-------------------socket-----------------------socket--------------
[内核空间]      [传输层tcp]                   [传输层tcp]                              
                     | 
                  [网络层]                     [网络层]
                     |
                [数据链路层]                 [数据链路层]
                     | 
                 [物理层]  ----------------->  [物理层]

                 
网络中找到主机 ---- ip
找到主机中进程 ---- 端口号 
  端口号 
   作用: 用来标识一个进程 
  组成:
       16位的数据 
  
  0~65535 
  // 
  1~1023 // 知名端口号 
         80   http
         23  
         21 
  1024~50000 //系统注册的 
  >=50000     //动态的 
  
ip+端口号 ==> 网络中进程的唯一地址 

struct sockaddr  //地址的类型 

struct sockaddr_in {
           sa_family_t    sin_family; /* address family: AF_INET */
           in_port_t      sin_port;   /* port in network byte order */
           struct in_addr sin_addr;   /* internet address */
       };

       /* Internet address. */
       struct in_addr {
           uint32_t       s_addr;     /* address in network byte order */
       };
network byte order //网络字节序 ---大端 


   //字节序转换 
 #include <arpa/inet.h>

       uint32_t htonl(uint32_t hostlong);  //主机到网络 

       uint16_t htons(uint16_t hostshort);

       uint32_t ntohl(uint32_t netlong);  //网络到主机 

       uint16_t ntohs(uint16_t netshort);

//ip地址转换        
 in_addr_t inet_addr(const char *cp);
 "192.168.0.1"

 
bind 

2、int bind(int sockfd, struct sockaddr *my_addr, 
             socklen_t addrlen);
功能:如果该函数在服务器端调用,则表示将参数1相关
      的文件描述符文件与参数2 指定的接口地址关联,
      用于从该接口接受数据。

      如果该函数在客户端调用,则表示要将数据从
      参数1所在的描述符中取出并从参数2所在的接口
      设备上发送出去。

      注意:如果是客户端,则该函数可以省略,由默认
            接口发送数据。
返回值:
    成功 0 
    失败 -1
    

listen


3、  int listen(int sockfd, int backlog);
    功能:在参数1所在的套接字id上监听等待链接。
    参数:sockfd  套接字id
          backlog 允许链接的个数。
    返回值:成功  0
            失败  -1;


    accept


4、int accept(int sockfd, struct sockaddr *addr, 
                socklen_t *addrlen);
   功能:从已经监听到的队列中取出有效的客户端链接并
            接入到当前程序。
   参数:sockfd 套接字id
            addr  如果该值为NULL ,表示不论客户端是谁都接入。
                如果要获取客户端信息,则事先定义变量
               并传入变量地址,函数执行完毕将会将客户端
               信息存储到该变量中。
         addrlen: 参数2的长度,如果参数2为NULL,则该值
                     也为NULL;
                 如果参数不是NULL,&len;
                  一定要写成len = sizeof(struct sockaddr);
   返回值:成功 返回一个用于通信的新套接字id;
                从该代码之后所有通信都基于该id

           失败  -1;    
   
  
    

相关文章:

嵌入式学习第二十三天--网络及TCP

进程通信的方式: 同一主机 传统 system V 不同主机 网络 --- 解决不同主机间 的进程间通信 网络 (通信) //1.物理层面 --- 联通(通路) //卫星 2G 3G 4G 5G 星链 (千帆) //2.逻辑层面 --- 通路(软件) MAC os LINUX …...

Elasticsearch:解锁深度匹配,运用Elasticsearch DSL构建闪电般的高效模糊搜索体验

目录 Elasticsearch查询分类 叶子查询 全文检索查询 match查询 multi_match查询 精确查询 term查询 range查询 复杂查询 bool查询简单应用 bool查询实现排序和分页 bool查询实现高亮 场景分析 问题思考 解决方案 search_after方案(推荐) point in time方案 方案…...

SQLAlchemy系列教程:基本数据类型及自定义类型

在SQLAlchemy、Python SQL工具包和ORM中定义模型时&#xff0c;理解基本数据类型至关重要。本教程提供了在SQLAlchemy模型中有效使用内置基本类型的指南。 SQLAlchemy中的基本类型 SQLAlchemy支持一组与SQL数据库类型一致的基本数据类型。SQLAlchemy中的每种类型都为各种SQL类…...

【Wireshark 02】抓包过滤方法

一、官方教程 Wireshark 官网文档 &#xff1a; Wireshark User’s Guide 二、显示过滤器 2.1、 “数据包列表”窗格的弹出过滤菜单 例如&#xff0c;源ip地址作为过滤选项&#xff0c;右击源ip->prepare as filter-> 选中 点击选中完&#xff0c;显示过滤器&#…...

ES怎么查询大于10000条数据

在Elasticsearch&#xff08;ES&#xff09;中&#xff0c;默认情况下&#xff0c;查询结果的最大返回条数是10,000条。如果你需要查询超过10,000条数据&#xff0c;可以通过以下几种方式来实现&#xff1a; 1. 使用 scroll API scroll API 适用于需要处理大量数据的场景&…...

《几何原本》命题I.8

《几何原本》命题I.8 如果两个三角形有三边对应相等&#xff0c;那么这两个三角形的所有对应角亦相等。 若 A B D E , A C D F , B C E F ABDE,ACDF,BCEF ABDE,ACDF,BCEF 将 △ A B C \triangle ABC △ABC 平移至 △ D E F \triangle DEF △DEF&#xff0c;使 B C BC …...

课程2. 机器学习方法论

课程2. 机器学习方法论 训练算法并评估其质量将样本分成训练和测试。分层 交叉验证方法sklearn 接口算法模型训练模型的应用质量评估 数据预处理标准缩放Violinplot 数据集使用模型Pipeline 在上一讲中&#xff0c;我们讨论了机器学习专家面临的挑战。无论解决的问题类型和解决…...

ioday2----->标准io函数

思维导图&#xff1a; 练习&#xff1a; 1将当前的时间写入到time. txt的文件中&#xff0c;如果ctrlc退出之后&#xff0c;在再次执行支持断点续写 1.2022-04-26 19:10:20 2.2022-04-26 19:10:21 3.2022-04-26 19:10:22 //按下ctrlc停止&#xff0c;再次执行程序 4.2022…...

SQL注入练习场:PHPStudy+SQLI-LABS靶场搭建教程(零基础友好版)

注意&#xff1a;文中涉及演示均为模拟测试&#xff0c;切勿用于真实环境&#xff0c;任何未授权测试都是违法行为&#xff01; 一、环境准备 下载PHPStudy 官网下载地址&#xff1a;https://www.xp.cn/php-study&#xff08;选择Windows版&#xff09; 安装时建议选择自定…...

【笔记ing】python

1 Python基础概念及环境搭建 1.1 python简介及发展史 之父Guido van Rossum。ABC语言的替代品。Python提供了高效的数据结构&#xff0c;还能简单有效地面向对象编程。Python语法和动态类型&#xff0c;以及解释性语言的本质&#xff0c;使之成为多数平台上写脚本和快速开发应…...

DFT之SSN架构

SSN&#xff08;Streaming Scan Network&#xff09;架构在DFT&#xff08;设计可测试性&#xff09;中的应用是一种先进的设计测试解决方案&#xff0c;旨在应对现代大规模片上系统&#xff08;SoC&#xff09;设计中的复杂测试挑战。以下是对SSN架构在DFT中应用的详细分析&am…...

四十二:VSCODE打开新文件覆盖上一个文件窗口问题

VSCODE打开新文件覆盖上一个文件窗口问题_vscode enablepreview-CSDN博客...

JMeter 引入 JAR 包的几种方法

JMeter 支持加载外部 JAR 文件&#xff0c;用于&#xff1a; 扩展 JMeter 功能使用 Java 代码&#xff08;BeanShell / JSR223&#xff09;连接数据库 / 解析 Excel / 读取 CSV &#x1f4cc; 1. JMeter 引入 JAR 包的方式 ✅ 方式 1&#xff1a;将 JAR 放入 lib/ 或 lib/ext…...

记一次ScopeSentry搭建

介绍 Scope Sentry是一款具有资产测绘、子域名枚举、信息泄露检测、漏洞扫描、目录扫描、子域名接管、爬虫、页面监控功能的工具&#xff0c;通过构建多个节点&#xff0c;自由选择节点运行扫描任务。当出现新漏洞时可以快速排查关注资产是否存在相关组件。 目前功能 插件系…...

C语言_数据结构总结1:静态分配方式的顺序表

纯C语言代码&#xff0c;不涉及C 1. 初始化 #define MaxSize 50 typedef int ElemType; typedef struct SQList { ElemType data[MaxSize]; //定义一个数组存放顺序表元素 int length; //顺序表当前的长度&#xff08;元素个数…...

C语言--简单排序算法(冒泡、选择、插入)

实现三种简单的排序算法 文章目录 冒泡排序改进改进2 选择排序插入排序执行结果 冒泡排序 每次外层循环&#xff0c;排出一个最大值 void bubbleSort(int arr[], int len) {for (int i 0; i < len - 1; i) {for (int j 0; j < len - i - 1; j) {if (arr[j] > arr[…...

【文献阅读】The Efficiency Spectrum of Large Language Models: An Algorithmic Survey

这篇文章发表于2024年4月 摘要 大语言模型&#xff08;LLMs&#xff09;的快速发展推动了多个领域的变革&#xff0c;重塑了通用人工智能的格局。然而&#xff0c;这些模型不断增长的计算和内存需求带来了巨大挑战&#xff0c;阻碍了学术研究和实际应用。为解决这些问题&…...

MySQL-高级查询

查询处理 排序&#xff08;默认不是按主键排序的&#xff09; order by 字段1[&#xff0c;字段2] [asc|desc] 默认是升序排序也可以指定 select 列表中列的序号进行排序如果是多个字段&#xff0c;那么在上一个字段排序完的基础上排序下一个 限制数量 limit 行数&#xff0…...

Netty笔记10:LengthFieldBasedFrameDecoder很简单,请看

Netty笔记1:线程模型 Netty笔记2:零拷贝 Netty笔记3:NIO编程 Netty笔记4:Epoll Netty笔记5:Netty开发实例 Netty笔记6:Netty组件 Netty笔记7:ChannelPromise通知处理 Netty笔记8:ByteBuf使用介绍 Netty笔记9:粘包半包 Netty笔记10:LengthFieldBasedFrameDec…...

linux 安装Mysql无法远程访问问题的排查

宝塔面板安装了mysql5.6后 只能本地访问 firewall 在使用宝塔面板&#xff08;BT Panel&#xff09;安装 MySQL 5.6 后&#xff0c;如果你发现 MySQL 只能本地访问&#xff0c;而不能从其他机器或服务访问&#xff0c;这通常是由于防火墙设置或 MySQL 配置的问题。以下是一些步…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...