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

嵌入式Linux学习 -- 网络1

一、网络

1. 网络的定义

网络指通过通信链路​交换设备(路由器等)实现不同主机的进程间通信

实现高效可靠的信息交换

2. 网络通信链路

网络通路 = 物理链路 + 逻辑链路

物理通路: 有线(光纤、同轴电缆)、无线(4G/5G、卫星)

逻辑通路:协议栈 - TCP/IP,实现 不同硬件体系结构间以及 不同软件间的通信 

3. 网络参数

1. IP 地址

        IP地址是网络中主机的唯一标识,由网络地址和主机号组成。

网络地址是子网的唯一标识,类似于电话号码的区号

主机号是子网内每台主机的编号

在IPv4网络中,IP地址是32bit的二进制数,采用大端字节序,点分十进制表示

将32位二进制码划分为4字节,每字节转换成十进制数展示

每字节范围为0 - 255

0~255 | 0~255 | 0~255 | 0~255

如192.168.0.130

2. 子网掩码

获取IP地址中的网络地址和主机地址

如子网掩码为255.255.255.0,与IP地址相与得前三位字节,对其进行分类

3. 网关

        一个网络到另一个网络的关口

4. DNS

域名解析系统,将域名、计算机名转换成百度服务器的IP地址。

4. 网络层次模型

1. OSI 七层模型(参考理论模型)

分类功能说明举例
7. 应用层

为用户的应用程序提供网络服务

最靠近用户的OSI层
http,ftp,QQ消息
6. 表示层数据格式化,加密解密确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取

表示层会通过使用一种通格式来实现多种数据格式之间的转换

PC程序与另一台计算机进行通信,
其中一台计算机使用扩展二一十进制交换码(EBCDIC),
而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符

5. 会话层建立、维护连接状态通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。 
主要在系统之间发起会话或者接受会话请求

www.youku.com/video1

<----会话---->

优酷服务器

4. 传输层

传输控制协议

tcp: 可靠

udp:高效

定义传输数据的协议和端口号

WWW端口80

TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据)
UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据

3. 网络层

数据包

IP寻址,路由器

在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择

路由器-路径选择

2. 数据链路层封装成帧,差错控制

定义如何让格式化数据以帧为单位进行传输

如何让控制对物理介质的访问

提供错误检测和纠正,确保数据的可靠传输

串口通信中使用到的115200、8、N、1
1. 物理层

比特流传输

超5类 ,超6类,远距离传输

定义物理设备标准

0、1与电流的转换,即数模转换与模数转换

网线的接口类型、光纤的接口类型、各种传输介质的传输速率

2. TCP/IP 模型(实际应用模型)

tcp:transmission  control protocol  传输控制协议

3. 网络层次和linux内核

网络协议栈

5. socket函数

1. 概念

提供 一个网络操作的特殊文件 

socket

1.socket是网络通信的特殊文件 ,不占用内核空间

2.socket也是linux系统提供的一个编程接口,通过这个编程接口,就可以使用到linux的网络功能 

2. 函数接口

  • 原型:int socket(int domain, int type, int protocol);
  • 功能

                创建通信的一端 , 返回文件描述符 

  • 参数

                domain    协议族 
ip地址: AF_INET        ipv4  32位
AF_INET6     ipv6  128位 
AF_UNIX       本地套接字
type       说明socket网络通信的文件的类型 
SOCK_STREAM   流式套接字 ---tcp  

                                    SOCK_DGRAM     数据报套接字 ---udp
protocol   协议, 通常设为0 

  • 返回值

           成功返回socket对应的fd,失败返回-1 

6. 协议

1. 传输层的协议

        tcp协议        udp协议

2. TCP(传输控制协议)Transmission Control Protocol​

1. 定义

是一种面向连接的传输层协议,它能提供高可靠性通信

即数据无误、数据无丢失、数据无失序、数据无重复到达的通信

2. 特点

1. 建立可靠传输

        无丢失,无失序,无差错,无重复

2. 面向连接

        在通信前建立一条逻辑通路

3. 字节流

3. 适用情况

1. 适合于对传输质量要求较高,以及传输大量数据的通信。

2. 在需要可靠数据传输的场合,通常使用TCP协议

3. MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议

3. UDP(用户数据报协议)​​User Datagram Protocol​

1. 定义

是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

2. 特点

1. 不建立可靠传输

2. 无连接

3. 数据报

3. 适用情况

1. 发送小尺寸数据(如对DNS服务器进行IP地址查询时)

2. 在接收到数据,给出应答较困难的网络中使用UDP。(如:无线网络)

3. 适合于广播/组播式通信中。

4. MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议

5. 流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输

7. 网络通信模式

1. 分类

1. c / s

        client           客户端 

        server         服务器

2. b / s

       browser        浏览器
server           服务器 

3. p2p

        peer to peer        点对点

2. tcp cs 模型

1. tcp 客户端 -- 主动

socket        =>         (bind)        =>        connect         ||

write        =>        read        =>         close    

2. tcp 服务器 -- 被动

socket        =>         bind        =>         listen        =>        accept        ||        

read        =>        write        =>        close    

3. 函数接口

1. 客户端
1. socket
2. connect
  • 原型: int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
  • 功能

            通过socket链接到指定的地址上 

  •  参数
  •             sockfd         socket创建的fd
  •             addr            标识网络中一个进程对应的地址  ip+端口号 

                                ip            确定一台主机 
端口号   用来标识一个网络通信的进程 

struct sockaddr *addr不通用 
socket的不同的通信范围不同通信域 都有自己特定的结构体 
对于 ipv4 模式有

  •         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                  ip地址*/
}

  •          addrlen  

                说明 第二个参数的 地址类型的大小 

  • 返回值

           成功返回 0,失败返回 -1

2. 服务器端
1. socket
2. bind -- 绑定
  • 函数:int bind   (int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 功能:

           给sockfd 绑定一个地址信息(ip+port)

  • 参数:

          sockfd  --- 要操作的socket 
addr    --- 要绑定的地址信息 
addrlen --- 地址信息对应的大小 

  • 返回值:

        成功返回0, 失败返回-1

3. listen -- 监听
  • 原型: int listen(int sockfd, int backlog);
  • 功能:

     将sockfd对应的socket设置为监听套接字 
这个套接字 负责看 有没有客户端,发送连接请求 
有了放等待队列中

  • 参数:

          sockfd  ---socket 的fd
backlog  --- 等待队列的长度 

  • 返回值:

           成功返回0,失败返回-1

4. accept -- 连接
  • 原型:int accept (int sockfd,     struct sockaddr *addr, socklen_t *addrlen);
  • 功能:

           从监听的socket中提取连接请求,完成连接(三次握手)
返回已连接的一个新socket 

  • 参数:

          sockfd --- 监听的socket的fd
addr   --- 用来存放,客户端的地址信息 
addrlen --- 值结果参数 
注意:  必须初始化 ,初始成 addr对应sockaddr_in 类型的大小               

  • 返回值:

          成功返回已连接的socket的fd,失败返回-1 

线程:

client:

server:

进程:
client:

server:

3. 辅助函数
1. in_addr_t inet_addr(const char *cp);

cp 表示要用的ip地址的字符串, 点分十进制 "192.168.0.150"

返回:

   网络字节序形式的ip地址的32位数值 

2. char *inet_ntoa(struct in_addr in);

将网络字节序形式的ip地址 转换为 点分十进制格式的 ip 字符串 

http://www.dtcms.com/a/343928.html

相关文章:

  • StarRocks启动失败——修复全流程
  • 姓名重名查询抖音快手微信小程序看广告流量主开源
  • 恢复性测试:定义、重要性及实施方法
  • Linux设备模型交互机制详细分析
  • 分段渲染加载页面
  • 第9课:本地功能集成
  • 宋红康 JVM 笔记 Day06|虚拟机栈
  • Seaborn数据可视化实战:Seaborn数据可视化基础-从内置数据集到外部数据集的应用
  • 学习游戏制作记录(合成表UI和技能树的UI)8.22
  • Python打卡Day49 CBAM注意力
  • 小迪安全v2023学习笔记(六十九讲)—— Java安全JWT攻防监控组件泄露接口
  • 北斗导航 | 基于MCMC粒子滤波的接收机自主完好性监测(RAIM)算法(附matlab代码)
  • 【C++组件】Elasticsearch 安装及使用
  • ODYSSEY:开放世界四足机器人的探索与操控,助力长范围任务
  • ref 简单讲解
  • 【前端教程】从基础到进阶:淘宝 HTML 界面“回到顶部”功能的交互升级实战
  • 刷题日记0822
  • Git 版本管理各模块知识点梳理
  • Logstash_Input插件
  • Chrome和Edge如何开启暗黑模式
  • 浏览器插件优化工具:bypass paywalls chrome
  • 【TrOCR】根据任务特性设计词表vocab.json
  • 今日科技热点 | NVIDIA AI芯片、5G加速与大数据平台演进——技术驱动未来
  • ESP32C5在espidf环境下报错5g bitmap contains only invalid channels= @xff
  • 龙虎榜——20250822
  • 线上日志排查问题
  • docker 查看容器 docker 筛选容器
  • 使用 Ragas 评估你的 Elasticsearch LLM 应用
  • 基于Python的伊人酒店管理系统 Python+Django+Vue.js
  • 基于Docker的高可用WordPress集群部署:Nginx负载均衡+Mysql主从复制+ProxySQL读写分离