UDP 和TCP的应用

一、网络模型

(一)C/S 模型

客户端 / 服务器(Client/Server,C/S)模型是一种常见的网络架构。在这种模型中,客户端是主动的角色,向服务器发起请求;服务器端是被动的角色,等待客户端的请求并提供相应的服务。例如,在文件传输、即时通讯等应用中,通常采用 C/S 模型。

(二)B/S 模型

浏览器 / 服务器(Browser/Server,B/S)模型是随着互联网的发展而兴起的一种网络架构。在这种模型中,用户通过浏览器作为客户端,访问服务器上的资源。服务器端负责处理用户的请求,并将结果返回给浏览器。B/S 模型具有跨平台、易于部署和维护等优点,广泛应用于 Web 应用开发

(三)P2P 模型

点对点(Peer-to-Peer,P2P)模型是一种去中心化的网络架构。在这种模型中,各个节点之间直接进行通信,不需要通过中央服务器。P2P 模型具有高效、灵活、可扩展性强等优点,适用于文件共享、分布式计算等应用。

二、实现编程的方式

(一)UDP

  1. 特点
    • 无连接:在数据发送前,不需要建立连接,直接将数据发送到目标地址。
    • 不可靠:不保证数据的可靠传输,可能会出现数据丢失、重复、乱序等情况。
  2. 编程流程(C/S 模型)
    • 客户端:
      • 创建 socket:使用 socket 函数创建一个用于 UDP 通信的套接字。
      • 发送数据:使用 sendto 函数将数据发送到服务器端。
      • 接收数据(可选):使用 recvfrom 函数接收服务器端回发的数据。
    • 服务器端:
      • 创建 socket:使用 socket 函数创建一个用于 UDP 通信的套接字。
      • 绑定地址:使用 bind 函数将套接字与特定的 IP 地址和端口号绑定,以便接收客户端的数据。
      • 接收数据:使用 recvfrom 函数接收客户端发送的数据。
      • 发送数据(可选):使用 sendto 函数将数据回发给客户端。

(二)TCP

  1. 特点
    • 面向连接:在数据传输前,需要建立连接,确保数据传输的可靠性。
    • 可靠传输:通过确认机制、重传机制等保证数据的准确、完整传输。
  2. 编程流程(C/S 模型)
    • 客户端:
      • 建立连接:
        • 创建 socket:使用 socket 函数创建一个用于 TCP 通信的套接字。
        • 可选的 bind 操作:如果需要指定本地的 IP 地址和端口号,可以使用 bind 函数进行绑定。
        • 发起连接请求:使用 connect 函数向服务器端发起连接请求。
      • 通信过程:
        • 使用 read 函数读取服务器端发送的数据。
        • 使用 write 函数向服务器端发送数据。
      • 关闭连接:使用 close 函数关闭套接字,释放资源。
    • 服务器端:
      • 建立连接:
        • 创建 socket:使用 socket 函数创建一个用于 TCP 通信的套接字。
        • 绑定地址:使用 bind 函数将套接字与特定的 IP 地址和端口号绑定。
        • 监听连接请求:使用 listen 函数监听客户端的连接请求。
        • 接受连接请求:使用 accept 函数接受客户端的连接请求,建立连接。
      • 通信过程:
        • 使用 read 函数读取客户端发送的数据。
        • 使用 write 函数向客户端发送数据。
      • 关闭连接:使用 close 函数关闭套接字,释放资源。

三、相关函数详解

(一)recvfrom 函数

recvfrom 函数是用于接收数据的函数,在 UDP 和 TCP 编程中都可能用到。

  • sockfd:套接字文件描述符。
  • buf:保存数据的一块空间的地址。
  • len:这块空间的大小。
  • flags:接收方式的标志,0 表示默认的阻塞方式。
  • src_addr:用来保存发送方的地址信息。
  • addrlen:表示发送方实际的地址信息大小。
    返回值:成功返回接收到的字节数,失败返回 -1。

(二)bind 函数

bind 函数用于将套接字与特定的 IP 地址和端口号绑定。

  • sockfd:之前通过 socket 函数创建的文件描述符,套接字 ID。
  • addr:物理接口的结构体指针,表示该接口的信息。
  • addrlen:参数 addr 的长度。

(三)connect 函数

connect 函数用于客户端向服务器发起连接请求。

  • sockfd:本地 socket 创建的套接子 ID。
  • addr:远程目标主机的地址信息。
  • addrlen:参数 addr 的长度。
    返回值:成功返回 0,失败返回 -1。

四、地址

(一)绑定地址

绑定地址是指将服务器程序所在电脑的 IP 地址与套接字进行绑定。在服务器端,绑定地址是为了让客户端能够准确地找到服务器并与之进行通信。在客户端,如果需要指定特定的本地 IP 地址和端口号进行数据发送,也可以使用 bind 函数进行绑定,但通常情况下客户端可以省略 bind 操作,由默认接口发送数据。

(二)查看地址

在 Linux 系统中,可以使用 ifconfig 命令查看网卡相关信息,其中包含 IP 地址。在 Windows 系统下,可以在命令提示符中使用 ipconfig /all 命令查看 IP 地址等网络配置信息。

 

五、TCP 连接建立与断开

(一)TCP 三次握手建立连接

  1. 客户端向服务器发送连接请求,表示 “我要和你建立连接”。
  2. 服务器收到连接请求后,回复 “好的,可以建立连接”。
  3. 客户端收到服务器的回复后,再次发送确认信息 “好”,此时连接建立成功。

(二)TCP 四次挥手断开连接

  1. 客户端向服务器发送断开连接请求,表示 “我要和你断开连接”。
  2. 服务器收到断开连接请求后,回复 “好的,可以断开”。
  3. 服务器向客户端发送自己的断开连接请求,表示 “我也要断开”。
  4. 客户端收到服务器的断开连接请求后,回复 “好”,此时连接断开。

 

 

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

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

相关文章

electron-vite封装UI级的消息提示

说明 Electron Vite Vue3 Element Plus Electron中写提示有两种方案: 系统级:electron带的dialog相关APIUI级:UI框架内部的提示,如ElMessage、ElMessageBox、ElNotification等 今天来封装一下UI级别的提示 代码 效果图 源…

Springboot 定时任务cron表达式

Cron表达式是一个强大的字符串,用于在Unix/Linux系统中配置cron job(计划任务)的时间表。然而,在Spring框架(包括Spring Boot)中,Cron表达式也被广泛使用于Scheduled注解中,以定义定…

LLM之基于llama-index部署本地embedding与GLM-4模型并初步搭建RAG(其他大模型也可,附上ollma方式运行)

前言 日常没空,留着以后写 llama-index简介 官网:https://docs.llamaindex.ai/en/stable/ 简介也没空,以后再写 注:先说明,随着官方的变动,代码也可能变动,大家运行不起来,可以进…

巡检机器人的使用方法和维护保养

在当今快速发展的工业环境中,智能巡检机器人正逐渐成为提升运维效率和安全性的重要工具。旗晟机器人凭借其核心技术团队和多年的行业经验,推出了多款高效、智能的巡检机器人,旨在帮助企业实现设备运维的智能化升级。本文将介绍旗晟巡检机器人…

存储与传输/大小端字节序的概念、决定因素、给编程带来的困扰

文章目录 概述大小端分歧的类比为什么要关注字节序NET网络字节序什么时候必须转换字节序大小端字节序哪个优秀判断系统字节序类型字节序类型转换大小端内存监视和调试 谁决定了大小端模式CPU架构决定大小端操作系统影响大小端?编译器也影响大小端?可配置…

反射型XSS

反射型XSS(Cross-Site Scripting)是一种Web安全漏洞,它发生在当Web应用程序将用户输入的数据“反射”回浏览器,而没有进行适当的处理或编码时。这种类型的XSS攻击是非持久化的,意味着恶意脚本不会被永久存储在服务器上…

【威锋网-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

深度解析:常见本地大模型知识库工具部署、微调与对比,个人高效选型指南!

常见本地大模型知识库工具 LLM knowledge base 这里先盘点一下最近比较火爆的几个工具,将从知识库侧和大模型侧分别介绍。 01 知识库侧 知识库侧主要是指更加偏向于能够直接读取文档并处理大量信息资源,包括文档上传、自动抓取在线文档,…

Linux下进程间的通信--信号

信号的概念: 在Linux操作系统中,信号是一种软件中断机制,用于通知进程某个事件已经发生。信号是Linux进程间通信(IPC)的一种简单且快速的方式,它可以用来处理各种异步事件,如用户输入、硬件事件…

mysql 修改表的名字

mysql 修改表的名字 rename命令用于修改表名。 rename命令格式:rename table 原表名 to 新表名; 例如,在表MyClass名字更改为YouClass: mysql> rename table MyClass to YouClass; 当你执行 RENAME 时,你不能有任何锁定的表…

Redis (day 3)

一、通过jedis连接数据库 1.首先导入依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.1.0</version></de…

自己做的一个用于生成DICOM文件的服务器

框架: .ner core web api .net8.0 Program.cs代码如下 using Microsoft.AspNetCore.HttpsPolicy; using System.Diagnostics;namespace PacsServer {/* public class Program{public static void Main(string[] args){//配置服务var builder WebApplication.CreateBuilder(a…

(第三十三天)

1. 设置主从从 mysql57 服务器 &#xff08; 1 &#xff09;配置主数据库 [rootmsater_5 ~] # systemctl stop filewalld [rootmsater_5 ~] # setenforce 0 [rootmsater_5 ~] # systemctl disable filewalld [rootmsater_5 ~] # ls anaconda-ks.cfg mysql-5.7.44-linux-g…

Python实现贪心算法

目录 贪心算法简介贪心算法的基本思想贪心算法的应用场景活动选择问题 Python实现活动选择问题代码解释活动选择问题的解贪心算法的正确性分析贪心算法的其他应用贪心算法的局限性贪心算法的优化与变种总结 贪心算法简介 贪心算法&#xff08;Greedy Algorithm&#xff09;是一…

【Unity】通用GM QA工具 运行时数值修改 命令行 测试工具

GM工具使用: GM工具通常用于游戏运行时修改数值(加钱/血量)、解锁关卡等&#xff0c;用于快速无死角测试游戏。一个通用型GM工具对于游戏项目是非常实用且必要的&#xff0c;但通用不能向易用妥协&#xff0c;纯命令行GM门槛太高&#xff0c;对QA不友好。 这类运行时命令行工具…

进程的创建、终止

目录 前言1. 进程创建2. 进程终止3. exit && _exit 的异同3.1 相同点3.2 不同点 前言 紧接着进程地址空间之后&#xff0c;我们这篇文章开始谈论进程控制相关的内容&#xff0c;其中包括进程是如何创建的&#xff0c;进程终止的几种情况&#xff0c;以及进程异常终止的…

数学建模学习(115):主成分分析(PCA)与Python实践

文章目录 一.主成分分析简介1.1 数学背景与维度诅咒1.2 PCA的定义与应用二.协方差矩阵——特征值和特征向量三.如何为数据集选择主成分数量四.特征提取方法五.LDA——与PCA的区别六.PCA的应用七.PCA在异常检测中的应用八.总结一.主成分分析简介 1.1 数学背景与维度诅咒 主成成…

TOP10漏洞原理

## 本人为学习网安不久的新人&#xff0c;记一次学习笔记&#xff0c;有缺陷或者表述不对的地方欢迎大家指出&#xff0c;感谢&#xff01; ## 1、sql注入&#xff1a;web应用程序对用户输入的数据没有进行过滤&#xff0c;或者过滤不严&#xff0c;就把sql语句拼接进数据库…

二叉树的统一迭代法

目录 一&#xff1a;中序遍历&#xff1a; 二&#xff1a;前序遍历&#xff1a; 三&#xff1a;后序遍历 记忆法&#xff1a;跟序列的遍历相反&#xff1a; 比如中序是中左右结点遍历输出的&#xff0c;那压入栈的顺序就是右左中 st.push(node); …

Mac电脑遇到DNS解析失败,ip可以访问,域名无法访问

当Mac电脑遇到DNS解析失败的问题时&#xff0c;可以尝试以下几个解决方法‌&#xff1a; 1.检查网络连接‌&#xff1a;确保Mac已连接到可用的网络&#xff0c;并且网络连接正常。可以尝试重新连接Wi-Fi或使用有线连接来排除网络问题。 2.清除DNS缓存‌&#xff1a;打开终端应…