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

TCP与UDP传输的学习

       void *memset(void *s, int c, size_t n);

功能:将一块内存空间的每个字节都设置为指定的值;这个函数通常用于初始化一个内存空间,或者清空一个空间;

参数:viod * s  空类型指针,指向要填充内存块;(空间/内存的起点);

      Int c 填充空间的值;通常为无符号字符;(空间/内存中填充的值是什么);

              Size_t  n 表示要填充的字节数(字节长度);

返回值:返回这块填充空间的起始地址;

粘包问题:

       粘包(Packet Splitting or Message Smuggling)是指在网络通信中,当发送的数据包大小超过接收端设定的最大长度限制时,可能会将大数据包分割成几个小包发送。接收端收到这些小包后,由于它们各自独立,如果不按照原来的顺序重组,就可能导致数据解析错误,形成乱序或者丢失部分信息。

       Tcp流式套接字;数据与数据之间没有边界,导致可能多次的数据粘到一起;

例如,在TCP协议中,如果POST请求体过大,服务器可能设置了一个固定大小的缓冲区来接收数据。若一次性发送的数据超过了这个缓冲区大小,就会发生粘包现象,导致后续的小包被视为新的请求,造成数据混淆。

为了避免粘包问题,通常的做法有:

  1. 规定一些数据与数据之间的间隔符;(如:”\aa” “\r\n”);
  2. 可以指定要发送的数据的长度;
  3. 或者将数据打包来避免粘包问题;
  4. 数据分块:预先确定好每个数据包的大小,并添加边界标识,如消息头信息中包含总数据长度;
  5. 使用适当的序列号或确认机制:如TCP协议的确认应答,保证数据包按顺序到达;
  6. 使用持久连接(Keep-Alive)或长轮询/WebSockets等技术,保持连接打开,直到所有数据都已发送完毕

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

相当于文件操作中的read;

参数:int flags 非阻塞方式:默认接收方式为0;

                       阻塞方式:MSG_DONTSAIT

       ssize_t send(int sockfd, const void *buf, size_t len, int flags)

相当于文件操作中的write;

参数:int flags 非阻塞方式:默认接收方式为0;

                       阻塞方式:MSG_DONTSAIT

总结:TCP 和 UDP的协议特点

TCP

UDP

1.面向连接;

1.无连接;

2.可靠传输;

2.不可靠;

3.字节流;

3.数据包;

网络测试常用工具

关于TCP和UDP协议的形式

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • GraphQL:API开发的未来,重塑数据交互的艺术
  • 发条朋友圈赚900,这钱太好赚了吧?
  • 照片逼真肖像动画的音频驱动合成——AniPortrait翻译与调试
  • 【YOLO5 项目实战】(7)YOLO5 手势识别
  • 45+用户占比近30%,网文产业如何赋能IP长链?
  • 如何使用gewe开发微信机器人
  • 010 OSS文件上传
  • 自动化开发流程:使用 GitHub Actions 进行 CI/CD
  • 使用 Dify 和 AI 大模型理解视频内容:Qwen 2 VL 72B
  • React+Vis.js(05):vis.js的节点的点击事件
  • 主机安全-网络攻击监测
  • 观测云对接 Pinpoint 最佳实践
  • 设备运维故障排查与修复技巧
  • 宝塔面板配置node/npm/yarn/pm2....相关全局变量 npm/node/XXX: command not found
  • Kafka的基本概念
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • ➹使用webpack配置多页面应用(MPA)
  • Hexo+码云+git快速搭建免费的静态Blog
  • iOS编译提示和导航提示
  • iOS小技巧之UIImagePickerController实现头像选择
  • JAVA 学习IO流
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • JS实现简单的MVC模式开发小游戏
  • Linux后台研发超实用命令总结
  • SegmentFault 2015 Top Rank
  • spring security oauth2 password授权模式
  • Travix是如何部署应用程序到Kubernetes上的
  • Vim Clutch | 面向脚踏板编程……
  • yii2权限控制rbac之rule详细讲解
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 构建工具 - 收藏集 - 掘金
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 简单易用的leetcode开发测试工具(npm)
  • 普通函数和构造函数的区别
  • 前端路由实现-history
  • 日剧·日综资源集合(建议收藏)
  • 试着探索高并发下的系统架构面貌
  • 我这样减少了26.5M Java内存!
  • 终端用户监控:真实用户监控还是模拟监控?
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #etcd#安装时出错
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)Linux整合apache和tomcat构建Web服务器
  • ***监测系统的构建(chkrootkit )