tcp、udp对比:

UDP

1. 特点

  • 无连接:无需建立连接即可发送数据。
  • 不可靠:不保证数据顺序或完整性。
  • 低延迟:适合实时性要求高的场景。

2. 应用场景

  • 视频/音频流传输(如直播)。
  • DNS 查询、在线游戏。

TCP

1. 特点

  • 面向连接:通过三次握手建立连接。
  • 可靠传输:通过序列号SYN、ACK 确认和重传机制保证数据完整性。
  • 流量控制:滑动窗口机制避免网络拥塞。

一、三次握手和四次挥手和其余机制

🌟 1. 三次握手的第二个阶段为什么是 ACK+SYN?
核心目标:同步序列号 + 确认能力。
TCP 是全双工协议,双方需独立确认发送和接收能力。
SYN 用于交换初始序列号(ISN),ACK 用于确认收到 SYN。
合并原因:
减少网络开销(从 4 次握手优化为 3 次)。
服务器收到 SYN 后必须立即确认(ACK),同时需同步自己的序列号(SYN)。
🌟 2. 四次挥手的确认和结束为什么要分开发送?
核心目标:非对称关闭 + 数据传输可能性。
一方可能仍有数据需要发送(如 HTTP 响应剩余部分)。
FIN 表示“无数据发送”,ACK 表示“已收到 FIN”。
分开发送原因:
被动关闭方可能无法立即停止发送数据。
合并 FIN+ACK 会导致被动关闭方无法完成剩余数据传输。
🌟 3. 关键差异总结

方面三次握手四次挥手

目标

双向同步序列号 + 确认能力非对称关闭连接
SYN/FIN 的角色同步初始序列号(必须立即确认)请求关闭连接(可能延迟发送)
ACK 的角色确认 SYN(必须立即发送)确认 FIN(可能延迟发送)
合并的必要性合并为 SYN+ACK 减少开销

无法合并,因 FIN 和 ACK 发送时机不同

其余机制:

1.应答机制:为每个数据增加序列发,发送数据时,第一个数据的序号作为报文中的序号。接收方收到相关数据,会回应ACK报文,报文中的确认号是接收方下次希望接收到的数据的起始序号

2.超时重传机制:TCP发送数据后会在一定的时间内等待ACK,假设在指定时间ACK未收到,则视为此数据包丢失,

二、 tcp相关接口

1. send 函数
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:发送数据。
参数:
sockfd:套接字文件描述符。
buf:数据缓冲区首地址。
len:数据长度。
flags:默认设为 0。
返回值:
成功:发送的字节数。
失败:-1。
2. recv 函数
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:从 TCP 套接字接收数据。
参数:
sockfd:套接字文件描述符。
buf:保存接收数据的缓冲区首地址。
len:期待接收的字节数。
flags:默认设为 0。
返回值:
成功:实际接收的字节数。
发送端关闭时:返回 0。
失败:-1。
3. listen 函数
int listen(int sockfd, int backlog);
功能:监听三次握手请求。
参数:
sockfd:套接字文件描述符。
backlog:等待处理的三次握手请求的最大数量。
返回值:
成功:0。
失败:-1。
4. accept 函数
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:处理三次握手队列中的第一个请求,创建新套接字。
参数:
sockfd:套接字文件描述符。
addr:保存客户端 IP 地址的缓冲区首地址。
addrlen:IP 地址长度。
返回值:
成功:新套接字文件描述符。
失败:-1。

三、TCP粘包问题

1.TCP在接受数据时,多包数据粘在一起

2.原因:

        (1)TCP发送数据时,会根据缓冲区数据的情况进行重新组包

        (2)TCP接收方,没有及时读走缓冲区数据,导致缓冲区大量数据缓存。

3.如何解决

        (1)发指定大小字节

将要发数据,封装在结构体里

struct data

{

        int id;

        float tmp;

        xxx

}; 

缺点:发送端与接收端体系不同,32位与64位对齐方式的不同造成数据丢失;所有要在指定的相同平台使用,注意结构体对齐问题。

        (2)发送具有指定分隔符的数据

        hello world\n

        miss you\n

        (3)封装自定义数据帧

        AA len0C  0001 0112 1314 1504 XXXX XXXXBB

        校验:8位和校验

                  16位和校验

四、网络抓包

抓取通过设备网卡的数据

wireshark:网络抓包工具

        1.分析和追踪网络问题

        2.查看网络协议栈

安装:sudo apt-get install wireshark

1.sudo wireshark

2.选择通信设备的网卡==》any

3.选择抓取的过滤条件

4.开始抓取

5.进行一次通信

五、TCP报文头

标志位:紧急指针标志,为I时表示紧急指针有效,该报文应该优先传送,
1. URG:
确认应答标志
2 ACK:
表示发送数据,提示接收端从TCP接收缓冲区中读走数据,为接收后续数据腾出空间
3.PSH:
4. RST:重置连接标志
表示请求建立一个连接5.SYN:
fmish标志,表示释放连接6.FN

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

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

相关文章

记一次flink资源使用优化

一.现状分析 现有任务的资源配置如下,根据ui监控中Garbage Collection可以发现,此任务频繁的发生GC,且老年代GC时间较久二.整体memory使用分析如下Framework Heap(框架堆内存)用于Flink框架自身的堆内存(如…

Vue底层换成啥了?如何更新DOM的?

摘要:之前的vue是使用虚拟 DOM的,但是Vue 3.6 带来了一个意义重大的更新: Vapor Mode 渲染模式。Vue 渲染策略的演进: Vue 1.x: 基于模板渲染策略,直接将模板转换为DOM元素,并为每个DOM元素创建…

0722 数据结构顺序表

Part 1.顺序表的代码一.顺序表的内存申请head.h: typedef int datatype;typedef struct sqlist {//数据元素datatype data[MAXSIZE];//顺序表长度int len;}*sqlist; //*sqlist的作用: //sqlist:struct Sqlist * sqlist create();head.c: sqlist create() {sqlist list (sqlist)…

为何在 Vue 的 v-model 指令中不能使用可选链(Optional Chaining)?

Vue 的 v-model 是实现组件与数据双向绑定的核心指令之一,它本质上是一个语法糖,用于简化对表单元素和组件 props 的同步更新。然而,在 Vue 3(以及 Vue 2 的某些模式下),开发者尝试在 v-model 中使用 JavaS…

基于单片机智能药盒/智能药箱/定时吃药系统

传送门 👉👉👉👉其他作品题目速选一览表 👉👉👉👉其他作品题目功能速览 概述 本设计实现了一种基于单片机的智能药盒,系统以微控制器(如STM32&#xff…

(25)python+playwright自动化处理单选和多选按钮-中

1.简介上一篇中讲解和介绍的单选框有点多,而且由于时间的关系,决定今天讲解和分享复选框的相关知识。2.什么是单选框、复选框?单选按钮一般叫raido button,就像我们在电子版的单选答题过程一样,单选只能点击一次&#…

Nginx IP授权页面实现步骤

目标:一、创建白名单文件sudo mkdir -p /usr/local/nginx/conf/whitelist sudo touch /usr/local/nginx/conf/whitelist/temporary.conf二、创建Python认证服务文件路径:/opt/script/auth_server.pyimport os import time from flask import Flask, requ…

2025年7月中科院一区-向光生长优化算法Phototropic growth algorithm-附Matlab免费代码

引言 本期介绍一种新的元启发式算法——向光生长优化算法Phototropic growth algorithm,PGA。灵感来自植物细胞在阳光下的生长模式。于2025年7月最新发表在JCR 1区,中科院1区 SCI 期刊 Knowledge-Based Systems。 该算法将生物学启发的确定性生长行为与…

poi-excel-添加水印

1、官网快速指南 https://poi.apache.org/components/spreadsheet/quick-guide.html 访问如上地址可以查看到poi的相关操作方式: How to create a new workbookHow to create a sheetHow to create cellsHow to create date cellsWorking with different types of…

STM32 开发的鼠标:技术详解与实现指南

概述基于STM32微控制器开发的鼠标是一种高度可定化的输入设备解决方案,广泛应用于工业控制、嵌入式系统、特殊人机交互等领域。相比传统鼠标,STM32鼠标具有以下优势:高度可定制性:可添加特殊功能按键、传感器集成低功耗设计&#…

GoLang教程007:打印空心金字塔

4.6 案例一&#xff1a;打印金字塔编写一个程序&#xff0c;可以接收一个整数&#xff0c;表示层数&#xff0c;打印出金字塔。1️⃣第一步&#xff1a;打印一个矩形 package mainimport "fmt"func main() {// i表示层数for i : 1; i < 3; i {// j表示每层打印多少…

iOS开发 Swift 速记3:运算符与控制结构

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

ElasticSearch中需要注意的点,附官方文档解读

1.批量更新数量大小限制 https://www.elastic.co/guide/cn/elasticsearch/guide/current/bulk.html#_How_Big_Is_Too_Big 整个批量请求都需要由接收到请求的节点加载到内存中&#xff0c;因此该请求越大&#xff0c;其他请求所能获得的内存就越少。批量请求的大小有一个最佳值…

Git GitHub精通:前端协作开发的“瑞士军刀“!

前言&#xff1a;为什么你的代码总是"失踪"&#xff1f; "啊&#xff01;我的代码呢&#xff1f;"——这可能是每个程序员都曾发出过的灵魂呐喊。还记得上周我熬夜写的300行JavaScript&#xff0c;第二天醒来发现被自己手贱覆盖了&#xff0c;那一刻我深刻…

第 30 场 蓝桥·算法入门赛 题解

1. 零食争议【算法赛】 签到题&#xff1a;1-7奇数相加 #include <bits/stdc.h> using namespace std; int main() {// 请在此输入您的代码cout<<1357;return 0; } 2. 数字炸弹【算法赛】 把n个人看为前n-1和后n-1 &#xff0c; 方便找到是第几段的第几个数 #in…

闲庭信步使用图像验证平台加速FPGA的开发:第二十四课——图像直方图均衡化的FPGA实现

&#xff08;本系列只需要modelsim即可完成数字图像的处理&#xff0c;每个工程都搭建了全自动化的仿真环境&#xff0c;只需要双击top_tb.bat文件就可以完成整个的仿真&#xff0c;大大降低了初学者的门槛&#xff01;&#xff01;&#xff01;&#xff01;如需要该系列的工程…

LabVIEW 2025安装包| 免费免激活版下载| 附图文详细安装教程

[软件名称]&#xff1a;LabVIEW 2025 [软件大小]&#xff1a;13 G [系统要求]&#xff1a;支持Win7及更高版本 [下载通道]:夸克网盘 [下载链接]: https://pan.quark.cn/s/7e9527cc06a3 &#xff08;建议用手机保存到网盘后&#xff0c;再用电脑下载&#xff09; 更多免费软件&a…

如何实现泵站的无人值守:御控智慧水务平台

在城乡供水、农田灌溉、工业循环水等场景中&#xff0c;泵站作为核心动力设施&#xff0c;其运行效率直接影响水资源调配的稳定性。然而&#xff0c;传统泵站管理长期面临三大痛点&#xff1a;人力成本高昂&#xff1a;偏远地区泵站需24小时值守&#xff0c;单站年均人力成本超…

深度学习篇---车道线循迹

要实现基于深度学习的双车道线&#xff08;黄色车道线&#xff09;循迹&#xff08;通过预测四个轮子的转速实现自主控制&#xff09;&#xff0c;需要从数据采集、模型设计、训练策略、环境适应等多维度系统优化。以下是具体方案及需要注意的关键事项&#xff0c;旨在提升精准…

JavaScript,发生异常,try...catch...finally处理,继续向上层调用者传递异常信息

JavaScript中&#xff0c;‌异常&#xff08;Exception&#xff09;和错误&#xff08;Error&#xff09; JavaScript 是一种解释型语言&#xff0c;通常在浏览器中通过JavaScript引擎执行。最著名的两个引擎是&#xff1a;SpiderMonkey&#xff08;由 Mozilla Firefox 使用&a…