【Linux网络编程】传输层中的TCP和UDP(UDP篇)

news2025/1/23 4:38:09

【Linux网络编程】传输层中的TCP和UDP(UDP篇)

目录

  • 【Linux网络编程】传输层中的TCP和UDP(UDP篇)
    • 传输层
      • 再谈端口
      • 端口号范围划分
      • 认识知名端口号
      • netstat
      • iostat
      • pidof
      • xargs
    • UDP协议
      • UDP协议端格式
      • UDP的特点
      • 面向数据报
      • UDP的缓冲数据
      • UDP使用注意事项
      • 基于UDP的应用层协议

作者:爱写代码的刚子

时间:2024.5.11

前言:本篇博客将会深入介绍UDP,了解UDP的机制

传输层

负责数据能够从发送端传输接收端

再谈端口

端口号(Port)标识了一个主机上进行通信的不同的应用程序;

在这里插入图片描述

在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过 netstat -n查看);

在这里插入图片描述

在这里插入图片描述

端口号范围划分

  • 0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的.

  • 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的.

认识知名端口号

  • ssh服务器, 使用22端口
  • ftp服务器, 使用21端口
  • telnet服务器, 使用23端口
  • http服务器, 使用80端口
  • https服务器,使用443

执行下面的命令可以看见一些知名端口号

  • vim /etc/services查看所有端口号

在这里插入图片描述

所以我们自己写一个程序使用端口号时,要避开这些知名端口号

【问题】:1. 一个进程是否可以bind多个端口号? 2. 一个端口号是否可以被多个进程bind?

  1. 一个进程通常只能绑定一个端口号。端口号是用来标识网络通信中的特定应用程序或服务的,因此一个进程通常只需要一个端口来监听来自其他进程的连接请求或发送数据。但是,在某些情况下,一个进程可能会使用多个端口来处理不同类型的通信,比如一个Web服务器可能同时监听HTTP(端口80)和HTTPS(端口443)连接。
  2. 一般情况下,一个端口号只能被一个进程绑定。这是因为端口号是唯一的,用于标识不同的网络服务或应用程序。 如果多个进程都试图绑定到同一个端口号,通常会导致端口冲突,其中只有一个进程能够成功绑定,而其他进程可能会收到绑定失败的错误。

netstat

netstat是一个用来查看网络状态的重要工具

语法:netstat [选项]

功能:查看网络状态

常用选项:

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

在这里插入图片描述

  • sudo netstat -nltp完整显示进程名(不隐藏)

在这里插入图片描述

iostat

在这里插入图片描述

iostat 是一个系统性能监控工具,用于报告CPU利用率和设备(磁盘、终端、网络等)的使用情况。它能够提供关于系统I/O活动的详细信息,包括每个磁盘的读写速率、平均响应时间、CPU利用率等。

iostat          # 显示所有设备的统计信息
iostat -d       # 显示磁盘的统计信息
iostat -x       # 显示扩展信息,包括每个设备的更详细的统计数据
iostat -t       # 显示时间戳
iostat -c       # 显示CPU利用率

pidof

在查看服务器的进程id时非常方便.

语法:pidof [进程名]

功能:通过进程名, 查看进程id

  • pidof httpd根据 httpd 这个进程名拿到所有的pid,每个数字代表一个正在运行的 httpd 进程的进程 ID

在这里插入图片描述

xargs

在这里插入图片描述

使用管道时是以标准输入的方式交给kill命令,我们如果想以命令行参数的形式交给kill的话就需要借助xargs命令了

在这里插入图片描述

UDP协议

网络套接字编程时用到的各种接口,是位于应用层和传输层之间的一层系统调用接口,这些接口是系统提供的,我们可以通过这些接口搭建上层应用,比如HTTP。我们经常说HTTP是基于TCP的,实际就是因为HTTP在TCP套接字编程上搭建的。
而socket接口往下的传输层实际就是由操作系统管理的,因此UDP是属于内核当中的,是操作系统本身协议栈自带的,其代码不是由上层用户编写的,UDP的所有功能都是由操作系统完成,因此网络也是操作系统的一部分。

UDP协议端格式

在这里插入图片描述

【问题】:UDP如何将报头和有效载荷进行分离?采用定长报头

【问题】:收到了报文但是如何知道交给上层的哪一个协议?

根据16位(内核和协议确定的)的目的端口号,交给对应的进程。(通过端口号来标定目标进程)

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

UDP的特点

UDP传输的过程类似于寄信

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

面向数据报

应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并;

用UDP传输100个字节的数据:

  • 如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节;而不能循环调用10次recvfrom,每次接收10个字节;

UDP的缓冲数据

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

全双工的概念:UDP的socket既能读,也能写(之前的多线程版的聊天室既能读也能写说明是全双工的)

UDP使用注意事项

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

协议本质是约定,Linux操作系统是用C语言写的,UDP报头其实是自定义结构体(位段),是类型就可以定义变量,开辟空间。操作系统也要对多个同时存在的UDP报文进行管理(sk_buff结构体来管理)。

struct udp_header {
	uint32_t	src_port:16;	//源端口
	uint32_t	dst_port:16;	//目的端口
	uint32_t	length:16;	//数据包长度
	uint32_t	check_code:16;	//校验和
};
struct sk_buff
{
  char *start;
  char *end;
  char *pos;
  int type;
  //...
  struct sk_buff *next;
};

在这里插入图片描述

操作系统中也存在大量的sk_buff,操作系统采用链表的形式来管理sk_buff

基于UDP的应用层协议

  • NFS: 网络文件系统

  • TFTP: 简单文件传输协议

  • DHCP: 动态主机配置协议

  • BOOTP: 启动协议(用于无盘设备启动)

  • DNS:域名解析协议

也包括自己写的UDP程序时自定义的应用层协议

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

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

相关文章

软考笔记随记

原码:(0正1负) 原码是最直观的编码方式,符号位用0表示正数,用1表示负数,其余位表示数值的大小。 例如,+7的原码为00000111,-7的原码为10000111。 原码虽然直观,但直接用于加减运算会导致计算复杂,且0有两种表示(+0和-0),不唯一。 反码: 反码是在原码的基础上得…

PhpStorm 激活

1、更改Hosts文件 Mac文件位置:/etc/host Windows文件位置:C:\Windows\System32\drivers\etc 将 0.0.0.0 www.jetbrains.com 添加到hosts文件末尾。 2、左下角Proxy settings 添加本地80端口代理 附一个激活码 UX394X3HLT-eyJsaWNlbnNlSWQiOiJVWDM…

探索乡村振兴的绿色发展路径:坚持生态优先,推动农业绿色化、循环化、低碳化,构建美丽乡村生态屏障

目录 一、引言 二、乡村振兴与绿色发展的关系 (一)乡村振兴的内涵 (二)绿色发展的重要性 三、推动农业绿色化、循环化、低碳化的具体路径 (一)农业绿色化 (二)农业循环化 &a…

3D Tiles资源大全

本文汇总整理3D Tiles相关的各种资源,包括查看器、生成器、示例数据集、教程、演示等。 1、3D Tiles特色演示 注意:这些演示是基于 CesiumJS 1.87.1 Release 发布的,其中包括对 3D Tiles Next 扩展的实验性支持。这些演示中显示的大多数功能现…

还在花钱订购SSL证书吗?out啦!

SSL(Secure Sockets Layer)证书,以及其后续版本TLS(Transport Layer Security)证书,扮演了保护用户数据免遭窃听和篡改的核心角色。这些证书能够确保数据在客户端与服务器之间传输时的加密性与完整性&#…

新质生产力之工业互联网产业链

随着全球经济的数字化转型,新基建的概念逐渐成为推动工业发展的关键动力。在这一转型过程中,工业互联网作为新基建的核心组成部分,正逐渐塑造着未来工业的面貌。那么工业互联网产业链是如何构成的,以及它如何成为推动工业4.0和智能…

回收站删除的照片怎么恢复?7个实用方法为你找回照片!

“我刚刚在对电脑上的照片进行清理,不小心错删了一张还需要的照片,但是在使用回收站时,将它删除了,有什么恢复回收站照片的简单方法吗?” 照片是我们生活点滴的见证,无论是外出旅游还是日常琐碎&#xff0c…

Android中使用Palette让你的页面UI优雅起来

文章目录 1. 什么是Palette2. 引入Palette3. 使用 Palette3.1 同步方式3.2 异步方式3.3 获取色调值 4. 举例4.1 布局文件 activity_palette_list.xml ⬇️4.2 Activity:PaletteListActivity⬇️4.3 列表Adapter:PaletteListAdapter ⬇️4.4 列表item布局…

Pure Nature 2 : Meadows

3D风格化自然环境资产 一切都是预制的,随时可以放在场景中。 URP版本已包含! 此包包含: 植被 -Birchs -橡树 -Elms -柳树 -布什 -草地 草、苜蓿、蕨类植物、灌木、各种… -鲜花 小麦、浆果、胡萝卜、雏菊、金雀花、薰衣草、羽扇豆、大麦、各种… -蘑菇 岩石 悬崖 -巨石 - 岩…

linux 查看java线程与linux线程关系

linux 查看占用cpu高的 java 线程 linux 排查cpu占用100%故障 ##java程序 import java.util.Scanner; public class JavaThreadIDName {public static void main(String[] args) {Thread t Thread.currentThread();t.setName("laoyoutiao");System.out.println(&…

环保科普馆如何互动化加深观众环保认知?

如今,多媒体技术的广泛应用,已经为环保、天文、生物等各类主题展厅注入了新的活力,在这些展馆中,它凭借独特的互动体验,以及深入浅出的教育方式,赢得了广大观众的热烈追捧。今天,我们就一同探讨…

绘唐2跟绘唐3有什么区别

绘唐2跟绘唐3有什么区别 这款产品的最大亮点在于其高度精准的语音克隆能力,利用先进的模型,能够捕捉到用户独特的音调、音高和调制方式,使用户能够以前所未有的方式复制和利用自己的声音。仅需10秒钟的录制时间,即可实现声音的克…

spring-boot-starter-mail 定义邮件工具类EmailHelper

注意 想把这个工具类定义成工具类,所以所有的方法都是静态方法,使用的变量处理参数理所当然都是静态变量期初使用的是Autowired 和 Value进行注解,但是这两个注解是依赖于实例,静态方法是不依赖实例的,所以 from 在发送…

24年5月GPT-4o使用教程,一看就会(低配贾维斯?)

一、 GPT-4o 5月13日,GPT-4o发布,听说是低配钢铁侠的贾维斯?赶紧看一下~ 二、什么是GPT-4o GPT-4o(“o”代表“omni”)是迈向更自然的人机交互的一步——它接受文本、音频、图像和视频的任意组合作为输入&#xff0…

Microsoft Dataverse中的安全概念

Dataverse的一个关键特性是其丰富的安全模型,可以适应许多业务使用场景。只有当环境中存在Dataverse数据库时,此安全模型才会发挥作用。作为管理员,您可能不会自己构建整个安全模型,但通常会参与管理用户、确保他们拥有正确的配置…

OpenAI 最近发布的 GPT-4o 模型,作为其自然语言处理技术的最新突破,标志着人工智能领域的一个新纪元。

2024年5月14日,OpenAI推出了其最新的旗舰模型——**GPT-4o**。不同于传统的AI搜索引擎或预期中的GPT-5,GPT-4o在功能上取得了重大突破,将文本、视觉和音频理解融合在一个模型中。让我们深入了解这一革命性的AI。 “o”代表什么? …

案例实践 | 招商局集团基于长安链的双循环航运贸易应用

案例名称-招商局双循环航运贸易联盟链 ■ 建设单位 招商局集团 ■ 用户群体 货主企业、物流企业、基础设施运营商等各参与主体 ■ 应用成效 已赋能产业链上下游超1.2万家中小微企业,累计提供普惠金融超830亿元 案例背景 作为全球贸易大国,我国约…

使用numpy或pytorch校验两个张量是否相等

文章目录 1、numpy2、pytorch 做算法过程中,如果涉及到模型落地,那必然会将原始的深度学习的框架训练好的模型转换成目标硬件模型的格式,如onnx,tensorrt,openvino,tflite;那么就有对比不同格式模型输出的一致性,从而判断模型转换…

【LeetCode:23. 合并 K 个升序链表 + 链表 + 归并 + 递归】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Linux上编译安装和卸载软件

在maven官网下载maven时候,看到maven-3.9.5这个版本有2份安装包,一个是binaries,一个是source binaries是已编译好的文件,可以直接使用的版本;source是源代码版本,需要自己编译 源码的安装一般由这三个步…