网络编程—TCP/IP模型(UDP协议与自定义协议)

上篇文章:

网络编程—Socket套接字(TCP)https://blog.csdn.net/sniper_fandc/article/details/146923783?fromshare=blogdetail&sharetype=blogdetail&sharerId=146923783&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

目录

1 应用层

1.1 自定义协议

2 传输层

2.1 UDP


1 应用层

1.1 自定义协议

        应用层除了特殊的协议比如http、https等,大部分协议需要开发人员自定义,即自己约定协议的格式。以登录注册模块为例,常常需要客户端和服务器互相返回账号数据,假设请求和响应的数据都有:userid、number、password,那么自定义协议就有6种常见的类型:

        1.分隔符:可以采用“;”、“ ”、“\n”等符号作为不同类型数据的划分界限。比如:userid;number;password;

        2.固定长度字节:采用固定长度的字节来表示请求和响应,比如请求长度10字节,userid占2字节,number占4字节,password占4字节。

        3.分隔符+固定长度字节:前两种方式组合,实现变长字节组合方式。

        4.xml:采用标签组织数据

<request><userid>1</userid><number>123456789</number><password>123456789</password></request><response><userid>1</userid><number>123456789</number><password>123456789</password></response>

        5.JSON:最常用的前后端数据交互格式,使用{}包含键值对,键必须是字符串,值可以是字符串、数字、数组([])甚至JSON等格式,键和值之间用:分割,键值对之间用,分割,比如:

请求:

{

userid:1,

number:”123456789”,

password:”123456789”

}

        6.二进制数据:常见protobuffer、thift等。

        注意:xml和JSON属于文本格式,优点是可读性强,缺点是效率低,占用带宽多。二进制格式优点是效率高,占用带宽少,缺点是可读性差。

2 传输层

2.1 UDP

        UDP协议的特点是无连接(不建立连接来传输数据)、不可靠(不知道数据是否发送过去)、面向数据报(发多少收多少,不能拆分为字节多次接收)、只有接收缓冲区没有发送缓冲区、大小受限(最长64kb)、全双工(同时发送和接收)。

        UDP数据报结构如下:

        源端口号:发送方的端口号

        目的端口号:接收方的端口号

        UDP长度:单位字节,16位可以表示64kb的数据,即UDP报文长度最大64kb。

        校验和:发送方发送数据时会计算一个校验和,接收方接收数据后再计算一个校验和,根据校验和是否相等验证当前UDP数据报在传输过程中是否出现错误(导致比特位被修改),如果出错就会丢弃。

        UDP校验和的计算没有采用著名的CRC算法(循环冗余校验和),而是把数据划分为多段16位的字(如果不足16位且为奇数位,就在末尾补形成偶数长度),把每个16位的字累加,溢出2字节(16位)的部分从16位的最低位进位,最后把得到的结果按位取反得到校验和。

        注意:如果校验和不相等,则数据传输过程一定发生了错误。如果校验和相等,也不能说明数据一定完全正确。因为算法过于简单,有可能某位0变1,对应其他16位字的相同位置是1变0,结果求和过程结果仍然一样。但是虽然网络传输过程可能出错,但这是很小概率的事,多个小概率事件同时发生使校验和仍然一样概率更小,因此工程上一般忽略不计。

下篇文章:

网络编程—TCP/IP模型(TCP协议)https://blog.csdn.net/sniper_fandc/article/details/147011479?fromshare=blogdetail&sharetype=blogdetail&sharerId=147011479&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

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

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

相关文章

GNSS有源天线和无源天线

区别 需要外部供电的就是有源天线&#xff0c;不需要外部供电的是无源天线。 无源天线 一般就是一个陶瓷片、金属片等&#xff0c;结构简单&#xff0c;成本低廉&#xff0c;占用空间及体积小&#xff0c;适合于强调紧凑型空间的导航类产品。 不需要供电&#xff0c;跟设备直…

网络编程—TCP/IP模型(IP协议)

上篇文章&#xff1a; 网络编程—TCP/IP模型&#xff08;TCP协议&#xff09;https://blog.csdn.net/sniper_fandc/article/details/147011479?fromshareblogdetail&sharetypeblogdetail&sharerId147011479&sharereferPC&sharesourcesniper_fandc&sharef…

基于金字塔视觉变换的类引导网络高分辨率遥感图像高效语义分割

Class-Guidance Network Based on the Pyramid Vision Transformer for Efficient Semantic Segmentation of High-Resolution Remote Sensing Images 摘要 多分类语义分割中类之间的小差异和类内的大变化是全卷积神经网络的“编码器-解码器”结构没有完全解决的问题&#…

基于人工智能的高中教育评价体系重构研究

基于人工智能的高中教育评价体系重构研究 一、引言 1.1 研究背景 在科技飞速发展的当下&#xff0c;人工智能技术已广泛渗透至各个领域&#xff0c;教育领域亦不例外。人工智能凭借其强大的数据处理能力、智能分析能力和个性化服务能力&#xff0c;为教育评价体系的创新与发…

DeepSeek在互联网技术中的革命性应用:从算法优化到系统架构

引言:AI技术重塑互联网格局 在当今快速发展的互联网时代,人工智能技术正以前所未有的速度改变着我们的数字生活。DeepSeek作为前沿的AI技术代表,正在多个互联网技术领域展现出强大的应用潜力。本文将深入探讨DeepSeek在搜索引擎优化、推荐系统、自然语言处理以及分布式系统…

数字游戏(继Day 10)

主体: #include<stdio.h> #include<time.h> #include<stdlib.h>#include"mygetch.h"#define MAX 51 //定义测试字母的最大长度void help() {printf("\n****************************************");printf("\n*输入过程中无法退出…

谈谈模板方法模式,模板方法模式的应用场景是什么?

一、模式核心理解 模板方法模式是一种​​行为设计模式​​&#xff0c;通过定义算法骨架并允许子类重写特定步骤来实现代码复用。 如同建筑图纸规定房屋结构&#xff0c;具体装修由业主决定&#xff0c;该模式适用于​​固定流程中需要灵活扩展​​的场景。 // 基础请求处理…

2024 Jiangsu Collegiate Programming Contest H

记录一下为数不多的网络流 #pragma GCC optimize(3,"Ofast","inline") #include<bits/stdc.h> #include <execution> using namespace std; using i64 long long; using i128 __int128;template <typename T>struct MCFgraph{struct …

Hadoop序列化与反序列化

一、Hadoop序列化概述 &#xff08;一&#xff09;什么是序列化和反序列化 序列化&#xff1a;序列化是将对象&#xff08;如Java中的类实例&#xff09;转换为字节序列的过程。在Hadoop中&#xff0c;数据在分布式系统中传输或者存储到磁盘时&#xff0c;需要将数据对象序列…

FreeRTOS临界区

在FreeRTOS中&#xff0c;临界区通过关闭可管理的中断来保护共享资源&#xff0c;具体关闭的中断层级由configMAX_SYSCALL_INTERRUPT_PRIORITY宏定义决定。以下是关键点解析&#xff1a; 中断优先级分类&#xff1a; 高优先级中断&#xff1a;数值低于configMAX_SYSCALL_INTERR…

cdw2: TypeScript

一、javascript的问题 二、初识typescript https://mp.weixin.qq.com/s/wnL1l-ERjTDykWM76l4Ajw 三、类型 二进制&#xff1a;ob开头&#xff0c;八进制&#xff1a;0o开头&#xff0c;十六进制&#xff1a;0x开头 开发中不这样写 这样写 匿名函数的参数最好不要…

Qt中的元对象系统

Qt的元对象系统(Meta-Object System)提供了对象间通信的信号和槽机制、运行时类型信息和动态属性系统。 元对象系统基于以下三个方面&#xff1a; (1).QObject类&#xff1a;为可以利用元对象系统的对象提供了基类。 (2).Q_OBJECT宏&#xff1a;用于启用元对象功能&#xff0c;…

深入理解重排(Reflow)与重绘(Repaint),写出高性能 CSS 动画

在前端开发中&#xff0c;CSS 动画是提升用户体验的重要手段&#xff0c;但很多开发者在使用动画时并不了解浏览器背后的渲染机制&#xff0c;导致动画卡顿甚至影响整体性能。本文将带你深入理解 CSS 中的两大核心概念 —— 重排&#xff08;Reflow&#xff09; 与 重绘&#x…

<贪心算法>

前言&#xff1a;在主包还没有接触算法的时候&#xff0c;就常听人提起“贪心”&#xff0c;当时是layman&#xff0c;根本不知道说的是什么&#xff0c;以为很难呢&#xff0c;但去了解一下&#xff0c;发现也不过如此嘛&#xff08;bushi)&#xff0c;还以为是什么高级东西呢…

大模型快速 ASGI 服务器uvicorn

基础概念类 1. 什么是 Uvicorn&#xff0c;它的作用是什么&#xff1f; 答案&#xff1a;Uvicorn 是一个基于 Python 的快速 ASGI&#xff08;异步服务器网关接口&#xff09;服务器。它的主要作用是作为 Web 应用程序的服务器&#xff0c;负责接收客户端的请求&#xff0c;并…

2025高频面试算法总结篇【二叉树】

文章目录 直接刷题链接直达非递归实现求二叉树的深度非递归从左至右打印一颗二叉树中的所有路径判断平衡二叉树二叉搜索树中第K小的元素二叉树的完全性检验根据前&中序遍历结果重建二叉树二叉树的最近公共祖先二叉树的直径二叉树的遍历 直接刷题链接直达 非递归实现求二叉…

redis 和 MongoDB都可以存储键值对,并且值可以是复杂json,用完整例子分别展示说明两者在存储json键值对上的使用对比

Redis 存储 JSON 键值对示例 存储操作&#xff1a; // 存储用户信息&#xff08;键&#xff1a;user:1001&#xff0c;值&#xff1a;JSON对象&#xff09; SET user:1001 {"name":"Alice", "age":30, "address":"New York&quo…

介绍几种创意登录页(含完整源码)

今天为大家收集了几种不同风格的登录页&#xff0c;搭配动态渐变背景&#xff0c;效果绝对惊艳&#xff01; CSS3实现动态渐变玻璃拟态登录页 一、开篇语 纯CSS实现当下最火的玻璃拟态(Morphism)风格登录页&#xff0c;搭配动态渐变背景&#xff0c;效果绝对惊艳&#xff01; …

R语言之mlr依赖包缺失警告之分析

因为本地没有网络&#xff0c;所有相关的依赖包都是手动下载&#xff0c;再使用脚本一键安装的。 在使用mlr包时&#xff0c;执行下面的代码时&#xff0c;总是报各种依赖缺失&#xff0c;也不知道咋看FAIL信息。 # 建模与调参 # 查阅线性回归、随机森林、xgboost和KNN四种模…

无状态版的DHCPv6是不是SLAAC? 笔记250405

无状态版的DHCPv6是不是SLAAC? 笔记250405 无状态版 DHCPv6 不是 SLAAC&#xff0c;但二者在 IPv6 网络中可协同工作。以下是核心区别与协作关系&#xff1a; 本质区别 特性SLAAC无状态 DHCPv6主要功能生成 IPv6 地址&#xff08;基于路由器通告的前缀&#xff09;分发 DNS、…