首页 > 运维 > linux运维 > 正文

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

看不見的法師
发布: 2025-06-19 16:52:11
原创
968人浏览过

前言:传输层协议,特别是用户数据报协议(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运行复制
cat /etc/services // 查看知名端口号
登录后复制
一个进程可以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运行复制
struct udp_hdr{uint32_t src_port:16;uint32_t dst_port:16;uint32_t udp_len:16;uint32_t udp_check:16;}·
登录后复制
【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,则凭借其面向连接、可靠传输、流量控制和错误检测与纠正的机制,构建了互联网通信的坚固基石,确保了数据在复杂多变的网络环境中准确无误地送达。

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

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

以上就是【Linux网络】网络基础:传输层UDP/TCP协议(一)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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