0

0

【Linux网络】网络基础:传输层UDP/TCP协议(一)

看不見的法師

看不見的法師

发布时间:2025-06-19 16:52:11

|

1056人浏览过

|

来源于php中文网

原创

前言:传输层协议,特别是用户数据报协议(udp)和传输控制协议(tcp),是网络通信中最为基础也最为重要的部分。它们不仅决定了数据的传输方式,还影响着数据的可靠性、顺序性和实时性。对于想要深入了解互联网运行机制、掌握网络通信技术的朋友们来说,学习udp/tcp协议无疑是必经之路。

本问旨在帮助广大读者深入了解UDP/TCP协议的原理和应用。我们将从协议的基本概念入手,逐步深入协议的内部机制,解析协议的报文结构。

?端口号

在之前的学习中,我们简单的了解了一下端口号,这次让我们来重新对端口号有个新的认识。

【Linux网络】网络基础:传输层UDP/TCP协议(一)

在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信

【Linux网络】网络基础:传输层UDP/TCP协议(一)

端口号范围划分:

0 - 1023:知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的1024 - 65535操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的

知名端口号:

ssh服务器:22端口ftp服务器:21端口telnet服务器:23端口http服务器:80端口https服务器:443端口代码语言:javascript代码运行次数:0运行复制
<code class="javascript">cat /etc/services // 查看知名端口号</code>
一个进程可以bind多个端口号一个端口号只能被一个进程bind

netstat:

netstat是一个用来查看网络状态的重要工具语法: netstat [选项]功能: 查看网络状态常用选项:
【Linux网络】网络基础:传输层UDP/TCP协议(一)

pidof:

在查看服务器的进程id时非常方便.语法: pidof [进程名]功能: 通过进程名, 查看进程id
【Linux网络】网络基础:传输层UDP/TCP协议(一)
?UDP协议

UDP(User Datagram Protocol,用户数据报协议)是一种面向无连接的传输层协议,它是TCP/IP协议簇的一部分。

UDP协议端格式

【Linux网络】网络基础:传输层UDP/TCP协议(一)
16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度如果校验和出错, 就会直接丢弃UDP的特点

UDP传输的过程类似于寄信

无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息面向数据报: 不能够灵活的控制读写数据的次数和数量应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节; 而不能循环调用10次recvfrom, 每次接收10个字节UDP的缓冲区

UDP没有真正意义上的 发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃

UDP报头结构体:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">struct udp_hdr{uint32_t src_port:16;uint32_t dst_port:16;uint32_t udp_len:16;uint32_t udp_check:16;}·</code>
【Linux网络】网络基础:传输层UDP/TCP协议(一)

UDP使用注意事项:

UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部),然而64K在当今的互联网环境下, 64K是一个非常小的数字。如果我们需要传输的数据超过64K , 分包, 多次发送并在接收端手动拼装?TCP协议

TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。

报头和有效载荷之间分离的问题有效载荷向上交付的问题TCP协议段格式

【Linux网络】网络基础:传输层UDP/TCP协议(一)

4位首部长度:

16位窗口大小:

确认应答和TCP发送数据的模式

确认应答:

靠岸学术
靠岸学术

一款集翻译,阅读,文献管理于一体的英文文献阅读器

下载
假设你在邮寄一个包裹给朋友小明小明收到包裹后,给你打电话确认:“我收到了你的包裹!”你知道小明收到了包裹,你就不再担心是否丢失。如果你没有收到小明的确认电话,你会重新寄一次包裹,确保包裹能送到他手中

只有对方回应了你的话,你才能确认对方一定接收到了你的信息

TCP发送数据的模式:

【Linux网络】网络基础:传输层UDP/TCP协议(一)

32位序号:

32位确认序号:

【Linux网络】网络基础:传输层UDP/TCP协议(一)

6位标志位:

URG: 紧急指针是否有效ACK: 确认号是否有效PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段FIN: 通知对方, 本端要关闭了 我们称携带FIN标识的为结束报文段

URG:紧急指针是否有效

【Linux网络】网络基础:传输层UDP/TCP协议(一)

16位紧急指针:

PSH:尽快进行数据的向上交付

【Linux网络】网络基础:传输层UDP/TCP协议(一)

RST:对方要求重新建立连接

【Linux网络】网络基础:传输层UDP/TCP协议(一)

缓冲区:

【Linux网络】网络基础:传输层UDP/TCP协议(一)
?总结

在探索传输层UDP(用户数据报协议)与TCP(传输控制协议)协议段格式的旅程即将告一段落之际,我们不禁对这两个协议在现代网络通信中所扮演的基石角色有了更深的理解与敬畏。

UDP以其无连接、快速传输和最小开销的特点,成为对实时性要求高、能容忍一定数据丢失的应用场景的首选。而TCP,则凭借其面向连接、可靠传输、流量控制和错误检测与纠正的机制,构建了互联网通信的坚固基石,确保了数据在复杂多变的网络环境中准确无误地送达。

让我们带着这份收获,继续在技术的海洋中遨游,不断探索未知,用我们的智慧与热情,为构建更加高效、安全、可靠的互联网世界贡献力量。在传输层协议的引领下,让我们携手前行,共创网络技术的辉煌未来。

希望本文能够为你提供有益的参考和启示,让我们一起在编程的道路上不断前行! 谢谢大家支持本篇到这里就结束了,祝大家天天开心!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

490

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

202

2025.07.04

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

496

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

452

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

3598

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2917

2024.08.16

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2917

2024.08.16

tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

126

2023.07.25

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.6万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号