详细介绍:【学习笔记】TCP 与 UDP

news/2025/10/7 14:51:18/文章来源:https://www.cnblogs.com/slgkaifa/p/19128500

详细介绍:【学习笔记】TCP 与 UDP

        TCP(Transmission Control Protocol)与UDP(User Datagram Protocol)是 网络通讯 中最基础也最常用的两种 传输层 协议。


1. 简介

        TCP 是1974年由早期的NCP(Network Control Protocol)逐渐演化出来的概念。它在1980年被拆分成了现在常见的TCP与IP协议,形成经典的 TCP/IP 协议簇。后来,UDP 在 RFC 768(互联网工程任务协会,Internet Engineering Task Force, IETF,发布的一个标准文件)中发布,用于减少延迟、适应简单的请求或应答环境,如DNS(域名系统)。
        90年代后,TCP 持续优化拥塞控制算法(如Tahoe、Reno、CUBIC),在万兆与云计算场景中处于核心地位。而UDP则在实时音视频、VoIP(基于IP的语音传输,一种语音通话技术)、在线游戏等领域被广泛使用。

2. OSI 与 TCP/IP 模型中的定位

在这里插入图片描述
TCP/IP模型将传统的OSI理论模型简化为4层结构,传输层分为TCP/UDP两种机制。

3. 协议原理与关键机制

3.1 UDP

在这里插入图片描述
【注】

  • 源/目的端口: 标识进程级别的通信端点
  • 长度: 头部与数据总长度,最小8字节
  • 校验和: 包含伪首部,检验UDP头与数据的完整性

【机制】

  • 无握手: 发送即完成,无三次握手
  • 无重传: 丢包不重发、无拥塞控制,由上层应用决定策略。
  • 场景: 实时音视频、DNS查询等。实时性要求高,应用自有可靠机制或可忽略丢包。
3.2 TCP

在这里插入图片描述

【注】

【机制】

4 . 实践:Socket 接口示例

下面以编程语言示例基础的TCP和UDP的服务端与客户端。

C语言
// UDP 客户端示例:初始化并发送
int sock = socket(AF_INET, SOCK_DGRAM, 0
)
;
struct sockaddr_in serv;
memset(&serv, 0
,
sizeof(serv)
)
;
serv.sin_family = AF_INET;
serv.sin_port = htons(9000
)
;
serv.sin_addr.s_addr = inet_addr("127.0.0.1"
)
;
char *msg = "Hello UDP"
;
sendto(sock, msg, strlen(msg)
, 0
, (
struct sockaddr*
)&serv,
sizeof(serv)
)
;
// TCP 服务器示例:接受连接并回复
int sock = socket(AF_INET, SOCK_STREAM, 0
)
;
bind(sock, (
struct sockaddr*
)&serv,
sizeof(serv)
)
;
listen(sock, 5
)
;
int conn = accept(sock, NULL
, NULL
)
;
char buf[1024]
;
int len = recv(conn, buf,
sizeof(buf)
, 0
)
;
send(conn, "Hello TCP"
, 9
, 0
)
;
close(conn)
;
Go语言
// UDP Echo 服务器
addr, _ := net.ResolveUDPAddr("udp"
, ":9000"
)
conn, _ := net.ListenUDP("udp"
, addr)
buf := make([]byte
, 1024
)
for {
n, remote, _ := conn.ReadFromUDP(buf)
conn.WriteToUDP(buf[:n]
, remote)
}
// TCP 客户端
conn, _ := net.Dial("tcp"
, "localhost:8000"
)
fmt.Fprintln(conn, "Hello TCP"
)
response, _ := bufio.NewReader(conn).ReadString('\n'
)
fmt.Println("Server replied:"
, response)
Python语言
# UDP 客户端
import socket
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp.sendto(b"Ping"
, ("localhost"
, 9000
)
)
msg, _ = udp.recvfrom(1024
)
print(msg)
# TCP 服务器
import socket
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srv.bind(("0.0.0.0"
, 8000
)
)
srv.listen(1
)
conn, addr = srv.accept(
)
data = conn.recv(1024
)
conn.sendall(b"Hello TCP"
)
conn.close(
)

5. 调优

  1. TIME_WAIT消耗: 大量短连接会产生大量的TIME_WAIT,建议启动连接复用、长连接或HTTP/2多路复用。
  2. MTU与分片: 超大UDP报文易被分片丢弃,建议应用层自行分片与重组。
  3. Nagle算法: TCP默认启用Nagle,合并小包,可能会增加延迟,需要根据场景选择是否禁用。
  4. 内核缓冲区调整: 高带宽-时延环境下,增大send/recv缓冲区以避免吞吐瓶颈。
  5. 拥塞算法: Linux默认CUBIC,若要更低时延可使用BBR。

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

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

相关文章

国外个人网站域名注册开发公司预案

不要尝试爆破哟!(misc) 下载图片,解析图片 拿到密码,解压压缩包,生成图片 扫描二维码 留个后门(misc) D盾扫描 打开文件寻找 师姐的旅游照片(misc) 随波逐流,然后base64解码 修改后缀为zip,解压 修改高度 Fuck! (C…

中山网站建设文化流程网站登录人太多进不去怎么办

目录 C设计模式-抽象工厂(Abstract Factory) 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-抽象工厂(Abstract Factory) 一、意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们…

一些数数杂题

数数突然发现还是按照算法记录索引方便一点,反正只需要记录想了很久或者不会做的题。 ???

AI元人文:规则与人文的统一之路

AI元人文:规则与人文的统一之路 引言:从二元对立到辩证统一 在智能时代的伦理困境中,规则与人文常常被视为不可调和的二元对立。规则代表着确定性、普遍性和约束,人文则象征着灵活性、特殊性和创造。传统AI伦理试图…

qmd 模拟赛的一道题

。原题用下面的做法可以强制在线 没注意到支配对也是可以做的。 考虑如何求区间 mex,线段树扫描 \(r\),维护 \(lst_i\) 代表 \(i\) 最后一次出现的位置,只需要线段树二分即可。在线就把扫描线变成主席树。 回到这个…

详细介绍:Apache Druid

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站app软件下载安装如何做网站推广自己的产品

本文首发于个人博客 深度挖掘 Laravel 生命周期,转载请注明出处。这篇文章我们来聊聊 「Laravel 生命周期」 这个主题。虽然网络上已经有很多关于这个主题的探讨,但这个主题依然值得我们去研究和学习。 我想说的是当我们在决定使用某项技术的时候&#x…

wordpress网站备份还原宁波建站

1. 简介 Powerlevel10k 是 Oh My Zsh 最流行的终端主题,它不仅美观,还提供 Git 状态显示、命令执行时间、网络状态、Python 虚拟环境指示等 实用功能。相比其他主题,Powerlevel10k 速度更快、可定制性更强。 本教程将详细介绍如何安装 Powe…

做网站的问卷调查网站建设越来越便宜

提前准备安装tomcat 设备:mac 第一步:下载 进入官网下载压缩包 注意:如果jdk版本是1.8,则tomcat需要v8才行,否则会报错 https://tomcat.apache.org/ 第二步:解压 解压后路径 /Users/you/Library/tomcat…

阿里云网站建设部署与发布视频自己做的网站如何在百度搜到

6 优先级反转问题在嵌入式系统中是一中严重的问题,必须给与足够重视。 a) 首先请解释优先级反转问题 b) 很多RTOS提供优先级继承策略(Priority inheritance)和优先级天花板策略(Priority ceilings)用来解决优先级反转问题,请讨论这两种策略。 答&#xf…

安徽专业网站建设设计it运维是什么意思

window.Promise 已经是 JS 的一个内置对象了。1. Promise 有规格文档吗?2. 你一般如何使用 Promise。-----------目前的 Promise 都遵循 Promises/A 规范。英文规范:https://promisesaplus.com/中文翻译:图灵社区 : 阅读 : 【翻译】Promises/…

百度网站好评北京本地网络推广平台

PyCharm 显示无法加载文件 D:…,因为在此系统上禁止运行脚本。 PyCharm 显示 无法加载文件 D:\python test\AI_CV\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本。 解决方法: winx点击Windows PowerShell(管理员&#…

织梦手机网站怎么安装教程视频兽装定制网站

目录 1.实例分析 a. 设备树实例 b. 驱动实例 2. amba匹配流程 a. 创建amba_device b. 确定总线以及总线的匹配函数 c. 分析总线的匹配函数 1.实例分析 a. 设备树实例 serial7e201000 { compatible "brcm,bcm2835-pl011\0arm,pl011\0arm,primecell"; //创建am…

开封美食网站建设规划昆明企业做网站

Flexmonster Pivot Table & Charts 2.9.X 是一个专门为实时可视化复杂业务数据而设计的组件。该实用程序是用JavaScript编写的,不需要额外的插件,也不受运行的服务器类型的限制。事实上,它的设计可以轻松地与当今大多数可用的开发框架集成…

PCoT: Persuasion-Augmented Chain of Thought for Detecting Fake News and Social Media Disinformation

论文阅读论文《PCoT》Introduction & Related Work 部分总结 📌 Introduction 部分概括 1. 背景与问题重要性数字通信中的虚假信息传播对民主制度构成重大风险,影响公众舆论、加剧意识形态分歧并破坏对政治机构…

实验1 c语言

#include #include int main() { printf(" o \n"); printf("\n"); printf("I I\n"); printf(" o \n"); printf("\n"); printf("I I\n"); system("p…

宏定义中,为什么使用:do{}while(0)这种模式是最安全的

如果你是一名C程序员,你肯定很熟悉宏,它们非常强大,如果正确使用可以让你的工作事半功倍。然而,如果你在定义宏时很随意没有认真检查,那么它们可能使你发狂,浪费N多时间。在很多的C程序中,你可能会看到许多看起…

20251007J赛合订本

A-鲁的智力(gio) B-鲁的女孩(girl)

XML 元素:基础、应用与优化 - 教程

XML 元素:基础、应用与优化 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

Educational Codeforces Round 183 (Rated for Div. 2) A~D

A - Candies for Nephews 模拟。 看 \(3\) 的余数。点击查看代码 #include <bits/stdc++.h>using namespace std;using i64 = long long;void solve() {int n;std::cin >> n;std::cout << (3 - n % …