Linux--传输层--UDP协议--0307
创始人
2025-05-28 21:58:36
0

1. 端口号

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

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

1.1 端口号划分

0-1023:知名端口号,广为使用的应用层协议,他们的端口号都是固定的。

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

1.2 知名端口号

ssh服务器 22号端口

ftp服务器 21号端口

telnet服务器 23号端口

http服务器   80号端口

https服务器  443号端口

1.3 一些命令

netstat

安装:yum -y install net-tools

参数:
-a   显示所有选项,默认不显示LISTEN相关
-t    仅显示tcp相关选项
-u   仅显示upd相关选项
-n    拒绝显示别名,能显示数字的全显示数字
-l     显示监听的服务状态

netstat 的基本使用_netstat的使用_你有些许优秀的博客-CSDN博客


 pidof

查看服务器的进程id

pidof [进程名字]


xargs

将标准输入的内容,转换为命令行参数。

搭配管道使用,因为管道是标准输入,输入内容在命令行使用时需要进行转换。

pidof procname | xargs kill -9

2. UDP协议格式

 先来解决两个问题

一、报头如何分离(封装)?

UDP中报头的长度是固定的,为8字节。报头中华有16位的UDP长度,是整个报文的长度,有效载荷的字节数需要拿这个值减去报头长度,即-8。

正是因为16位的UDP长度,使得每次UDP传输时,都可以确切的知道报文的长度,也就确保我们可以正确的提取整个完整的报文。因此,UDP具有将报文一个一个接收的能力,即UDP是面向数据报的。 

二、如何交付?

报头中有16位的端口号,向上交付的时候,进程可以根据这个端口号进行bind

2.1 理解UDP报文本身

strcut udp_hdr
{uint32_t src_port:16;uint32_t dst_port:16;uint32_t udp_length:16;uint32_t udp_check:16;
}

本质就是一个位段。

当收到一个报文的时候,只需要将起始位置强转为(struct udp_hdr*)start,然后去访问各个成员。

start->src_port; //...

3.UDP缓冲区

先来回答一个问题

sendto/recvfrom/write/read等系统调用的IO接口,真的是在网络中进行接收/发送数据的吗?

不是,他们本质上都是拷贝函数。

用户层下层就是传输层。传输层顾名思义是用来进行数据传输的。

也就是说,接收/发送消息都是传输层帮我去做的。就像发快递一样,你只是把快递给了快递员,具体的流程是快递公司帮你做的。


 UDP没有真正意义上的发送缓冲区,调用sendto时会直接交给内核,由内核将数据传给网络层协议,然后进行后续的传输动作。

UDP具有接收缓冲区。但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致,如果缓冲区满了,再到达UDP数据就会被丢弃。

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

4.UDP注意事项

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

5.基于UDP的应用层协议

NFS: 网络文件系统。
TFTP: 简单文件传输协议。
DHCP: 动态主机配置协议。
BOOTP: 启动协议(用于无盘设备启动)。
DNS: 域名解析协议。
当然, 也包括你自己写UDP程序时自定义的应用层协议。
 

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...