当前位置: 首页 > 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协议的形式


http://www.mrgr.cn/news/6993.html

相关文章:

  • Web应用服务器Tomcat
  • 如何在Geth中搭建P2P多节点以太坊私链:详细教程与实操步骤
  • 【算法】希尔排序、计数排序、桶排序、基数排序
  • 入门Java编程的知识点—>程序结构(day04)
  • 代码随想录day52 101孤岛的总面积 102沉没孤岛 103水流问题 104建造最大岛屿
  • CentOS7发送邮件如何配置SMTP服务器发信?
  • Ubuntu 22安装和配置PyCharm详细教程(图文详解)
  • UE5打包iOS运行查看Crash日志
  • AI副业:别只顾刷黑神话悟空!AI做神话账号,商单月入过万(附教程)
  • 适用于应用程序安全的 11 大 DevSecOps 工具
  • 大语言模型 (LLM)是什么_
  • 【设计模式】单例模式、工厂模式、策略模式、观察者模式、装饰器模式
  • 异步交互技术Ajax-Axios
  • LeetCode面试题Day16|LC56 合并区间、LC57 插入区间
  • Lodash 使用详解:提升 JavaScript 开发效率的利器
  • 【解压即玩】使命召唤 系列合集17-1,经典收藏
  • 芯片后端之 PT 使用 report_timing 产生报告 之 -include_hierarchical_pins 选项
  • CLion调试ROS(包括launch启动的ROS)
  • Debian系列和Red Hat系列常用命令
  • 直播App遭受抓包后的DDoS与CC攻击防御策略