传输层

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

1. 再谈端口号

端口号(Port)标识了一个主机上进行通信的不同的应用程序
在 TCP/IP 协议中, 用 "源 IP", "源端口号", "目的 IP", "目的端口号", "协议号" 这样一个
五元组来标识一个通信(可以通过 netstat -n 查看)

1.0 源 IP

  • 定义:发送数据的设备(如计算机、手机、服务器等)在网络中的唯一标识,用于定位数据的 “出发点”。
  • 作用:就像现实中的 “寄件人地址”,接收方可以通过源 IP 知道数据来自哪里,以便后续回复或追踪。

1.2 源端口号

  • 定义:发送设备上负责发送数据的应用程序或进程的标识。
  • 作用:同一台设备可能同时运行多个网络应用(如浏览器、微信、游戏等),源端口号用于区分这些应用,确保数据能准确交付给发送端的对应程序。        

1.3 目的 IP

  • 定义:接收数据的设备在网络中的唯一标识,用于定位数据的 “终点”。
  • 作用:类似现实中的 “收件人地址”,网络设备(如路由器)通过目的 IP 确定数据的传输路径,确保数据最终到达目标设备。

1.4 目的端口号

  • 定义:接收设备上负责接收数据的应用程序或进程的标识。
  • 作用:与源端口号对应,用于将数据准确交付给接收端的特定应用(如服务器的 80 端口对应网页服务,21 端口对应 FTP 文件传输服务)。

1.5 协议号

  • 定义:标识数据所使用的传输层协议(如 TCP、UDP 等),用于告知接收端如何处理数据。
  • 作用:不同协议的处理方式不同(如 TCP 提供可靠传输,UDP 提供快速传输),协议号确保接收端用正确的协议解析数据。

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

1.3 两个问题

1. 一个进程是否可以 bind 多个端口号?--- 可以,进程可以创建多个套接字(Socket),每个套接字绑定不同的端口,独立监听或发送数据。

2. 一个端口号是否可以被多个进程 bind? --- 通常不可以,但存在特殊情况,一个端口在同一时间只能被一个进程绑定

2.UDP协议

2.1 UDP协议端模式

• 16 位 UDP 长度, 表示整个数据报(UDP 首部+UDP 数据)的最大长度;(有明显边界)

• 如果校验和出错, 就会直接丢弃
 
报文就是结构体被组织起来
 

2.2 UDP特点

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

2.3 面向数据报

应用层交给 UDP 多长的报文, UDP 原样发送, 既不会拆分, 也不会合并;用 UDP 传输 100 个字节的数据:
• 如果发送端调用一次 sendto, 发送 100 个字节, 那么接收端也必须调用对应的 一次 recvfrom, 接收 100 个字节; 而不能循环调用 10 次 recvfrom, 每次接收 10 个字节;
适用场景:
  1. 对实时性要求高(如视频通话、语音聊天)
  2. 允许少量数据丢失(如 DNS 查询、游戏数据)

面向数据报的通信以 “快速、灵活” 为核心,牺牲了可靠性以换取效率,适用于对实时性要求高于完整性的场景。

2.4 UDP的缓冲区

•  UDP 没有真正意义上的 发送缓冲区. 调用 sendto 会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作;
•  UDP 具有接收缓冲区. 但是这个接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一致; 如果缓冲区满了, 再到达的 UDP 数据就会被丢弃
 
工作机制
应用程序调用 sendto() 或 sendmsg() 等函数发送 UDP 数据时,数据会先被复制到发送缓冲区。操作系统内核会尽快将缓冲区中的数据封装为数据报并通过网络发送,发送完成后缓冲区中的数据会被立即释放(不会像 TCP 那样保留数据用于重传)
 
 
UDP 的 socket 既能读, 也能写, 这个概念叫做 全双工 --- 指通信双方可以同时进行双向数据传输的方式,即发送方和接收方能够在同一时间既发送数据又接收数据,两者互不干扰。这种模式类似于现实生活中 “打电话”—— 双方可以同时说话和倾听,无需等待对方结束。

2.5 UDP使用注意事项

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

2.6 基于UDP的应用层协议

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 开发总结:从安装到第一个交互页面-与数据库API

vue 总结 1、安装vue: WinR 输入:cnpm install -g vue/cli 验证是否安装成功:vue --version 2、新建Vue工程 在对应文件夹下右击打开集成终端 输入 vue create query_system(新建项目名字)名称不能存在大写&#x…

运维笔记:HTTP 性能优化

一、HTTP 协议特性与性能瓶颈1.1 HTTP 协议发展历程HTTP 协议的演进直接影响着 Web 性能,各版本关键特性对比:协议版本发布时间核心特性性能优势局限性HTTP/1.01996 年无状态、短连接简单易实现每次请求需建立 TCP 连接HTTP/1.11999 年长连接、管道化减少…

ubuntu:运行gcfsd-admin守护进程需要认证,解决方法

这里有个锁子,每次进入都要输入密码,怎么解决? 重新挂载 /data 磁盘 sudo umount /data sudo ntfsfix /dev/sda1 sudo mount -o rw /dev/sda1 /data

1.DRF 环境安装与配置

文章目录一. Django Rest_Framework二、环境安装与配置2.1 安装 DRF2.2 创建Django项目2.3 添加 rest_framework 应用三、启动项目一. Django Rest_Framework 核心思想:大量缩减编写 api 接口的代码 Django REST framework 是一个建立在 Django 基础之上的 Web 应…

设计模式(十九)行为型:备忘录模式详解

设计模式(十九)行为型:备忘录模式详解备忘录模式(Memento Pattern)是 GoF 23 种设计模式中的行为型模式之一,其核心价值在于在不破坏封装性的前提下,捕获并外部化一个对象的内部状态&#xff0c…

Qt/C++开发监控GB28181系统/录像回放/切换播放进度立即跳转/支持8倍速播放/倍速和跳转进度无缝切换

一、前言说明 在国标监控系统中,录像回放过程中,需要切换播放进度,对比过很过国标系统,绝大部分尤其是网页版的监控系统,在切换进度过程中都会黑屏,这个体验就很不友好了,明明gb28181协议中就有…

【11】大恒相机SDK C++开发 ——原图像数据IFrameData内存中上下颠倒,怎么裁剪ROI 实时显示在pictureBox中

文章目录3 当内存中的 图像数据是垂直翻转的时候怎么截取ROI 并显示3.1 对ROI在原图中的位置做转换3.2 将ROI的最后一行当做开始位置,从底部向上复制数据3.3 完整代码3.4 图像数据在内存中上下颠倒的情况3.5 调用验证4 unsafe代码 解释及注意事项 看我另一篇文章5 C…

小架构step系列29:校验注解的组合

1 概述如果遇到某些属性需要多种校验,比如需要非空、符合某正则表达式、长度不能超过某值等,如果这种属性只有有限几个,那么手工把对应的校验注解都加上即可。但如果这种属性比较多,那么重复加这些校验注解,也是一种代…

网络基础19:OSPF多区域实验

一、拓扑结构1. 网络拓扑:骨干区域(Area 0):连接核心设备(AR1、AR2、AR3、AR4、AR5、AR6)。非骨干区域:Area 1:AR5 ↔ AR9Area 2:AR5 ↔ AR10Area 3:AR6 ↔ A…

goland编写go语言导入自定义包出现: package xxx is not in GOROOT (/xxx/xxx) 的解决方案

问题 写了个自定义的包 calc.go,在路径 $GOPATH/go_project/src/demo_51_package/com/目录下,其中main.go 是main方法的入口代码 main.go 代码如下 package main import "demo_51_package/com" func main() {add : calc.Add(1, 2)println(add)…

HLS视频切片音频中断问题分析与解决方案

HLS视频切片音频中断问题分析与解决方案 问题背景 在使用FFmpeg进行HLS视频切片并通过hls.js前端播放时,开发者经常遇到一个典型问题:第一个视频切片播放正常且有声音,但后续切片却突然失去音频。这种现象在直播和点播场景中均有出现&#xf…

【Linux网络编程】网络层协议 - IP

目录 背景补充 协议头格式 IP报文的分片与组装 网段划分 网段划分是什么?为什么要进行网段划分? 怎么进行网段划分? 路由 路由表生成算法 背景补充 假设现在主机B要给主机C发送消息。在我们前面的学习中,一直都是将数据拷…

从“救火”到“先知”:润建曲尺运维大模型如何重构网络运维价值链

“7月18号,北京,晴,最高温度38摄氏度。”天气预报缓缓播报,商场、地铁、办公楼无不歌颂着威利斯开利的贡献,但这份凉爽的背后,离不开 “电” 的无声托举。5G毫秒级下载、丝滑的移动支付、智能电表、智能家居…

Element表格单元格类名动态设置

在 Element UI 的 el-table 组件中,cell-class-name 属性用于动态自定义表格单元格的 CSS 类名,通常用于根据数据条件设置样式。1. 基本用法在 el-table 上绑定 :cell-class-name 属性,值为一个函数。该函数接收一个对象参数,返回…

利用容器适配器实现stack和queue外加deque的介绍(STL)

文章目录前言什么是容器适配器?观察库中的源码那么该如何使用容器适配器呢?deque的简单介绍(了解)deque的原理介绍deque的优缺为什么选择deque作为stack和queue的底层默认容器?(重点)利用容器适配器实现我们自己的栈和…

【因子动物园巡礼】第12章:机器学习在因子投资中的应用(中文翻译)

【因子动物园巡礼】第12章:机器学习在因子投资中的应用(中文翻译)第12章 因子投资中的机器学习12.1 量化金融中的人工智能12.2 量化因子投资的AI化组件:解剖学视角12.2.1 数据源拓展与预处理12.2.2 因子研究12.2.3 因子模型12.2.4…

【Golang】用官方rate包构造简单IP限流器

文章目录使用 Go 实现基于 IP 地址的限流机制什么是 IP 限流?基于 rate.Limiter 实现 IP 限流1. 设计思路2. 代码实现3. 限流中间件4. 在 Gin 中使用中间件代码解释使用 Go 实现基于 IP 地址的限流机制 在高流量的服务中,限流是一个至关重要的环节。它不…

力扣 Pandas 挑战(6)---数据合并

本文围绕力扣的Pandas简单题集,解析如何用Pandas完成基础数据处理任务,适合Pandas初学者学习。题目1:1050. 合作过至少三次的演员和导演题目描述:ActorDirector 表:---------------------- | Column Name | Type | …

随笔之TDengine基准测试示例

文章目录一、基本信息二、基准测试策略三、基准测试过程1. 模拟高并发写入场景2. 模拟并发查询场景四、基准测试结论一、基本信息 TDengine 版本:3.3.6.13(目前最新版本)服务器配置:16核CPU,32GB内存,高IO…

【IQA技术专题】DISTS代码讲解

本文是对DISTS图像质量评价指标的代码解读,原文解读请看DISTS文章讲解。 本文的代码来源于IQA-Pytorch工程。 1、原文概要 以前的一些IQA方法对于捕捉纹理上的感知一致性有所欠缺,鲁棒性不足。基于此,作者开发了一个能够在图像结构和图像纹…