Linux应用软件编程--网络通信(udp协议,tcp协议)

网络通信:不同主机,进程间通信,分为广域网和局域网

OSI  七层模型:是一种理论模型

应用层:通信传输的数据内容   http、FTP、TFTP、MQTT

表述层:数据加密,解密操作,压缩,解压缩

会话层:建立数据传输通道

传输层:数据传输方式   UDP  TCP

网络层:实现数据路由     路由器

数据链路层:封装成帧,点对点通信(局域网内通信),差错检测     交换机

物理层:定义物理设备标准,比如网线,光纤等传输介质 (比特流  0   1)

TCP/IP   4层模型:工业生产所用的模型

应用层:HTTP, HTTPS(超文本传输协议) (基于TCP)

              FTP : 文件传输协议(基于TCP)

              TFTP:简单文件传输协议(基于UDP)

              MQTT: 消息遥测传输协议(物联网)

              DNS :域名解析服务 

传输层:UDP : 用户数据报协议    面向数据包

               TCP:传输控制协议       面向数据流

网络层:IPv4、IPv6

网络接口层:ARP:地址解析协议

TCP/IP      5层模型
应用程:
传输层:
网络层:
数据链路层:
物理层:

先了解一些概念:

标记主机:

MAC:硬件地址 : 局域网通信

IP:软件地址

端口号:同一主机,区分不同的网络进程,2字节的无符号整形数据,0-65535

ARP:地址解析协议,用于IP地址和MAC地址的转换

网络层:IP协议:IPv4:32bits;IPv6:128bits;点分十进制:如192.168.1.148

linux上查看ip地址:ifconfig;windows上查看ip地址:ipconfig

网络通信模型:

B/S : Browser----》Server;1. 通用的客户端

C/S : Client-----》Server;1. 专用的客户端;2.  客户端也可保存资源

UDP:用户数据报协议

特点:1. 无连接  ;2. 面向数据包;3. 不安全不可靠(尽最大努力交付),可能存在丢包和乱序的问题;4.可实现一对一, 一对多通信 

UDP的缺点:

1. 无连接,有可能接收方未准备就绪

2. 发送速度和数据接收速度不匹配,导致缓冲区满,造成数据丢失

解决办法:

1. 控制数据发送速度。

2. 模仿tcp增加应答机制

应用场景:1. 允许数据丢失(视频画面传输,游戏,直播);2. 实时性高

下图是编程步骤:

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

功能:创建一个通讯的套接字

参数:

    domain: 网络协议族

    AF_INET:   IPv4

    AF_INET6: IPv6

    type: 表示传输层协议类型:SOCK_STREAM:   tcp,OCK_DGRAM:    udp

    protocol:0 : 默认普通正常模式

返回值:成功:文件描述符;失败:-1

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);

功能:向目标地址发送数据

参数:

    sockfd:通讯套接字

    buf:要发送的数据内容首地址

    len : 内容字节数

    flags : 0:默认方式发送

    dest_addr:数据接收方的地址

    addrlen:接收方的地址大小

返回值:成功:实际发送的字节数;失败:-1

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 */
           };

int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

功能:绑定套接字和自己的地址信息

参数:

    sockfd:套接字

    addr : 自己的地址信息

    addrlen:地址的大小

返回值:成功:0;失败:-1

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);

功能:接收udp发送的数据

参数:

    sockfd:接收数据的套接字

    buf:保存接收数据的首地址

    len:期待收到的字节数

    flags:0:默认方式接收

    src_addr: 保存发送发地址信息的空间首地址

    addrlen:发送方地址信息大小的首地址

返回值:成功:返回实际收到的字节数;失败:-1

这里注意:网络字节序是大端;主机字节序是小端,学习一些转换用的函数

htons: 将主机字节序(小端)的short类型转换成网络字节序(大端)

htonl: 将主机字节序(小端)的long类型转换成网络字节序(大端)

ntohs:将网络字节序转换成主机字节序

ntohl:inet_ntoa():将二进程整形ip转换成字符串ip

           inet_addr() : 将字符串ip转换成网络字节序的二进制ip

TCP :传输控制协议

特点:

1. 有连接

2. 面向字节流(流式套接字)

3. 安全可靠的传输协议:.三次握手、四次挥手机制;应答机制....等一系列机制

4. 只能实现一对一通信

应用:要求数据安全可靠的场景下:HTTP、FTP、MQTT

三次握手:tcp为了确保通信双方都已准备就绪,在建立连接时,要进行三次握手操作。由客户端主动发起。

四次挥手:tcp为了确保断开连接时,通信双发都收发数据结束,在断开连接时,进行四次挥手,由任意一方发起。

TCP软件编程步骤:

 

int listen(int sockfd, int backlog);

功能:负责监听需要建立连接的客户端

参数:

    sockfd:

    backlog:允许同时监听的客户端的个数

返回值:成功:0;失败:-1

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

功能:接收完成三次握手的客户端

参数:

    sockfd:监听套接字

    addr:建立连接的客户端地址

    addrlen:客户端地址大小的指针

返回值:成功:通讯套接字;失败:-1

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

功能:接收数据

返回值:成功:实际收到字节数;失败:-1;对方断开连接:不再阻塞, 返回0

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

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

相关文章

【C++】构造函数与析构函数

写在前面 构造函数与析构函数都是属于类的默认成员函数! 默认成员函数是程序猿不显示声明定义,编译器会中生成。 构造函数和析构函数的知识需要建立在有初步类与对象的基础之上的,关于类与对象不才在前面笔记中有详细的介绍:点我…

【简博士统计学习方法】3. 统计学习方法的三要素

3. 统计学习方法的三要素 3.1 监督学习的三要素 3.1.1 模型 假设空间(Hypothesis Space):所有可能的条件概率分布或决策函数,用 F \mathcal{F} F表示。 若定义为决策函数的集合: F { f ∣ Y f ( X ) } \mathcal{F…

【llm/ollama/qwen】在本地部署qwen2.5-coder并在vscode中集成使用代码提示功能

说在前面 操作系统:windows11ollama版本:0.5.4vscode版本:1.96.2continue插件版本:0.8.66 ollama安装 访问官网,点击下载安装即可 默认装在了C盘,比较蛋疼;但是可以指定路径安装:Ol…

PHP零基础入门笔记

表达式:任何有值的东西就是表达式 php可以解析双引号,不可以解析单引号,双引号中引用变量可以输出引用变量的值,但是单引号不可以 1.变量和变量的销毁 unset(变量名) //销毁变量 变量是严格区分大小写的,在php中…

macos安装java8

下载 dmg方式安装 安装 双击pkg运行 输入java -version验证 配置环境变量 cd ~ ls -a输入 ls -a后查看是否已经存在.bash_profile文件,如果已经存在就不需要创建,如果不存在,继续执行下方命令创建文件 touch .bash_profile /usr/l…

自定义校验注解

已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解) 1.自定义注解,并在注解上指定校验逻辑 Constraint(validatedBy StateValidation.class) // 指定校验逻辑 package com.example.demo.validation;import jakarta.validation.Constraint; import j…

指代消解:自然语言处理中的核心任务与技术进展

目录 前言1. 指代消解的基本概念与分类1.1 回指与共指 2. 指代消解的技术方法2.1 端到端指代消解2.2 高阶推理模型2.3 基于BERT的模型 3. 事件共指消解:跨文档的挑战与进展3.1 联合模型3.2 语义嵌入模型(EPASE) 4. 应用场景与前景展望4.1 关键…

Chapter4.1 Coding an LLM architecture

文章目录 4 Implementing a GPT model from Scratch To Generate Text4.1 Coding an LLM architecture 4 Implementing a GPT model from Scratch To Generate Text 本章节包含 编写一个类似于GPT的大型语言模型(LLM),这个模型可以被训练来生…

nginx正向代理从安装到使用一网打尽系列(二)使用

一、背景 使用场景大总结,可作为参考手册用 nginx正向代理从安装到使用一网打尽系列(一)安装 nginx正向代理从安装到使用一网打尽系列(二)使用 二、使用场景 1、所有内网应用都不能直接访问外网,但需要…

论文解读 | NeurIPS'24 IRCAN:通过识别和重新加权上下文感知神经元来减轻大语言模型生成中的知识冲突...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 史丹,天津大学博士生 内容简介 大语言模型(LLM)经过海量数据训练后编码了丰富的世界知识。最近的研究表明&#xff0c…

大语言模型训练所需的最低显存,联邦大语言模型训练的传输优化技术

联邦大语言模型训练的传输优化技术 目录 联邦大语言模型训练的传输优化技术大语言模型训练所需的最低显存大语言模型训练所需的最低显存 基于模型微调、压缩和分布式并行处理的方法,介绍了相关开源模型及技术应用 核心创新点 多维度优化策略:综合运用基于模型微调、模型压缩和…

(CICD)自动化构建打包、部署(Jenkins + maven+ gitlab+tomcat)

一、平滑发布与灰度发布 **什么叫平滑:**在发布的过程中不影响用户的使用,系统不会因发布而暂停对外服务,不会造成用户短暂性无法访问; **什么叫灰度:**发布后让部分用户使用新版本,其它用户使用旧版本&am…

Python 科学计算

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

【pytorch】注意力机制-1

1 注意力提示 1.1 自主性的与非自主性的注意力提示 非自主性提示: 可以简单地使用参数化的全连接层,甚至是非参数化的最大汇聚层或平均汇聚层。 自主性提示 注意力机制与全连接层或汇聚层区别开来。在注意力机制的背景下,自主性提示被称为查…

Qt窗口获取Tftpd32_svc服务下载信息

前言 一个由Qt开发的Windows小工具需要布置Tftp协议服务端来支持设备下载数据,并显示下载列表(进度、下载源等)。 考虑开发方便,优先使用了Qtftp方案,经测试发现,不够稳定,会有下载超时的情况&a…

<OS 有关> DOS 批处理命令文件,用于创建 python 虚拟机,并进入虚拟机状态执行后继命令 判断虚拟机是否存在,在批处理文件中自定义 虚拟机名字

前言: 经常要敲重复的命令: python -m venv venv.\venv\Scripts\activate.bat (虽然能按 Tab 省几下,多了也烦恼,后来写了四行脚本 start.bat) DOS批处理 create_venv_start.bat 功能: 批处理显示支持中文在 creat…

【算法刷题】leetcode hot 100 哈希篇

文章目录 1. 两数之和49. 字母异位词分组128. 最长连续序列总结 1. 两数之和 leetcode:https://leetcode.cn/problems/two-sum/description/?envTypestudy-plan-v2&envIdtop-100-liked暴力解决: public int[] twoSum(int[] nums, int target) {for …

iOS 逆向学习 - iOS Architecture Cocoa Touch Layer

iOS 逆向学习 - iOS Architecture Cocoa Touch Layer 一、Cocoa Touch Layer 简介二、Cocoa Touch Layer 的核心功能1. UIKit2. Event Handling(事件处理)3. Multitasking(多任务处理)4. Push Notifications(推送通知&…

网站常用功能模块-鉴权

一:JWT是什么? 常用鉴权方式有很多种,今天主要介绍基于token的鉴权方式JWT(Json JSON Web Token)。因为这种方式实现起来方便快捷。整体实现逻辑如下 第一次登陆时,前端携带账号和密码请求登录接口。服务…

stm32的掉电检测机制——PVD

有时在一些应用中,我们需要检测系统是否掉电了,或者要在掉电的瞬间需要做一些处理。 STM32内部自带PVD功能,用于对MCU供电电压VDD进行监控。 STM32就有这样的掉电检测机制——PVD(Programmable Voltage Detecter),即可编程电压检…