_Linux (传输层一版本)

news2025/7/14 23:23:51

文章目录

  • 0. 传输层作用
  • 1. 再谈端口号
    • 1-1 端口号范围划分
    • 1-2 认识知名端口号(Well-Know Port Number)
    • 1-3 两个问题
    • 1-4 netstat
    • 1-5 pidof
  • 2. UDP协议
    • 2-1 UDP协议端格式
      • 1. UDP协议如何分离(封装)?
      • 2. UDP协议如何交付(应用层- - 客户)?
      • 3. 如何理解报文本身?
      • 4. 如何理解报文字段?
    • 2-2 UDP的特点
    • 2-3 面向数据报
    • 2-4 UDP的缓冲区
    • 2-5 UDP使用注意事项
    • 2-6 基于UDP的应用层协议

0. 传输层作用

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

1. 再谈端口号

端口号(Port)标识了一个主机上进行通信的不同的应用程序;
在这里插入图片描述
(图片来源于百度)

  • 在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看);
    在这里插入图片描述
    (图片来源于相关教材资料)

1-1 端口号范围划分

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

1-2 认识知名端口号(Well-Know Port Number)

有些服务器是非常常用的, 为了使用方便, 人们约定一些常用的服务器, 都是用以下这些固定的端口号。

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

执行下面的命令, 可以看到知名端口号

cat /etc/services

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

1-3 两个问题

1、一个进程是否可以bind多个端口号?

  • 可以( 因为一个进程可以打开多个文件描述符,而每个文件描述符都对应一个端口号,所以一个进程可以绑定多个端口号。)

2、一个端口号是否可以被多个进程bind?

  • 不可以(如果一个进程先绑定一个端口号,然后再fork一个子进程,这样的话就实现了多个进程绑定一个端口号,但是不同的进程绑定同一个端口号是不可以的。)

1-4 netstat

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

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

常用 :

netstat -nltp  或 netstat -natp

1-5 pidof

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

2. UDP协议

2-1 UDP协议端格式

在这里插入图片描述

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

1. UDP协议如何分离(封装)?

固定长度的报头(8字节- -规定),可以将报头和有效载荷分离(数据那块);封装过程与之相反。

2. UDP协议如何交付(应用层- - 客户)?

  • 根据报头中的16位端口号,进行向上交付进程bind的端口

3. 如何理解报文本身?

  • 实际上8字节的报头是使用位端拼接实现的
struct udp_hdr
{
	uint32_t src_port:16;
	uint32_t dst_port:16;
	uint32_t udp_len:16;
	uint32_t udp_check:16;
}

我们通过位端这个结构题把端口号等信息拼接切来并于应用层的数据一块组成报文;通过指针(void *start)的方式传递出去,然后再强转指针类型((struct udp_hdr *)start->src_port …)就可以实现分离。
在这里插入图片描述

4. 如何理解报文字段?

  • 我们在网络上发送的数据实际并不是直接通过网络发送的;而是通过收发缓冲区完成的。
  • 数据的发送由操作系统帮你完成; 当然通过协议来保证数据的准确性
    在这里插入图片描述

2-2 UDP的特点

UDP传输的过程类似于寄信.

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

2-3 面向数据报

应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并。
用UDP传输100个字节的数据:

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

2-4 UDP的缓冲区

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

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

2-5 UDP使用注意事项

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

2-6 基于UDP的应用层协议

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

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

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

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

相关文章

什么蓝牙耳机佩戴舒适?2023长时间佩戴最舒适的蓝牙耳机

现如今,很多蓝牙耳机的产品都在不断地更新,市面上的耳机也是越来越普及,可以说是成为我们日常生活中不可或缺的一类电子设备,下面介绍一些佩戴舒适性好的蓝牙耳机。 一、南卡小音舱蓝牙耳机 音质推荐指数:★★★★★…

[ 网络 ] 应用层协议——HTTPS协议原理

目录 1.HTTPS是什么 2.加密技术 2.1什么是加密 2.2为什么要加密 2.3加密处理防止被窃听 3.常见的加密方式 对称加密 非对称加密 4.数据摘要&&数据指纹 5.数字签名 6.HTTPS的工作过程探究 方案1——只是用对称加密 方案2——只进行非对称加密 方案3——双方…

JavaEE——简单介绍Thread类以及线程的基本操作

文章目录一、Thread 类中的常见构造方法二、Thread 的一些常见属性三、线程的启动——start()isAlive() 方法的解释四、线程中断五、线程等待-join()了解六、简单解释线程休眠一、Thread 类中的常见构造方法 我们已知,Thread 类是Java中多线程中的一个关键类&#…

MATLAB的快速入门

第一部分:基础知识常用命令:clc %清除命令行窗口 clear %清空工作区数据 cd %显示或改变工作目录 clf %清除图形窗口 help %打开帮助文档 save %保存内存变量到指定文件 hold %保持图形 close %关闭当前图窗 quit %退出变量&#x…

sentry权限控制

sentry权限控制 文章目录sentry权限控制前言1. 安装2. hive内得配置4. hdfs配置5. Hue 授权6. 连接hive配置权限7. 验证前言 Apache Sentry是一个可以对Hadoop集群中的数据及元数据进行细粒度管理的权限管理系统。Sentry目前可以与ApacheHive,HiveMetastore / HCat…

前端基础(十四)_Math对象

Math对象 1.Math对象 对象.方法名 (1)Math.floor() 向下取整 去掉小数部分 等同于parseInt Math.floor(1.222) //1(2)Math.ceil() 向上取整 去掉小数部分 向上进一 Math.ceil(1.222) //2(3)Math.round() 四舍五入 4.5 5 针对小数点后面第一位数字 Math.round(1.272) //1 Ma…

嵌入式安防监控项目——exynos4412主框架搭建

目录 一、模块化编程思维 二、安防监控项目主框架搭建 一、模块化编程思维 其实我们以前学习32使用keil的时候就是再用模块化的思维。每个硬件都单独有一个实现功能的C文件和声明函数,进行宏定义以及引用需要使用头文件的h文件。 比如简单的加减乘除取余操作我们…

Spark Standalone 部署

Spark Standalone 部署解压缩文件修改配置文件启动集群Web UI 界面提交应用提交参数说明配置历史服务配置日志存储路径添加日志配置重启重新执行任务查看历史服务配置高可用(HA)集群规划停止集群启动 Zookeeper启动集群关闭集群关闭历史服务解压缩文件 …

Go语言使用Playwright自动化测试、录屏、执行js

Go版本的Playwright支持Chromium、Firefox和WebKit的Web自动化测试,兼容Windows、Linux和MacOS,默认支持headless无头模式,安装方便、绿色高效、兼容性强、运行速度快。 支持的主要功能有: 跨多个页面、域名和iframe的场景&#x…

什么led灯性价比高?家用led灯选哪种最好

人造灯具经过多年的发展,现在最为成熟的工艺就是led灯了,不仅有荧光灯高效节能、省电高亮的特点,而且光线可控性非常高,对于调光、提高光线柔和度等方面非常方便,保护眼睛更有效。 那么什么led灯性价比高呢&#xff0c…

JavaScript 高级5 :ES6

JavaScript 高级5 :ES6 Date: January 19, 2023 Sum:ES6新增语法、ES6内置对象扩展(Array、String扩展方法、set数据结构) 目标 能够说出使用let关键字声明变量的特点 能够使用解构赋值从数组中提取值 能够说出箭头函数拥有的…

基于SpringBoot的学生会管理系统 源码

StudentUnionManagementSystem 基于SpringBoot的学生会管理系统 源码 链接 目录StudentUnionManagementSystem介绍软件架构使用说明1.页面登录2.首页3.成员信息管理4.角色信息管理5.权限管理6.活动管理7.文件管理8.活动展示介绍 学生会管理系统 SpringBoot Mybatis-plus shir…

CentOS 7 怎样设置自动连接网络

作为 Linux 中的重要一员,CentOS 7 始终把安全放在第一位,开机以后并不会自动启动网络。而且,相比 Windows 下只需点击几下鼠标便能搞定配置,在 CentOS 7 中要想设置开机自动连接网络,简直可以说是需要具有“专业级水准…

手动实现 数组和链表

数组和链表示意图 目的 不用java标准库 自己时间 一个 arraylist 和 linked list 区别 数组 数组 支持 随机访问 可以立即访问 根据 第一个元素的位置, 推算出 第三个地方的位置 如下图所示,假设我们知道 头的位置是X 数组是 int类型 每个位置就是 …

Qt音视频开发21-mpv内核万能属性机制

一、前言 搞过vlc内核后又顺带搞了搞mpv内核,mpv相比vlc,在文件数量、sdk开发便捷性方面绝对占优势的,单文件(可能是静态编译),不像vlc带了一堆插件,通过各种属性来set和get值,后面…

第十四届蓝桥杯三月真题刷题训练——第 5 天

目录 题目1:数的分解 题目描述 运行限制 代码: 题目2:猜生日 题目描述 运行限制 代码: 题目3:成绩分析 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 题目4:最大和…

Vue3做出B站【bilibili】 Vue3+TypeScript【快速入门一篇文章精通系列(一)前端项目案例】

本项目分为二部分 1、后台管理系统(用户管理,角色管理,视频管理等) 2、客户端(登录注册、发布视频) Vue3做出B站【bilibili】 Vue3TypeScript【快速入门一篇文章精通系列(一)前端项目…

vue3 拖拽 穿梭框

文章目录期望结果当前技术栈实现方法安装 sortablejs导入 sortablejs视图 通过 id 绑定 sortablejs 数据通过 data-xxx 自定义属性 挂载ts中 通过id获取dom 实现拖拽 getNewArr函数通过自定义属性对数据做处理以下是全部代码官网链接下面是文档UsageOptionsgroup optionsort op…

代码随想录之哈希表(力扣题号)

242. 有效的字母异位词 直接用数组模拟哈希表 只有小写字母&#xff0c;开26的数组就可以了 class Solution {public boolean isAnagram(String s, String t) {//24-28int[] hash new int[26];Arrays.fill(hash,0);for(int i0;i<s.length();i){hash[s.charAt(i)-a];}for(i…

2023年3月全国数据治理工程师认证DAMA-CDGA/CDGP火热报名中...

弘博创新是DAMA中国授权的数据治理人才培养基地&#xff0c;贴合市场需求定制教学体系&#xff0c;采用行业资深名师授课&#xff0c;理论与实践案例相结合&#xff0c;快速全面提升个人/企业数据治理专业知识与实践经验&#xff0c;通过考试还能获得数据专业领域证书。 DAMA认…