嵌入式入门Day34

网络编程 Day1

  • 为什么要学习网络编程?
    • 网络发展历史
      • APRAnet阶段
      • TCP/IP两个协议阶段
      • 网络体系结构及OSI开放系统系统互联模型
        • 网络体系结构概念
        • OSI开放系统互联模型
  • TCP和UDP异同
  • 网络基础相关的概念
    • 字节序
    • IP地址的转换
    • IP地址
    • 子网掩码
    • 端口号

为什么要学习网络编程?

  1. 进程间通信方式
    内核提供三种:无名管道、有名管道、信号
    System V提供三种:消息队列、共享内存、信号灯集
  2. 以上通信方式,都是通过内核空间完成,在同一主机之间多个进程通信没有问题,但是,不同主机的内核空间是不同的,所以,无法做到跨主机之间多个进程之间的通信
  3. 引入第七种进程间通信:套接字通信,完成跨主机多进程之间通信方式

网络发展历史

发展阶段:

  1. APRAnet阶段—冷战产物
  2. TCP/IP协议阶段–只有TCP和IP两个协议
  3. osi开放系统互联模型
  4. TCP/IP协议族(重要)
  5. 量子通信(可能)。

APRAnet阶段

阿帕网,是Interne的最早雏形
不能互联不同类型的计算机和不同类型的操作系统
没有纠错功能。

TCP/IP两个协议阶段

在计算机网络中,要做到有条不紊的交换数据,需要遵循一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。为了进行网络中的数据交换而建立的规则、标准和约定称为网络协议
联网协议:定义如何在一个网络上传输信息的一组规则
TCP/IP协议分成了两个不同的协议:
用来检测网络传输中差错的传输控制协议TCP
专门负责对不同网络进行互联的互联网协议IP

网络体系结构及OSI开放系统系统互联模型

在这里插入图片描述
在这里插入图片描述

网络体系结构概念

每一层都有自己独立的功能,单每一层都不可获取
通常把功能相近的协议组织在一起放在一层,协议栈。所以每一层中其实有多个协议
分层的好处:

  1. 各层之间独立,每一层不需要知道下一层如何实现,而仅仅只需要知道该层通过层间的接口所提供的服务
  2. 稳定,灵活性好,当任何一层发生变化时,只需要层间接口关系保持不变,而这层以上或以下层不受影响
  3. 易于实现和维护(知道是什么功能,就到指定层去查找)
  4. 促进标准化工作:每一层的功能及其所提供的服务都有了精确的说明。
  5. 结构上不可分割开:各层都可以采用最合适的技术来实现
OSI开放系统互联模型

在这里插入图片描述

TCP/IP网络体系结构四层:
应用层
传输层
网络层
链路层(网络接口和物理层)

与七层模型对应的关系
在这里插入图片描述

数据帧
在这里插入图片描述

一帧数据的说明
大小为 64–1518(包含以太网的头部14字节、尾部4字节)
如果数据大于MTU(最大传输单元,linux默认是1500),需要分成多次进行传输
可以使用指令ifconfig查看MTU最大传输单元

TCP和UDP异同

共同点:同属于传输层的协议
TCP ----> 稳定

  1. 提供面向连接的,可靠的数据传输服务
  2. 传输过程中,数据无误、数据无丢失、数据无失序、数据无重复
    - TCP会给每个数据包编上编号,该编号称之为序列号
    - 每个序列号都需要应答包应答,如果没有应答,则会将上面的包重复发送直到正确为止
  3. 数据传输效率低,耗费资源多
  4. 数据收发是不同步的
    - 为了提高效率,TCP会将多个较小,并且发送间隔短的数据包,沾成一个包发送,该现象称为沾包现象
    - 该沾包算法称之为Nagle算法
  5. TCP的使用场景:对传输质量比较高的以及传输大量数据的通信,在需要可靠通信的传输场合,一般使用TCP协议
    例如:账户登录,大型文件下载的时候

UDP ----> 快速

  1. 面向无连接的,不保证数据可靠的,尽最大努力传输的协议
  2. 数据传输过程中,可能出现数据丢失、重复、失序现象
  3. 数据传输效率高,实时性高
  4. 限制每次传输的数据大小,多出部分直接忽略删除
  5. 收发是同步的,不会沾包
  6. 适用场景:发送小尺寸的,在接收到数据给出应答比较困难的情况下
    例如:广播、通讯软件的音视频

TCP 3次握手,4次挥手
在这里插入图片描述

网络基础相关的概念

字节序

  1. 不同类型的CPU主机中,在处理多字节整数序列时有两种存储方式,称为主机字节序
    大端存储(big_endian):地址低位存储数据高位
    小端存储(little_endiab):地址低位存储数据低位
  2. 由于多字节整数需要跨主机通信,对于不同的主机存在大小端存储的不同,会导致,即使网络传输中数据无误,也会展现出错误信息
    基于此,引入了网络字节序的概念,要求多字节整数,在网络中传输时,都转换为网络字节序,网络字节序是大端存储
    无论主机字节序是大端还是小端存储,发送到网络之前先转换为网络字节序。当接收端接收消息后,再将网络字节序转换为主机字节序即可。
  3. 系统提供了主机字节序和网络字节序相互转换的函数
    h:host主机
    to:转换
    n:net网络
    l:long整型
    s:short短整型

API

typedef int uint32_t
typedef short uint16_t
#include <arpa/inet.h>uint32_t htonl(uint32_t hostlong);4字节主机字节序转为4字节网络字节序       uint16_t htons(uint16_t hostshort);2字节主机字节序转为2字节网络字节序uint32_t ntohl(uint32_t netlong);4字节网路字节序转为4字节主机字节序uint16_t ntohs(uint16_t netshort);2字节的网络字节序转为2字节的主机字节序

IP地址的转换

IP地址转换位网络字节序或者网络字节序转换为IP地址

in_addr_t inet_addr(const char *cp);功能:将字符串类型的IP地址转为网络使用的ip号。char *inet_ntoa(struct in_addr in);功能:将网络使用的ip号转为字符串类型的IP地址。

IP地址

  1. ip地址是主机在网络中的标识,每个数据包必须携带目的ip地址和原ip地址,路由器就是依照此信息进行路由选择的
  2. 也是对网络标识的二级划分
  3. IP地址的种类(局域网和广域网的划分)
    • IPV4:4字节无符号整数表示(2^32)
    • LAN:局域网覆盖较小范围,传输速度快,延时低。
    • WAN:广域网覆盖范围大,乃至全球范围,速度慢,延时高。
    • IPV616字节无符号整数表示(2^128)
  4. IPV4地址的划分
    IP地址 = 网络号+主机号
    当前阶段IP地址分为5类
    在这里插入图片描述

子网掩码

  1. 由于对于一个网络下面的主机号还是很庞大,为了进一步划分网络,我们可以将主机号再次进行划分为两部分,分别是子网网段和主机号
  2. 此时就引入的子网掩码的概念
  3. 在引入子网掩码后,IP = 网络号 + 子网号 + 主机号
  4. 子网掩码:用于ip地址的三级划分,划分时,用户可以选择划分,也可以不划分,如果不划分,就使用默认的子网掩码
    • 定义格式:与IP地址一样长的32位整数,由一串连续的1和一串连续的0组成
    • 默认子网掩码:子网掩码就是某类网络的 网络号全是1,主机号全是0的值。
  5. 子网掩码的使用:ip地址 & 子网掩码 ==> 子网网段

端口号

eg:192.168.125.88:5885
5885附加在IP后面表示端口号。

  1. 端口号是能够实现网络端对端的通信

  2. 是主机中某个进程的标识,由于某个进程关闭后,再打开,pid会不断更改,所以,在启动一个进程时,可以指定端口号,标识该进程

  3. 端口号是一个2字节的无符号整数,取值范围[0,65535]

  4. 端口号的分类:

  • 0~1023端口我们编程时候不要使用,是那些”VIP“应用程序占了
  • TCP 21端口:FTP文件传输服务
  • TCP 23端口:TELNET终端仿真服务
  • TCP 25端口:SMTP简单邮件传输服务
  • TCP 110端口:POP3邮局协议版本3
  • TCP 80端口:HTTP超文本传输服务
  • TCP 443端口:HTTPS加密超文本传输服务
  • UDP 53端口:DNS域名解析服务
  • UDP 69端口:TFTP文件传输服务

TCP和UDP的端口号是相互独立的
可以使用的:1024~49151,就是我们平时编写服务器使用的端口号
临时端口号:49152~65535,这部分是客户端运行时候动态选择的

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码解析:安卓VHAL的AIDL参考实现

以下内容基于安卓14的VHAL代码。 总体架构 参考实现采用双层架构。上层是 DefaultVehicleHal&#xff0c;实现了 VHAL AIDL 接口&#xff0c;并提供适用于所有硬件设备的通用 VHAL 逻辑。下层是 FakeVehicleHardware&#xff0c;实现了 IVehicleHardware 接口。此类可模拟与实…

【视觉惯性SLAM:四、相机成像模型】

相机成像模型介绍 相机成像模型是计算机视觉和图像处理中的核心内容&#xff0c;它描述了真实三维世界如何通过相机映射到二维图像平面。相机成像模型通常包括针孔相机的基本成像原理、数学模型&#xff0c;以及在实际应用中如何处理相机的各种畸变现象。 一、针孔相机成像原…

【前端,TypeScript】TypeScript速成(二):逻辑控制与循环

TypeScript 当中的逻辑控制 if-else if-else 的使用和其它语言非常相似&#xff1a; let answer: yes|no|maybe|undefined undefinedlet httpStatus: 200 | 404 | 500 | 200 | 404 | 500 200function processHttpStatus(s: 200 | 404 | 500 | 200 | 404 | 500) {// 一律使…

JSON 系列之1:将 JSON 数据存储在 Oracle 数据库中

本文为Oracle数据库JSON学习系列的第一篇&#xff0c;讲述如何将JSON文档存储到数据库中&#xff0c;包括了版本为19c和23ai的情形。 19c中的JSON 先来看一下数据库版本为19c时的情形。 创建表colortab&#xff0c;其中color列的长度设为4000。若color的长度需要设为32767&a…

TOGAF之架构标准规范-业务架构

TOGAF标准规范中&#xff0c;业务架构阶段的主要工作是开发支持架构愿景的业务架构。 如上所示&#xff0c;业务架构&#xff08;Business Architecture&#xff09;在TOGAF标准规范中处于B阶段&#xff0c;该阶段的主要内容包括阶段目标、阶段输入、流程步骤、架构方法。 阶段…

科技创新 数智未来|清科·沙丘投研院走进竹云

12月20日&#xff0c;清科沙丘投研院带领企投家团队走进竹云交流分享&#xff0c;聚焦技术创新、企业数字化管理、行业前沿应用案例等热点议题&#xff0c;深入探讨数字技术如何点燃企业高质量发展的澎湃动力&#xff0c;共话企业数字化、智能化发展之道。 达晨财智股权管理部…

【免费分享】mysql笔记,涵盖查询、缓存、存储过程、索引,优化。

概括 本篇笔记涵盖基础查询、视图、存储过程、函数、索引、优化、分库分表。适合在学完mysql后进行时常观看。下面展示部分内容。如果需要可以在文章底部的链接进行下载查看。 简介 数据库 数据库&#xff1a;DataBase&#xff0c;简称 DB&#xff0c;存储和管理数据的仓库…

Docker 安装全攻略:从入门到上手

Docker 安装全攻略&#xff1a;从入门到上手 在当今的软件开发与部署领域&#xff0c;Docker 已经成为了一项不可或缺的关键技术。它能够将应用程序及其依赖项打包成轻量级、可移植的容器&#xff0c;极大地简化了开发、测试和部署的流程。本文将详细讲解在不同操作系统下 Doc…

mysql建立主从集群

mysql建立主从集群需要多个mysql服务器&#xff0c;主从数据库是通过log日志来进行同步的&#xff0c;所以需开启log-bin。本地安装多个mysql参考底部 主数据库配置 打开主数据库my.ini配置文件&#xff0c;给其配置server_id1 [mysqld] port3306 basedirD:/phpstudy_pro/1/…

curl+openssl 踩坑笔记

curl编译&#xff1a;点击跳转 踩坑一 * SSL certificate problem: unable to get local issuer certificate * closing connection #0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html …

【开源免费】基于SpringBoot+Vue.JS租房管理系统(JAVA毕业设计)

本文项目编号 T 102 &#xff0c;文末自助获取源码 \color{red}{T102&#xff0c;文末自助获取源码} T102&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

小程序配置文件 —— 13 全局配置 - window配置

全局配置 - window配置 这里讲解根目录 app.json 中的 window 字段&#xff0c;window 字段用于设置小程序的状态栏、导航条、标题、窗口背景色&#xff1b; 状态栏&#xff1a;顶部位置&#xff0c;有网络信号、时间信息、电池信息等&#xff1b;导航条&#xff1a;有一个当…

BLE core 内容整理解释

本文内容比较杂散&#xff0c;只是做记录使用&#xff0c;后续会整理的有条理些 link layer 基本介绍 **Link Layer Control&#xff08;链路层控制&#xff09;**是蓝牙低功耗&#xff08;BLE&#xff09;协议栈的核心部分&#xff0c;负责实现设备间可靠、安全、低功耗的数…

【目标跟踪+人流计数+人流热图(Web界面)】基于YOLOV11+Vue+SpringBoot+Flask+MySQL

前言 本系统是基于YOLOv11SpringBootVueFlaskMySQL的人流计数、人流热图系统&#xff08;包含YOLO全系列&#xff09; 系统可以上传视频选择yolo模型进行人流计数。还支持自主划定检测区域&#xff0c;行人轨迹追踪、查看计数结果等功能。 可支持人流计数、人流热图以及人流热…

vuex - 第一天

思维逻辑 解决问题 代码能力2 vue2的项目 北京前端鸿蒙6期 语雀 vuex 在组件中使用 插件支持v2和v3 宏任务 和 微任务 多问问自己为什么 new的四步

什么是网络安全(Cybersecurity)?

不同组织机构对网络安全&#xff08;Cybersecurity或Cyber Security&#xff09;的定义不尽相同。从目标上来说&#xff0c;网络安全主要用于保护网络、计算机、移动设备、应用程序及数据等资产免受网络攻击&#xff0c;避免造成数据泄露、业务中断等安全问题。 网络钓鱼、勒索…

Selenium+Java(21):Jenkins发送邮件报错Not sent to the following valid addresses解决方案

问题现象 小月妹妹近期在做RobotFrameWork自动化测试,并且使用Jenkins发送测试邮件的时候,发现报错Not sent to the following valid addresses,明明各个配置项看起来都没有问题,但是一到邮件发送环节,就是发送不出去,而且还不提示太多有用的信息,急的妹妹脸都红了,于…

虚拟机网络配置

【1】虚拟机提供的网络 桥接模式&#xff1a;可以联网&#xff0c;和主机不是同一个ip地址 NAT模式&#xff1a;可以联网&#xff0c;虚拟机和主机是同一个ip地址 仅主机模式&#xff1a;不能联网&#xff0c;可以实现虚拟机和主机之间的通信 【2】虚拟机是否能连接网络 …

STM32学习之 按键/光敏电阻 控制 LED/蜂鸣器

STM32学习之 按键/光敏电阻 控制 LED/蜂鸣器 1、按键控制 LED 按键:常见的输入设备&#xff0c;按下导通&#xff0c;松手断开 按键抖动:由子按键内部使用的是机械式弹簧片来进行通断的、所以在按下和松手的瞬间会伴随有一连串的抖动 按键控制LED接线图&#xff1a; 要有工程…

2024/12/29周报

文章目录 摘要Abstract粒子群优化文献研究背景污水处理面临的挑战现有优化方法的局限性 研究方法基于BSM1仿真平台的污水处理建模动态多目标粒子群优化算法&#xff08;DMOPSO-CD&#xff09;多目标优化控制架构&#xff08;SOFNN&#xff09; 研究过程研究结果与分析总结 摘要…