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

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...