Linux:传输层(1) -- UDP协议

1. 端口号

        同一台主机的不同端口号(Port)标记了主机上不同的进程,如下图所示:

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

 

1.1 端口号划分

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

1.2 知名端口号

  • ssh服务器, 使用22端口
  • ftp服务器, 使用21端口
  • telnet服务器, 使用23端口
  • http服务器, 使用80端口
  • https服务器, 使用443
  • 执行下面的命令, 可以看到知名端口号:cat /etc/services
那么此时就会有 两个问题:
  • 一个端口号是否能被多个进程bind?-- 默认情况下,一个端口号在同一时间不能被多个进程绑定到同一个IP地址,当然会有写特殊的处理。
  • 一个进程能否bind、多个端口号?-- 是可以的,一个进程可以创建多个套接字,每个套接字绑定到不同的端口上。

2. netstat

netstat是一个用来查看网络状态的重要工具.
语法:netstat [选项]
功能:查看网络状态
常用选项
  • n 拒绝显示别名,能显示数字的全部转化成数字
  • l 仅列出有在 Listen (监听) 的服務状态
  • p 显示建立相关链接的程序名
  • t (tcp)仅显示tcp相关选项
  • u (udp)仅显示udp相关选项
  • a (all)显示所有选项,默认不显示LISTEN相关
pidof
在查看服务器的进程 id 时非常方便 .
语法 pidof [ 进程名 ]
功能 :通过进程名 , 查看进程 id

3. UDP协议

3.1 格式

  •  UDP采用固定长度的报头 -- 前8字节
  • 16位UDP长度:表示整个数据报(报头+有效载荷)的长度
  • 16位UDP校验和:发送前OS会按照算法计算出数据报的有效载荷并填充到报头中,在接收方接收到数据报以后,会以同样的算法计算校验和与包头中的对比,检验和不一致则直接丢弃

对报头的理解:OS层面定制的一种协议,其实就是一种结构化的数据对象,如下所示(这里只是示例,并不代表真实的结构体也一定如此):

//UDP头部,总长度8字节  
typedef struct _udp_hdr  
{  unsigned short src_port; //远端口号  unsigned short dst_port; //目的端口号  unsigned short uhl;      //udp头部长度  unsigned short chk_sum;  //16位udp检验和  
}udp_hdr;  

3.2 UDP的特点

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

3.3 接受/发送缓冲区

我们在用的网络的IO接口并不是发送和接受和接口,实际上是一种拷贝的接口,将数据拷贝到缓冲区,再用OS决定何时发送和接收。

调用read/recv时,实际上是从传输层协议的接收缓冲区中读取(拷贝)数据;调用write/send时,时间上是将数据经过封装拷贝到了传输层协议的发送缓冲区,此时应用层的任务就结束了,由OS将数据刷新到网络中。就像下面这个图一样:

传输层的UDP/TCP协议都是全双工的,发送/接收数据不使用相同的公共缓冲区,在发送数据的同时也可以接受别人发来的数据。 

注:

  • UDP是没有真正意义的发送给缓冲区的(调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作),它具有接收缓冲区。
  • 我们注意到 , UDP 协议首部中有一个 16位的最大长度 . 也就是说一个 UDP能传输的数据最大长度是64K(包含UDP 部 )。然而64K 在当今的互联网环境下 , 是一个非常小的数字。 如果我们需要传输的数据超过64K, 就需要在应用层手动的分包 , 多次发送 , 并在接收端手动拼装。

3.4 基于UDP的应用层协议

NFS: 网络文件系统 、TFTP: 简单文件传输协议、DHCP: 动态主机配置协议、BOOTP: 启动协议 ( 用于无盘设备启动)、 DNS: 域名解析协议

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

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

相关文章

QT开发(QT的基本概述和环境的安装)

QT的概述 一.QT的介绍背景1.1 什么是QT1.2QT的发展史1.3 Qt支持的平台1.4QT版本1.5QT的优点1.6QT的应用场景 二.搭建QT开发环境2.1 QT的开发工具的下载2.2 QT环境变量配置 三.QT的三种基类四.QT Hello World程序4.1使用按钮实现4.1.1 代码方式实现4.1.2 可视化操作实现 一.QT的…

GO内存分配详解

文章目录 GO内存分配详解一. 物理内存(Physical Memory)和虚拟内存(Virtual Memory)二. 内存分配器三. TCMalloc线程内存(thread memory)页堆(page heap)四. Go内存分配器mspanmcachemcentralmheap五. 对象分配流程六. Go虚拟内存ArenaGO内存分配详解 这篇文章中我将抽丝剥茧,…

基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(一)|| RISC / 底层代码执行步骤 / 汇编指令

本篇文章基于韦东山老师讲课笔记和自己理解编写。 RISC ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点: ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 …

2024.7.24 作业

1.二叉树的创建、遍历自己实现一遍 bitree.h #ifndef BITREE_H #define BITREE_H#include <myhead.h>typedef char datatype;typedef struct Node {datatype data;struct Node *left_child;struct Node *right_child; }Node,*BiTreePtr;//创建二叉树 BiTreePtr tree_cr…

MinerU、Magic-PDF、Magic-Doc

文章目录 一、关于 MinerU二、Magic-PDF1、简介2、项目全景3、流程图4、子模块仓库 三、Magic-PDF 上手指南1、配置要求2、安装配置1. 安装Magic-PDF2. 下载模型权重文件3. 拷贝配置文件并进行配置4. 使用CUDA或MPS加速推理CUDAMPS 3、使用说明1) 通过命令行使用直接使用更多用…

带您详细了解安全漏洞的产生和防护

什么是漏洞&#xff1f; 漏洞是 IT、网络、云、Web 或移动应用程序系统中的弱点或缺陷&#xff0c;可能使其容易受到成功的外部攻击。攻击者经常试图寻找网络安全中的各种类型的漏洞来组合和利用系统。 一些最常见的漏洞&#xff1a; 1.SQL注入 注入诸如 SQL 查询之类的小代…

机器学习周报第四周(7.15-7.21)

文章目录 摘要Abstract1.批次&#xff08;Batch&#xff09;和动量&#xff08;momentum&#xff09;1.1 批次&#xff08;Batch&#xff09;1.2 Momentum 2.自动调整学习速率&#xff08;Learning rate&#xff09;2.1 Adagrad 算法2.2 RMSProp2.3 Adam2.4 学习率调度 3.朴素贝…

美摄科技企业级视频拍摄与编辑SDK解决方案

在数字化浪潮汹涌的今天&#xff0c;视频已成为企业传递信息、塑造品牌、连接用户不可或缺的强大媒介。为了帮助企业轻松驾驭这一视觉盛宴的制作过程&#xff0c;美摄科技凭借其在影视级非编技术领域的深厚积累&#xff0c;推出了面向企业的专业视频拍摄与编辑SDK解决方案&…

JVM系列(二) -类的加载过程

一、背景介绍 我们知道 Java 是先通过编译器将.java类文件转成.class字节码文件&#xff0c;然后再通过虚拟机将.class字节码文件加载到内存中来实现应用程序的运行。 那么虚拟机是什么时候加载class文件&#xff1f;如何加载class文件&#xff1f;class文件进入到虚拟机后发…

干部任免管理系统(五)开源了一个c#开发的任免审批表转word的程序

前言&#xff1a; 好久没有写博文了&#xff0c;最近有几位csdn的网友想找过来借鉴开发的管理系统&#xff0c;因为工作调整我已经不在公司管理干部了&#xff0c;整套系统当时本身就是为了方便自己工作捣鼓的&#xff0c;现在也没人用了。牵涉到打架java运行环境&#xff0c;数…

HP ilo4服务器硬件监控指标解读

随着企业IT架构的复杂化&#xff0c;服务器的稳定性和可靠性成为保障业务连续性的关键因素。HP ilo4作为HP服务器的一个重要组件&#xff0c;提供了强大的远程管理和监控功能。本文将对使用监控易软件通过HP ilo4进行服务器硬件监控的指标进行解读&#xff0c;帮助运维团队更好…

802.11无线网络权威指南(二):无线帧结构

802.11无线网络权威指南&#xff08;二&#xff09;&#xff1a;无线帧结构 无线协议桢的三种类型无线网络帧结构完整帧格式control frameDuration/IDAddressSequence ControlQoS ControlHT Control 字段Frame Body 帧体FCS 校验域 帧细节管理帧控制帧RTS 帧CTS 帧ACK 帧格式PS…

6.1 面向对象技术-面向对象相关概念

大纲 面向对象基本概念 面向对象分析

LeetCode 热题 HOT 100 (010/100)【宇宙最简单版】

【链表】No. 0206 反转链表 【简单】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xf…

鸿蒙仓颉语言【cryptocj 库】(介绍与SHA、MD5、HMAC摘要算法)

cryptocj 库 介绍 cryptocj 是一个安全的密码库&#xff0c;包括常用的密码算法、常用的密钥生成和签名验证。 该库是对 C 语言的 openSSL 封装的仓颉加密算法 1 提供SHA、MD5、HMAC摘要算法。 前置条件&#xff1a;NA 场景&#xff1a; OHOS&#xff0c; Linux&#xff…

C#使用csvhelper实现csv的操作

新建控制台项目 安装csvhelper 33.0.1 写入csv 新建Foo.cs namespace CsvSut02;public class Foo {public int Id { get; set; }public string Name { get; set; } }批量写入 using System.Globalization; using CsvHelper; using CsvHelper.Configuration;namespace Csv…

Meta发布Llama 3.1模型

Llama 3.1模型 Meta&#xff08;原Facebook&#xff09;开发的一款大型语言模型&#xff08;LLM&#xff09;&#xff0c;该模型在多个方面展现出了强大的性能和广泛的应用潜力。关于Llama 3.1模型的规模与参数&#xff0c;具体概述如下&#xff1a; 一、模型规模 Llama 3.1…

VBA实例-从Excel整理数据到Word

实现目录 功能需求数据结构复制数据到新sheet并分类数据添加序号、日期、时间三列数据添加序号列添加时间列 将名称和类别复制到word文件中将参数5和参数9中的一个复制到word文件中 实例 功能需求 1、将原始数据中不要的数据剔除 2、原始数据中增加序号、日期和时间三列数据&a…

opengl 写一个3D立方体——计算机图形学编程 第4章 管理3D图形数据 笔记

计算机图形学编程&#xff08;使用OpenGL和C&#xff09; 第4章 管理3D图形数据 笔记 数据处理 想要绘制一个对象&#xff0c;它的顶点数据需要发送给顶点着色器。通常会把顶点数据在C端放入 一个缓冲区&#xff0c;并把这个缓冲区和着色器中声明的顶点属性相关联。 初始化立…

【Unity2D 2022:UI】无法拖拽TextMeshPro组件

在预制体Card上挂载了四个Text Mesh Pro组件&#xff0c;分别命名为Name、HP、ATK、Description。 将预制体Card挂载脚本CardDisplay用来在预制体上显示属性&#xff0c;并创建TextMeshPro对象来接收TextMeshPro组件。 using TMPro; using UnityEngine; using UnityEngine.UI;…