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

ops/2024/12/15 14:10:49/

📝个人主页🌹:Eternity._
⏩收录专栏⏪:Linux “ 登神长阶 ”
🌹🌹期待您的关注 🌹🌹

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

❀ 传输层UDP/TCP协议

  • 📒端口号
  • 📜UDP协议
    • UDP协议端格式
    • UDP的特点
    • UDP的缓冲区
  • 📝TCP协议
    • TCP协议段格式
    • 确认应答和TCP发送数据的模式
  • 📖总结

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

UDP协议以其简单、高效的特点,在网络通信中发挥着不可替代的作用。它无需建立连接,直接发送数据包,这种“尽最大努力交付”的传输方式,使得UDP在实时性要求较高的应用场景中表现出色。例如,视频直播、在线游戏等领域,UDP都扮演着重要的角色。

TCP协议以其可靠、有序的数据传输特性,赢得了广泛的认可和应用。它通过建立连接、确认数据到达、重传丢失数据等一系列机制,确保了数据的完整性和顺序性。这使得TCP在需要高可靠性数据传输的场景中,如文件传输、网页浏览等,成为首选的协议。

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

📒端口号


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

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

在这里插入图片描述
端口号范围划分:

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

知名端口号:

  • ssh服务器:22端口
  • ftp服务器:21端口
  • telnet服务器:23端口
  • http服务器:80端口
  • https服务器:443端口
cat /etc/services // 查看知名端口号

注意:

  • 一个进程可以bind多个端口号
  • 一个端口号只能被一个进程bind

netstat:

  • netstat是一个用来查看网络状态的重要工具
  • 语法: netstat [选项]
  • 功能: 查看网络状态
  • 常用选项:

n: 拒绝显示别名,能显示数字的全部转化成数字
l: 仅列出有在 Listen (监听) 的服務状态
p: 显示建立相关链接的程序名
t: (tcp)仅显示tcp相关选项
u: (udp)仅显示udp相关选项
a: (all)显示所有选项,默认不显示LISTEN相关

在这里插入图片描述

pidof:

  • 在查看服务器的进程id时非常方便.
  • 语法: pidof [进程名]
  • 功能: 通过进程名, 查看进程id

在这里插入图片描述

📜UDP协议


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

UDP协议端格式


在这里插入图片描述

  • 16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度
  • 如果校验和出错, 就会直接丢弃

UDP报头是固定的8字节,我们直接提取前8字节的数据,解析16位UDP长度,然后截断得到报文数据

UDP的特点


UDP传输的过程类似于寄信

  • 无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接
  • 不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息
  • 面向数据报: 不能够灵活的控制读写数据的次数和数量

面向数据报:

  • 应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并
  • 如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节; 而不能循环调用10次recvfrom, 每次接收10个字节

UDP的缓冲区


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

UDP报头结构体:

struct udp_hdr
{uint32_t src_port:16;uint32_t dst_port:16;uint32_t udp_len:16;uint32_t udp_check:16;
}·

在这里插入图片描述

UDP的socket既能读, 也能写, 这个概念叫做 全双工

UDP使用注意事项:

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

📝TCP协议


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

我们在使用TCP协议时,只需要考虑两个问题:

  • 报头和有效载荷之间分离的问题
  • 有效载荷向上交付的问题

TCP协议段格式


在这里插入图片描述
4位首部长度:

TCP协议段格式与UDP协议段格式相比来看是稍微复杂些的,TCP的报头并没有像UDP那样有固定的长度,出去选项报头的定长是20字节,报头的真实大小需要通过4位首部长度来确定,而首部长度只有4位,但它的取值绝对不是0000->1111(0->15),必然是要乘上它的单位,不然长度远远不够,其实 首部长度的单位是:4字节 它的真实长度也就是[0->60],所以选项最多是40个字节!

16位窗口大小:

我们在发送和接收数据时,接收缓冲区是有大小限制,如果超出限制将会被直接丢弃。所以我们要进行流量控制。所谓流量控制就是发送方要知道接收方的接受能力,而我们的16位窗口大小就是用来流量控制的字段,里面填的就是剩余空间的大小

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


确认应答:

为了更好地理解TCP确认应答机制的工作原理,我们先来看一个简单的例子:

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

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

TCP发送数据的模式:

在这里插入图片描述

32位序号:

接收方报头会根据此序号进行排序,因为乱序是不可靠的发送方式

32位确认序号:

历史上自己发送的哪些报头被对方接收了

在这里插入图片描述

我们一般在确认报文时,都会顺带给出回应,既是数据又是应答,所以我们需要对序号和确认序号同时使用,所以这两个必须是分开的值。

6位标志位:

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

URG:紧急指针是否有效

在这里插入图片描述
16位紧急指针:

紧急数据在有效载荷中的偏移量

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

在这里插入图片描述

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

在这里插入图片描述
缓冲区:

在这里插入图片描述

📖总结


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

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

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

在这里插入图片描述

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

在这里插入图片描述


http://www.ppmy.cn/ops/142126.html

相关文章

【知识科普】工作流引擎activiti详细介绍

工作流引擎activiti 概述一、概述二、主要特点三、核心组件四、应用场景五、数据库表结构六、搭建与使用七、优势与局限性 核心组件介绍一、Activiti Engine(流程引擎)二、建模组件三、管理组件四、其他核心组件 如何实现审批流流转一、准备工作二、定义…

.NET(C#) 如何配置用户首选项及保存用户设置

最近开发软件,需要将用户设置保存下来以便下次打开后再用,看了半天原来.NET框架自带setting功能。记录如下: 一,“设置” 页面 使用项目设计器的“设置”页指定项目的应用程序设置。 通过应用程序设置,能够为应用程序…

初次使用uniapp编译到微信小程序编辑器页面空白,真机预览有内容

uniapp微信小程序页面结构 首页页面代码 微信小程序模拟器 模拟器页面为空白时查了下,有几个说是“Hbuilder编译的时候应该编译出来一个app.js文件 但是却编译出了App.js”,但是我的小程序结构没问题,并且真机预览没有问题 真机调试 根据defi…

axios请求拦截器和响应拦截器,封装naive-ui的 Loading Bar加载条和useMessage消息提示

接之前的博客设计从0开始边做边学,用vue和python做一个博客,非规范化项目,怎么简单怎么弄,跑的起来有啥毛病解决啥毛病(三),目前已经完成了基本的功能demo,但是请求接口不可能每个页…

微服务-01

1.认识微服务 1.1 单体架构 单体架构(monolithic structure):顾名思义,整个项目中所有功能模块都在一个工程中开发;项目部署时需要对所有模块一起编译、打包;项目的架构设计、开发模式都非常简单。 当项目…

skywalking实现链路追踪-笔记

本文属于b站图灵课堂springcloud笔记系列。讲的好还不要钱,值得推荐。 为什么采用链路追踪? 为了排查问题,从请求源头到底层服务的全链路环节进行追踪。 skywalking 是什么? 分布式系统的应用程序性能监视工具,专为…

金融机构远程办公面临的安全挑战

当前,金融机构的业务模式、IT架构都发生了深刻变化。在建设远程办公系统时,金融机构需要面对以下几个方面的挑战: 如何实现“边界模糊化”网络环境下的安全接入? 随着金融机构基础设施云化、业务互联网化和办公移动化&#xff0…

上传文件时获取音视频文件时长和文本文件字数

获取音视频文件时长和文本文件字数 一、获取音视频文件时长二、计算文本文件字数 最近有个需求,要求上传文件时获取音视频文件时长和文本文件字数🐶。 发现这样的冷门资料不多,特做个记录。本文忽略文件上传功能,只封装核心的工具…