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协议的形式

相关推荐
wazmlp0018873694 分钟前
控制器管理
linux·运维·服务器
薛定猫AI7 分钟前
【深度解析】DeepSeek Harness:可插拔智能体运行时如何连接大模型与真实计算机
java·运维·网络
我爱cope9 分钟前
【计算机网络 | 网络层6:IPv4 数据报格式:TTL、分片、首部校验和分别有什么用?】
网络·学习·计算机网络
裕晟资质规划26 分钟前
首次办理军工保密资质:咨询服务选择要点与全流程交付清单(评估框架)
大数据·运维·服务器·网络·数据库·经验分享
爱研究的小梁26 分钟前
专网与公网隔离,多套网络如何实现异构网络打通融合
网络·信息与通信
运维全栈笔记4 小时前
Vue + Spring Boot 前后端分离项目部署笔记(若依 RuoYi-Vue 3.9.2)
运维·服务器·vue.js·spring boot·笔记·开源·开源软件
梦想的旅途212 小时前
企业微信Webhook:自动回复为什么会连发
网络·安全·企业微信
SLD_Allen13 小时前
字节跳动飞连(Feilian)AI智能体零信任安全治理深度技术研究报告
网络·人工智能·安全·智能体安全
进击的_鹏16 小时前
从零开始的 Redis 学习
服务器·数据库·c++·redis·缓存
实心儿儿16 小时前
Linux —— 传输层协议TCP
linux·服务器·tcp/ip