应用场景选择

如果需要可靠传输,首选 TCP

如果需要传输的数据包很大,也首选 TCP

绝大部分的场景,都可以优先考虑 TCP

UDP 相比于 TCP,最大的优点在于传输效率

有些情况,既需要可靠性又需要性能,这个时候时候就需要 KCP

TCP 是高可靠低效率,UDP 是无可靠高效率,KCP 是低可靠较高效率

如何使用 UDP 来实现可靠传输?

TCP 咋做我们就咋做

IP 协议主要完成的工作是两方面

1.地址管理,使用一套地址体系,来描述互联网上每个设备所处的位置

2.路由选择

先认识一下 IP 协议报头

上述拆包过程都是 IP(系统内核)自动完成的(IP 的拆包并不是因为达到 64 KB,而是在数据链路层还有限制)

包拆了之后,未来如何组包?

六度空间理论

世界上任何两个人想认识一下,只需要六层朋友介绍(设想是每个人执行力都是一定的)

在计算机中,每个路由器都是“执行力最强的朋友”

所以想要通过网络访问到世界任何一个角落,最多经历 32 / 64 次就足够了

windous 有一个命令 tracert 这个命令就可以看到当前网络通信的路径是怎样的

IP 协议如何管理的地址?

IP 地址本质上就是一个 32 整数,为了方便,就会把 IP 表示成 点分十进制 的方式,通过 3 个点分成 4 个部分,每个部分 1 个字节,每个部分的取值都是 0 - 255

IP 地址存在,目的就是为了能够区分网络上不同的设备,希望每个网络设备都有唯一的一个 IP 地址

如何解决 IP地址不够用?

1.动态分配 IP 地址

2.NAT地址

先把 IP 分成两大类
1.私网 IP / 局域网 IP

IP 地址是以 10.*,172.16-172.31.*,192.168.*

这三类地址都是 私网 IP

2.公网IP / 广域网 IP

要求公网上的设备,对应的公网 IP,都必须是唯一的

但是私网上 / 局域网上的设备,使用私网 IP,只要保证局域网内部的 IP 不重复即可,不同的局域网之间的 IP 允许重复

由于上述设定,就有一个重要的限制:
1.公网设备访问公网设备,没有任何问题,直接访问即可
2.局域网设备访问局域网设备(同一个局域网),也没有问题
3.局域网设备访问局域网设备(不同局域网),不允许访问
4.局域网设备访问公网设备,就需要对局域网设备的 IP 进行地址转换
5.公网设备访问局域网设备,不允许主动访问

3.IPV6 

增加了 IP 地址个数

IPV4 使用了 4 个字节表示 IP 地址

IPV6 使用了 16 个字节 表示 IP 地址

IPV6 和 IPV4 不兼容

把一个 IP 地址,分成两个部分,网络号 + 主机号

我们的机器都是在一个局域网中的,网络号都是相同的,主机号是不同的

一个局域网中,网络号 和 主机号 都相同,是无法上网的

如果局域网中的设备,网络号 和 路由器的网络号不相同,无法上网

路由器 有一个功能 DHCP 自动把局域网这里的设备的 IP 分配好

1111 1111 1111 1111 1111 1111 0000 0000

左侧全都是 1, 右侧全是 0,不会出现 1 0 混着,位置为 1的扑粉都是“网络号”,为 0 的部分就全都是主机号

家用宽带来说的话,一般默认前三个字节是网络号,主机号的范围就表示局域网中可以有多少个设备,一个字节能表示 256

时间往前推移 20 到 30 年左右,当年的网段划分方式不太一样

在之前的网段划分方式,没有子网掩码,直接通过设定 IP 的前缀来起到设置网段的效果

比较死板,尤其是 A B 类浪费了 很多 IP 地址

一些特殊的 IP地址

127.0.0.1    127.*  环回 IP

如果某个 IP 的主机号为全 0,表示 “这个网段”  它不能分配给某个主机

如果某个 IP 的主机号全是 1,表示“广播地址” ,表示二进制全是 1

192.168.0.255 这才是正确的

广播一对多,这样的传输,而且这里的多,指的是所有人

单播:一对一

组播:一对多(整体的一部分)

广播:一对多(整体的所有)

往广播地址上发消息,局域网中所有的设备都能收到,必须要发 UDP 的消息,TCP 不支持广播

广播的一个典型的应用场景:手机投屏 / 电脑投屏

点击投屏,手机就会在局域网中广播一个查询数据包,看哪些设备有回应,根据回应,就知道 IP

为哪个的设备是能够支持投屏的

接下来选择对应的设备,就可以把数据和这个设备进行通信了

IP 协议 地址管理

路由选择

网络结构太复杂,每个路由器都无法掌握全局的信息,只能掌握一部分局部信息,此时路由器规划出来的路线,只能是一个“较优解”

路由器转发数据包的过程就是类似的过程

数据报中包含了“目的 IP” 字段,就是要问路的目标,每个路由器都对于网络环境(和他相邻的设备情况)有一定了解的,此时,就可以根据它的了解告诉我们下一步往哪个方向走

路由器内部有一个数据结构,路由表

路由表   目的 IP 的网段      对应的网络接口(从路由器的哪个口出)

拿着目的 IP 去路由表匹配,很可能此时查询结果在路由表不存在

数据链路层

以太网(横跨数据链路层 和 物理层)

以太网

数据帧格式

数据链路层,引入了另外一套地址体系,称为“mac地址” / 物理地址

mac 地址 和 IP 地址 是独立的两套地址体系

IP 地址 侧重于 全局的转发,从起点到终点,这整个转发过程,通过 IP 地址 负责完成(查询路由表,通过 IP 地址)

MAC 地址,侧重于 局部的转发,两个相邻设备之间的转发

一般开发很少用到 mac 地址,而 IP 地址会用的很多

mac 地址通常按照 16 禁止的方式表示字节之间通常使用 - 或者 :分割

mac 地址表示的范围比 IPV4 地址大很多,当前 mac 地址都是和主机 一对一绑定的

IP 地址很多时候都是动态分配的

mac 地址就是静态分配的,网卡出厂时,mac 地址就写死了

由于 mac 地址有这样的特性,有些程序,就会使用 mac 地址来作为机器的身份标识

域名解析系统 DNS

使用 IP 地址来描述网络设备的位置   域名 一串可读性更好的单词 把域名自动的转换成对应的 IP 地址

上古时期,映入了一个 hosts 文件

这里的内容就是行文本,包含很多行,每一行都有 IP 和 域名,每次访问某个域名就会进行查询,获取到对应的 IP

hosts 文件目前仍然是有效的

搭建域名服务器的时候还会对于域名进行分级管理,一级域名,二级域名,三级域名。。。。这样就可以控制每个服务器管理的数据都不多

这时谷歌搞的一套 DNS 镜像服务器

HTTP 协议

HTTP 也是基于 TCP 来实现的

“超文本传输协议”

文本 => 字符串 超文本 不仅仅是字符串,还可以携带一些图片,特殊的格式

HTTP 协议最主要的应用场景,就是网站,浏览器 和 服务器之间,传输数据,客户端 和 服务器之间的数据传输,也很可能是 HTTP

HTTP 协议交互过程

HTTP 报文格式

抓包工具 抓包工具本质上是一个 “代理程序”,能够获取到网络上传输的数据,并显示出来

代理分成两种

正向代理(客户端代言人)

反向代理(服务器代言人)

如果之前fidder 安装配置没问题的话,会抓到很多数据包

打开一个网站,浏览器和服务器之间进行的 HTTP 交互不是只有一次,通常有很多次,第一次交互拿到这个页面的 html,html 还会依赖其他的 css 和 js,图片等,html 被浏览器加载之后,又会触发一些其他的 http 请求,获取到 css,js等,当执行js 的时候,js 代码里可能又要触发很多的http请求,获取到一些数据

蓝色的表示返回的是一个 html,往往是一个网站的入口请求,选中请求并双击,能看到明细

右上角请求明细

右下角响应明细

http请求的原始数据

当前响应数据被压缩了,网络传输中,带宽是一个比较贵的硬件资源,为了节省带宽,就可以把相应数据进行压缩

HTTP 请求,包含四个部分

1.首行

2.请求头

3.空行

请求头最下面会有一个空行,这个空行就可以表示结束标记

4.正文(body)

http 的载荷部分

有的 http 有 body 有的没有

HTTP 响应的基本格式,分成 4 个部分

1.首行

2.响应头 键值对

3.空行

4.响应正文

相应的载荷是 html

URL

描述一个网络上的资源位置

唯一资源定位符

uri 是唯一资源标识符

查询字符串,是客户端给服务器传递信息的重要途径,这里的组织方式是按照键值对的方式来组织的

关于 URL encode

query string 里是自定义的键值对

在 URL 中,本身有些特殊符号具有特定的含义

如果 url 的 query string 中也包含同样的符号,咋办?
如果直接写进去,可能就会使服务器 / 浏览器 解析失败,靠谱的方法就是对上述符号进行 “转义”

对于汉字,也是要进行转义的

汉字的 utf8 / gbk 等编码值其中可能某个字节就恰好和某可符号的 ascil 码一致

这里的 urlencode 编码十分重要

实际开发中,当要构造一个 url,尤其是 url 的 query string 中要包含中文的时候,务必要进行编码

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

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

相关文章

《Leetcode》-面试题-hot100-栈

题目列表 20. 有效的括号 简单难度 leetcode链接 155. 最小栈 中等难度 leetcode链接 394. 字符串解码 中等难度 leetcode链接 739. 每日温度 中等难度 leetcode链接 84. 柱状图中最大的矩形 困难难度 leetcode链接 题目 (1)有效的括号 题目 给…

GPT-5、Claude-4 同台亮相!OneEval发布全新“大模型+知识库”评测白皮书!

OneEval官网地址:http://OneEval.OpenKG.cnOneEval文章链接:https://arxiv.org/abs/2506.12577要点导读 今年4月,OpenKG发布“大模型知识库”融合能力评估榜单OneEval v1.0。近期,OpenKG在此基础上,组织撰写了OneEv…

【最新版】沃德云商协系统全开源+uniapp小程序

一.介绍沃德云商协是一款基于FastAdmin(thinkphp)Uniapp开发的“多组织”的云服务平台,打造总商会、总协会、总校友会、工商联等多组织无障碍沟通合作平台,让各大分会、各大分校友会、分组织实现轻松管理,线上宣传展示…

Wireshark专家模式定位网络故障:14种TCP异常深度解剖

TCP连接如同精密运转的传送带,每一个异常数据包都是故障的早期信号。作为网络工程师的“外科手术刀”,Wireshark在TCP故障诊断领域的价值无可替代。本文将通过14个真实故障场景,揭示如何利用Wireshark专家系统(Expert System&…

Python Day28 HTML 与 CSS 核心知识点 及例题分析

一、HTML 布局标签(含 H5 语义化标签)传统布局多使用div标签,H5 新增语义化标签增强可读性:核心知识点header:替代div#header,用于页面头部(如标题、导航)。footer:替代d…

MySQL 数据库表操作与查询实战案例

MySQL 数据库表操作与查询实战案例 在数据库学习过程中,熟练掌握表的创建、数据插入及各类查询操作是基础且重要的技能。本文将通过实际案例,详细介绍 MySQL 中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手。 项目一&…

THCV215一种高速视频数据收发器,采用低电压差分信号(LVDS)技术支持高速串行数据传输,支持1080p/60Hz高分辨率传输

THCV215 是一款符合 V-by-One HS 标准的 高速视频数据收发器。THCV215和THCV216被设计为支持主机和显示器之间的视频数据传输。该芯片组可以在20MHz至100MHz的LVDS时钟频率下,仅通过一根差分电缆传输39bit视频数据和3bit同步数据。该芯片组有两个高速数据通道&#…

Linux 系统下 VS Code 降级至 1.85 版本教程:通过历史版本网站解决兼容性问题

一、问题背景 当前使用的 VS Code 版本为 1.102.3,这一版本可能是未来版本、内部测试版或 Insiders 版本,而目前最新的稳定版属于 1.8x 系列。由于版本过新,可能导致与部分插件(如旧版 Remote-SSH)或系统环境不兼容。…

一个基于 PyTorch 的完整模型训练流程

一个基于 PyTorch 的完整模型训练流程 flyfish训练步骤具体操作目的1. 训练前准备设置随机种子、配置超参数(batch size、学习率等)、选择计算设备(CPU/GPU)确保实验可复现;统一控制训练关键参数;利用硬件加…

ffmpeg,ffplay, vlc,rtsp-simple-server,推拉流命令使用方法,及测试(二)

一、常用命令 ffmpeg 推流命令 : ffmpeg -re -i input.mp4 -c copy -f flv rtmp://39.105.129.233/myapp/ffmpeg -re -i input.mp4 -c copy -f flv rtsp://39.105.129.233/myapp/-re 读取流 -i 输入文件 -f # 指定推流formatffplay 拉流命令 : ffplay rtmp://39.105.129.233/m…

使用行为树控制机器人(三) ——通用端口

文章目录一、通用端口功能实现1. 功能实现1.1 头文件定义1.2 源文件实现1.3 main文件实现1.4 tree.xml 实现2. 执行结果使用行为树控制机器人(一) —— 节点使用行为树控制机器人(二) —— 黑板使用行为树控制机器人(三) —— 通用端口有了上述前两节我们已经可以实现节点间的通…

DataDome反爬虫验证技术深度解析:无感、滑块与设备验证全攻略

DataDome反爬虫验证技术深度解析:无感、滑块与设备验证全攻略 随着网络安全威胁的不断演进,企业对数据保护的需求日益增强。DataDome作为业界领先的反爬虫解决方案,以其三层防护机制在众多知名网站中得到广泛应用。本文将深入解析DataDome的…

RabbitMQ 消息转换器详解

RabbitMQ 消息转换器详解 一、为什么需要消息转换器? RabbitMQ 的消息传输协议只识别字节流: 发送对象时,需要序列化成字节数组接收消息时,需要将字节数组反序列化成对象 如果不使用消息转换器: 需要手动序列化和反序列…

内网穿透的应用-告别“现场救火”!用 cpolar远程调试让内网故障排查进入“云时代”

文章目录前言**常见困境与解决方案****实际应用价值**1. Remote JVM Debug2. 系统要求与环境准备2.1 服务器环境2.2 本地开发环境3. 内网服务器准备及开始3.1 安装cpolar配置支持远程ssh登录3.1.1 什么是cpolar?3.1.2 安装cpolar3.1.3 注册及配置cpolar系统服务3.1.…

Cherryusb UAC例程对接STM32内置ADC和PWM播放音乐和录音(下)=>UAC+STM32 ADC+PWM实现录音和播放

1. 程序基本框架整个程序框架, 与之前的一篇文章《Cherryusb UAC例程对接STM32内置ADC和DAC播放音乐和录音(中)>UACSTM32 ADCDAC实现录音和播放》基本一致, 只是这次将DAC替换成了PWM。因此这里不再赘述了。 2. audio_v1_mic_speaker_multichan_template.c的修改说明(略) 参…

1 JQ6500语音播报模块详解(STM32)

系列文章目录 文章目录系列文章目录前言1 JQ6500简介2 基本参数说明2.1 硬件参数2.2 模块管脚说明3 控制方式3.1 通信格式3.2 通信指令4 硬件设计5 软件设计5.1 main.c5.2 board_config5.2.1board_config.h5.2.2 board_config.c5.3 module_config5.3.1 module_config.h5.3.2 mo…

常用数据分析工具

Tableau丨Power BI丨FineBI丨SQL丨影刀丨Excel丨Python丨 参考视频:【戴师兄】数据分析有哪些必学工具?2023最新版!Tableau丨Power BI丨FineBI丨SQL丨影刀丨Excel丨Python丨课程教程自学攻略_哔哩哔哩_bilibili 文档资料: 【戴师兄…

OBOO鸥柏丨智能会议平板教学查询一体机交互式触摸终端招标投标核心标底参数要求

整机参数要求:55寸/65寸/75寸/85-86寸/98寸/100寸/110寸/115寸智能会议平板教学触控一体机/智慧黑板触摸屏招标投标核心标底参数要求1、整机屏幕采用≥采用超高清原厂原包原装工业LCD液晶屏面板;具有高色域,显示动态视频、web及3D动画时&…

无人机在环保监测中的应用:低空经济发展的智能监测与高效治理

一、行业背景与技术革新 随着全球环境问题日益严峻,传统环保监测手段已难以满足现代环境管理的需求。固定监测站点建设成本高、覆盖范围有限,地面巡查效率低下且存在安全风险。在此背景下,无人机技术凭借其独特的空间优势和技术特性&#xff…

PO、BO、VO、DTO、POJO、DAO、DO基本概念

一、图解二、相关概念 1、PO(Persistant Object - 持久化对象) 核心定位: 直接与数据库表结构一一映射的对象,通常用于 ORM(对象关系映射)框架(如 MyBatis、Hibernate)中。 特点&…