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

TCP/UDP初识

TCP是面向连接的、可靠的、基于字节流的传输层协议。

面向连接:一定是一对一连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息

可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;

基于字节流的:TCP 协议在传输数据时,并不关心数据的边界。它将数据视为一连串的字节,而不是消息或数据包。这意味着 TCP 不会保留消息边界,它只是负责将字节流从发送端传输到接收端。不会保留发送数据时的任何消息边界。发送方发送的数据可能被 TCP 分割成多个段,也可能将多个消息合并成一个段发送。接收方需要根据应用层协议来识别和重组消息。

TCP格式:

源端口号和目的端口号:与源ip地址和目的ip地址构成四元组

序列号:TCP协议中用于确保数据传输有序性的一种机制。在建立连接时,由计算机生成一个随机数作为初始序列号,并通过SYN包发送给接收端主机。每发送一次数据,序列号就会累加这次发送的数据字节数的大小。

确认应答号:TCP协议中用于确保数据传输可靠性的一种机制,主要作用是解决丢包问题。它指的是接收端期望下一次收到的数据的序列号。当发送端收到接收端发来的确认应答后,可以认为所有在这个序号以前的数据都已经被接收端正常接收。

ACK:除了最初建立连接的SYN包以外,都要设置成1,

RST:当RST位设置为1时,表示TCP连接中出现异常,需要强制断开连接。

SYN:该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。

FIN: 当FIN位设置为1时,表示发送端已经完成数据发送,希望断开当前的TCP连接。通信双方在结束数据传输后,可以通过交换FIN位为1的TCP段来关闭连接。FIN位用于优雅地结束一个TCP会话。

首部长度:因为选项是可变长,所以要记录首部长度。udp首部长度固定8个字节,无需记录。

为什么要有tcp?

IP层是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。TCP保证网络数据包可靠性。

因为 TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。

连接:用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗口大小称为连接。

一个 IP 的服务端监听了一个端口,它的 TCP 的最大连接数是多少?

对于服务端来说,目的 IP 地址是固定的(即服务端的 IP 地址),目的端口号也是固定的(即服务端监听的端口)。因此,变量是源 IP 地址和源端口号。

对于 IPv4,一个 IP 地址由 32 位组成,因此可能的 IP 地址总数是 2^32。

一个端口号由 16 位组成,因此可能的端口号总数是 2^16

最大 TCP 连接数 = 2^32×2^16=2^48

文件描述符限制

每个TCP连接在Linux系统中都被视为一个文件,因此受到文件描述符的限制。存在三种级别的限制:

系统级:整个系统可打开的最大文件描述符数量,可以通过查看 /proc/sys/fs/file-max 来获取。

用户级:特定用户可打开的最大文件描述符数量,可以通过查看 /etc/security/limits.conf 来获取。

进程级:单个进程可打开的最大文件描述符数量,可以通过查看 /proc/sys/fs/nr_open 来获取

存限制

操作系统的内存是有限的,如果内存资源耗尽,可能会导致 "Out of Memory"(OOM)错误。每个TCP连接都需要占用一定的内存资源。

简洁的UDP:

UDP(用户数据报协议,User Datagram Protocol)是一种无连接的、简单的传输层协议。头部只有8个字节。

TCP和UDP的区别:

  1. 连接

    • TCP面向连接,需要在数据传输前建立连接。
    • UDP无连接,可以直接发送数据。
  2. 服务对象

    • TCP提供一对一的通信服务。
    • UDP支持多种通信模式,包括一对一、一对多、多对多。
  3. 可靠性

    • TCP提供可靠交付,确保数据无差错、不丢失、不重复、按序到达。
    • UDP尽力交付,但不保证数据的可靠传输。
  4. 拥塞控制和流量控制

    • TCP具有拥塞控制和流量控制机制。
    • UDP没有这些机制,即使网络拥堵也保持发送速率。
  5. 首部开销

    • TCP首部较长,通常至少20字节,可能更长如果包含选项。
    • UDP首部固定8字节,开销较小。
  6. 传输方式

    • TCP是流式传输,无边界,保证数据顺序和可靠性。
    • UDP基于数据报文传输,有边界,可能会丢包和乱序。
  7. 分片

    • TCP在数据大于MSS时在传输层进行分片,接收端在传输层组装。
    • UDP在数据大于MTU时在IP层进行分片,接收端在IP层组装后传给传输层。

TCP和UDP的应用场景:

数据长度大小:

TCP数据长度=IP总长度-IP首部长度-TCP首部长度

TCP和UDP可以共用端口号吗?

           在数据链路层中,通过 MAC地址来寻找局域网中的主机。在网际层中,通过IP 地址来寻找网络中互连的主机或路由器。在传输层中,需要通过端口进行寻址,来识别同一计算机中同时通信的不同应用程序。
所以,传输层的「端口号」的作用,是为了区分同一个主机上不同应用程序的数据包。
传输层有两个传输协议分别是 TCP 和 UDP,在内核中是两个完全独立的软件模块。
当主机收到数据包后,可以在 IP 包头的「协议号」字段知道该数据包是 TCP/UDP,所以可以根据这个信息确定送给哪个模块(TCP/UDP)处理,送给 TCP/UDP 模块的报文根据「端口号」确定送给哪个应用程序处理。

  • TCP

    适用于需要可靠数据传输的应用,如:远程登录(SSH/Telnet),邮件传输(SMTP),文件传输(FTP),Web浏览(HTTP)
  • UDP

    适用于对实时性要求高的应用,如:某些类型的网络监控工具,DNS查询,在线游戏,实时视频和音频传输(流媒体)

相关文章:

TCP/UDP初识

TCP是面向连接的、可靠的、基于字节流的传输层协议。 面向连接:一定是一对一连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端…...

【大数据】在线分析、近线分析与离线分析

文章目录 1. 在线分析(Online Analytics)定义特点应用场景技术栈 2. 近线分析(Nearline Analytics)定义特点应用场景技术栈 3. 离线分析(Offline Analytics)定义特点应用场景技术栈 总结 在线分析&#xff…...

【unity进阶知识9】序列化字典,场景,vector,color,Quaternion

文章目录 前言一、可序列化字典类普通字典简单的使用可序列化字典简单的使用 二、序列化场景三、序列化vector四、序列化color五、序列化旋转Quaternion完结 前言 自定义序列化的主要原因: 可读性:使数据结构更清晰,便于理解和维护。优化 I…...

传奇GOM引擎架设好进游戏后提示请关闭非法外挂,重新登录,如何处理?

今天在架设一个GOM引擎的版本时,进游戏之后刚开始是弹出一个对话框,提示请关闭非法外挂,重新登录,我用的是绿盟登陆器,同时用的也是绿盟插件,刚开始我以为是绿盟登录器的问题,于是就换成原版gom…...

OpenCV视频I/O(15)视频写入类VideoWriter之标识视频编解码器函数fourcc()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将 4 个字符拼接成一个 FourCC 代码。 在 OpenCV 中,fourcc() 函数用于生成 FourCC 代码,这是一种用于标识视频编解码器的…...

rust log选型

考察了最火的tracing。但是该模块不支持compact,仅支持根据时间进行rotate。 daily Creates a daily-rotating file appender. hourly Creates an hourly-rotating file appender. minutely Creates a minutely-rotating file appender. This will rotate the log…...

数据库-分库分表

什么是分库分表 分库分表是一种数据库优化策略。 目的:为了解决由于单一的库表数据量过大而导致数据库性能降低的问题 分库:将原来独立的数据库拆分成若干数据库组成 分表:将原来的大表(存储近千万数据的表)拆分成若干个小表 什么时候考虑分…...

基于SSM的校园社团管理系统的设计 社团信息管理 智慧社团管理社团预约系统 社团活动管理 社团人员管理 在线社团管理社团资源管理(源码+定制+文档)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

【SVN】一文读懂Subversion(SVN)

SVN 一、SVN简介1. 概念1.1 repository(源代码库)1.2 Checkout(提取)1.3 Commit(提交)1.4 Update (更新) 2. SVN的主要功能2.1 目录版本控制2.2 真实的版本历史2.3 自动提交2.4 纳入版本控管的元数据2.5 选…...

nginx打包部署前端vue项目全过程【保姆级教程】

🤹‍♀️潜意识起点:个人主页 🎙座右铭:得之坦然,失之淡然。 💎擅长领域:前端 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持…...

From SAM to CAMs

feature map F 不建议复现...

【NLP自然语言处理】01-基础学习路径简介

目的:让大家能够在 AI-NLP 领域由基础到入门具体安排: NLP介绍 文本预处理RNN 及其变体(涉及案例)Transformer 原理详解迁移学习 和 Bert 模型详解 (涉及案例)特点: 原理 实践每个文章会有练习…...

ffmpeg取rtsp流音频数据保存声音为wav文件

本来不是什么难搞的问题,代码写完了,音频流信息中的详细信息,具体代码表现为 format_ctx->streams[audio_stream_index]->codecpar是空指针。 这个查了一圈也没人给出正确答案,实际上是由于我自己编译的ffmpeg时候&#x…...

《数字图像处理基础》学习01-数字图像处理的相关基础知识

这篇文章只是对数字图像处理的相关基础知识有个大概的了解,之后的文章会接着补充和扩展。 目录 一,图像的基本概念 1,图像 2,图像的分类 1)物理图像 2)虚拟图像 二,数字图像处理 三&…...

C#-泛型学习笔记

C#泛型——约束|协变|逆变 1、泛型使用 在生命时可以使用<>&#xff0c;可以写一个标识符代替一些数据类型&#xff0c;在声明时给出明确定义。 非常强大&#xff0c;因此需要约束。 2、泛型约束 where T: struct//值类型约束&#xff0c;要求泛型必须为基本数据类型…...

Java第二阶段---11封装---第四节 static 修饰符

1.static 修饰符应用范围 static修饰符只能用来修饰类中定义的成员变量、成员方法、代码块以及内部类(内部类有专门章节进行讲解)。 2.static 修饰成员变量 static 修饰的成员变量称之为类变量。属于该类所有成员共享。 示例 package cn.lyxq.test04;public class Chinese…...

【C/C++】错题记录(五)

题目一 题目二 在 16 位机器上&#xff0c;通常以 2 字节为边界对齐。 首先看 char a&#xff0c;它占用 1 个字节。接着是 int b&#xff0c;占用 2 个字节。由于要满足边界对齐&#xff0c;在 char a后面会填充 1 个字节&#xff0c;使得 int b从 2 字节边界开始存储。最后是…...

关系数据库标准语言SQL(11,12)

目录 带有EXISTS谓词的子查询 exists谓词 例子 not exists谓词 例子 不同形式的查询间的替换 用EXISTS/NOT EXISTS实现全称量词 用EXISTS/NOT EXISTS:实现逻辑蕴涵 集合查询 并操作UNION 交操作INTERSECT 差操作EXCEPT 基于派生表的查询 select语句的基本格式 带有…...

Oracle 11g RAC 节点异常重启问题分析

一、背景 在国庆期间巡检的时候&#xff0c;发现数据库alert日志中出现了异常重启的信息&#xff0c;当即对该报错进行分析处理。 二、处理过程 &#xff08;1&#xff09;数据库告警日志分析 node1 alert&#xff1a; Sat Oct 05 13:05:14 2024 Thread 1 advanced to log …...

vscode 中显示 pnpm : 无法加载文件 C:\Users\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本

vscode中运行pnpm报错 pnpm : 无法加载文件 C:\Users\AppData\Roaming\npm\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本 解决办法如下 1、用 get-ExecutionPolicy 命令在vscode终端查询状态 如果返回的是 Restricted &#xff0c;则说明是禁止的 2、用 set-ExecutionPolic…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...