当前位置: 首页 > 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 配置的问题。以下是一些步…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...