网络(三) 协议
目录
1. IP协议;
2. 以太网协议;
3. DNS协议, ICMP协议, NAT技术.
1. IP协议:
1.1 介绍:
网际互连协议, 网络层是进行数据真正传输的一层, 进行数据从一个主机传输到另一个主机. 网络层可以将数据主机进行传送, 那么传输层保证数据可靠性, 一起就是TCP/IP协议.
路径选择: 确认目的主机之后, 就要找到最短路径将数据给主机. 这里是不是和图数据结构很类似, 找到最短路径. 找寻的时候和路由器来确认目的主机的位置.
主机和路由器: 主机配有IP地址,但是不进行路由控制的设备. 路由器: 既配有IP地址,又能进行路由控制.
1.2 IP协议格式:
版本号: IP协议的版本; 首部长度: 报文长度, 总长度: 报头+有效载荷.
16位标识: 唯一的标识主机发送的报文,如果数据在IP层进行了分片,那么每一个分片对应的id都是相同的。
3位标志位段: 第一位: 保留, 第二位: 禁止分片, 第三位: 更多分片.
13位片偏移:分片相对于原始数据开始处的偏移.
8位协议: 协议类型;
16位首部检验和:使用CRC进行校验,来鉴别数据报的首部是否损坏,但不检验数据部分。
socket里需要IP和port就是给网络层ip使用, 进行路由转接工作的. 端口号是给tcp和udp使用的.
1.3 分片和组装:
数据链路层解决问题, MTU: IP交给MAC帧的报文不能超过某个值,这个值就叫做最大传输单元, 一般是1500字节. 如果超过1500字节就需要进行分片, 再交给mac帧进行传输.
到达对端网络层就需要先组装再进行给传输层传送.
一般是不会进行分片的, 会增加丢包的概率, 数据在路由器中也可能进行分片,
数据的分片和组装完全是由IP协议自己完成的,传输层和链路层不必关心也不需要关心。
如果一个数据包是4500字节, 那么就是采用分片, 分成4个数据片进行发送. 到达对端主机后还有16位标识, 标识一个分片完的数据是一个ip协议出去的. 3位标志和13位片偏移标识分片组合需要的偏移量(离第一个片段的位置), 1480 / 8 = 185.
组装的过程:
IP报头里面有源ip地址, 可以区分不同主机的数据, 16位标识表示来自哪个数据分片进行分片出来的.通过这两个就可以把数据进行组装.
第一个分片的片偏移一定是0, 最后一个分片报文的标志位一定是0, 以及片偏移是按照字节数/ 8进行的, 按照以上规则在进行组装.
分片丢包:
如果第一个分片报文丢了, 那么接收不到片偏移为0的报文, 最后一个分片报文丢了标志位为0的就找不到, 以及其他丢了就找不到片偏移为特殊值的报文.
为啥不建议分片?
因为数据必须进行组装全部之后才可以确认接收到了, 会大大降低传输效率, 增加丢包可能性的, 而且进行数据重传只能全部传递. 最好是一次交给ip协议的报文不要太大, 在1460字节之内(除去报文长度),
1.4 网段划分:
IP地址是由网络号和主机号组成的, 网络号: 保证相连的两个网段具有不同的标识,
主机号: 同一个网络中, 拥有同一个网络号, 但是主机号一定不一样.
找主机, 先查找对应的网段号, 然后进对应网段, 查找对应的主机号,
1.5 IP地址:
A类:0.0.0.0到127.255.255.255。
B类:128.0.0.0到191.255.255.255。
C类:192.0.0.0到223.255.255.255。
D类:224.0.0.0到239.255.255.255。
E类:240.0.0.0到247.255.255.255。
计算方式: 2^7 = 128为A类地址, 2^16 = 65536个就是B类; C类就是16,842,752个.
那么必定会有大量的IP被浪费就使用到子网掩码, IP地址和子网掩码进行按位与就可以的得到网络号. 对应就是和255.255.255.0进行按位与.
特殊IP地址:
全0就是该子网的网络号, 全1就是该子网的广播地址, 127.*就是本地回环地址.本地环回原理: 其实是数据贯穿网络协议栈, 但是不会到网络中以及网卡中.自顶向下进行解包和封装一次, 来测试本地释放正常. 首先会放在IP输入队列中然后判断是否为本地IP和广播IP,
不是就向下交付, 是的话就进行重新放到输入IP队列中.
IP地址不够:
2^32就是大概就是43亿个IP地址, 但是远远不够, 可以使用子网划分以外还可以使用IPV6, 2^64就有数非常大的. 其次使用NAT技术(不同子网存在相同的主机号), 后面具体说.
私网IP和公网IP:
私网IP: 不连接到网络中, 公网IP是可以访问到网络的.
数据是如何发送到服务器的?
LAN口: 连接本地的网络接口, WAN口: 连接互联网的网络接口.
为什么私网IP不能出现在公网当中?
因为私网IP无法标识主机的唯一性, 而且私网IP可以解决IP地址不足的问题, 但是一个网络中的主机无法标识.
1.6 路由:
路由器在查找目的ip的时候进行一跳跳的就是源mac地址到目的mac地址的过程.
路由器在查找路由表时候就给出下一跳到哪里去. route指令就可以进行查询.
相对应还有路由表生成算法.
2. 以太网协议:
2.1 介绍:
是数据链路层协议, 将数据转到到下一跳主机实际是属于局域网通信范畴的,而这实际就是链路层需要解决的问题.
以太网: 最普遍的一种局域网技术.
令牌环网: 无线LAN/WAN, 虽然采用的局域网技术不一样, 但是在网络协议栈中屏蔽底层差异, 发送的时候进行封装对应的局域网技术报头, 然后在向上交付时候去掉报头加上其他局域网报头, 然后再根据网络协议栈进行向上进行交付.
2.2 以太网原理:
以太网不是一种具体的网络而是一种技术标志, 数据链路层还包含了物理层的内容, 必须使用双绞线, 以及网络的拓扑结构.
令牌环网络:
逻辑上是环形拓扑结构, 可以避免数据碰撞, 因为只有拿到令牌的主机才可以发送数据.
2.3 以太网协议的格式:
类型只有IP协议, ARP协议和RARP协议, CRC是校验和.
例子: 主机A找到主机B, 帧协议的类型为0800.
如果主机A收到MAC帧之后就会进行CRC校验, 失败找到发送数据碰撞, 然后就重新发送.
如果主机B收到mac帧之后进行crc验证, 发现mac帧和主机一样就会向上进行交付.
在局域网中收到其他收到mac帧之后进行crc验证不对就丢弃了.
2.4 MAC地址和MTU:
MAC地址: 出厂就设置好啦, 无法修改, 具有唯一性.
MTU: 最大传输单位, 标识数据链路层一次最多发送的数据. 一般是1500字节, 超过就要在ip层进行分片, 然后就是MAC最少数据就是46字节.
2.5 MTU的影响:
(1) 对IP协议的影响:
会导致如果大于1500字节就会进行分片, 然后到达对端主机就会进行组装.
(2) 对UDP协议的影响:
因为IP报文和udp报文一起是20+8 = 28; 那么超过1500-28 = 1472字节就会进行分片. 会增加udp报文丢失的概率.
(3) 对TCP的影响:
增加TCP丢包的概率, 一般降低重传的次数, 会MSS和MTU的最小值进行设置传送大小.
2.6 ARP协议:
(1) 认识:
由IP地址推出MAC地址, 因为在局域网的路由器找到主机就需要mac帧.
(2) ARP协议格式:
路由器先构建ARP协议请求, op置为1(arp请求), 2是arp应答. 硬件类型字段设置为1, 因为是以太网协议, 协议类型设置为0800,因为路由器是要根据主机B的IP地址来获取主机B的MAC地址, 硬件地址长度和协议地址长度分别设置为6和4,因为MAC地址的长度是48位,IP地址的长度是32位。发送端以太网地址和发送端IP地址,对应就是路由器D的MAC地址和IP地址, 因此将目的以太网地址的二进制序列设置为全1,表示在局域网中进行广播.
arp请求:
arp应答:
arp向下还要包装成mac帧才可以进行发送.
(3) RARP协议:
通过MAC地址找到IP地址.
3. DNS协议:
DNS: 域名系统, 将域名转化成IP地址的应用层协议. 一级域名: .com .net .org .eng等;
二级域名: 一般是公司名.
DNS协议的原理:
在浏览器中输入url, 然后进行域名解析, 首先会在浏览器的DNS缓存查询对应域名, 有就完成解析; 没有到操作系统中的DNS缓存, 还是没有就到本地的hosts文件, 一直到下层进行查询.
3.2 ICMP协议:
Internet控制报文协议, ICMP协议是属于IP协议的上层协议.
作用:
确认IP包是否成功到达目标地址, 通知在发送过程中IP包丢弃的原因. 例如主机B关机了,
很久主机A得不到响应, 就是使用ICMP协议来看看是啥原因.
3.3 NAT技术:
网络地址转换技术, 解决IP地址不足的主要手段,并且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机. 在局域网中将全局IP转化成私有IP, 路由器的话就相反.
造成一种局域网中相同IP的私有IP不会冲突, 出了局域网就改变公网IP即可. 其中使用NATP来进行公网IP和私网IP的转换.
NAT技术也有缺点: 就是无法从NAT外部向内部服务器建立连接,因为外部无法知道内部的私网IP,也就无法主动与内部服务器建立连接。转换表的生成和销毁都需要额外开销。通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。
3.4 正反向代理:
正向代理: 客户端和服务器之间的代理服务器, 客户端访问代理服务器, 由代理服务器去访问服务器. 可以加快访问资源, 如果大量访问同一个资源就放在代理服务器中就无需总是访问外网.
反向代理: 对于客户端而言,反向代理服务器就相当于目标服务器,用户不需要知道目标服务器的地址,用户只需要访问反向代理服务器就可以获得目标服务器提供的服务. 可以起到负载均衡的作用.
相关文章:
网络(三) 协议
目录 1. IP协议; 2. 以太网协议; 3. DNS协议, ICMP协议, NAT技术. 1. IP协议: 1.1 介绍: 网际互连协议, 网络层是进行数据真正传输的一层, 进行数据从一个主机传输到另一个主机. 网络层可以将数据主机进行传送, 那么传输层保证数据可靠性, 一起就是TCP/IP协议. 路径选择: 确…...
【深度解析Java 20天速成】04_IDEA的安装与使用
【Why IDEA ?】 【注】JetBrains官方说明: 尽管我们采取了多种措施确保受访者的代表性,但结果可能会略微偏向 JetBrains 产品的用户,因为这些用户更有可能参加调查。 此外,2022年,某美国软件开发商在对近千名专业的Ja…...
gitlab处理空文件夹的提交或空文件夹提交失败
问题描述 厂家发给了我一个压缩包文件,压缩包解压之后本地编译没问题;推送到gitlab之后,再编译就报错了; 问题原因 经过分析之后发现,压缩包解压之后存在很多空文件夹;但是gitlab推送的时候,…...
计算机网络之链路层
本文章目录结构出自于《王道计算机考研 计算机网络_哔哩哔哩_bilibili》 02 数据链路层 在网上看到其他人做了详细的笔记,就不再多余写了,直接参考着学习吧。 1 详解数据链路层-数据链路层的功能【王道计算机网络笔记】_wx63088f6683f8f的技术博客_51C…...
Arduino大师练成手册 -- 读取红外接收数据
硬件连接 连接引脚: 将红外接收器的 VCC 引脚连接到 Arduino 的 5V 引脚。 将红外接收器的 GND 引脚连接到 Arduino 的 GND 引脚。 将红外接收器的 OUT 引脚连接到 Arduino 的数字引脚(例如 D11)。 安装必要的库 在 Arduino IDE 中&#…...
【Efficient AIGC】SiTo: Similarity-based Token Pruning (AAAI-2025)
文章目录 SiTo: Training-Free and Hardware-Friendly Acceleration for Diffusion Models via Similarity-based Token Pruning背景介绍方法结果消融 文章目录 SiTo: Training-Free and Hardware-Friendly Acceleration for Diffusion Models via Similarity-based Token Prun…...
数据标注开源框架 Label Studio
数据标注开源框架 Label Studio Label Studio 是一个开源的、灵活的数据标注平台,旨在帮助开发者和数据科学家轻松创建高质量的训练数据集。它支持多种类型的数据(如文本、图像、音频、视频等)以及复杂的标注任务(如分类、命名实体…...
MyBatis最佳实践:MyBatis 框架的缓存
缓存的概念: 在内存中临时存储数据,速度快,可以减少数据库的访问次数经常需要查询,不经常修改的数据,不是特别重要的数据都适合存储到缓存中 缓存的级别: 一级缓存(默认开启):SqlSession 级别 …...
基于LangGraph、Groq和Tavily打造可以调用外部搜索引擎工具的对话机器人(核心代码 万字详解)
一、python环境 & 相关库版本信息 代码运行在 conda 创建的python环境下,python和相关库的版本信息如下: $ python --version Python 3.12.3$ pip list | grep langchain langchain 0.3.15 langchain-community 0.3.15 lang…...
衡量算法性能的量级标准:算法复杂度
今天开始数据结构的学习!作为一大重点,拿出态度很重要,想要真实掌握,博客笔记自然少不了!重点全部上色!避免疏忽 下面我们从0基础开始学习今天的第一节!不用担心看不懂,拒绝枯燥的理…...
PHP校园助手系统小程序
🔑 校园助手系统 —— 智慧校园生活 📱一款基于ThinkPHPUniapp框架深度定制的校园助手系统,犹如一把智慧之钥,专为校园团队精心打造,解锁智慧校园生活的无限精彩。它独家适配微信小程序,无需繁琐的下载与安…...
如何在Spring Boot项目中高效集成Spring Security
1 Spring Security 介绍 Spring Security 是一个功能强大且高度可定制的安全框架,专为保护基于Java的应用程序而设计。它不仅提供了认证(Authentication)和授权(Authorization)的功能,还支持防止各种常见的安全攻击模式。本文将详细介绍Spring Security的主要特点、功能…...
【PostgreSQL内核学习 —— (WindowAgg(一))】
WindowAgg 窗口函数介绍WindowAgg理论层面源码层面WindowObjectData 结构体WindowStatePerFuncData 结构体WindowStatePerAggData 结构体eval_windowaggregates 函数update_frameheadpos 函数 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊…...
PAT甲级-1020 Tree Traversals
题目 题目大意 给出一棵树的后序遍历和中序遍历,要求输出该树的层序遍历。 思路 非常典型的树的构建与遍历问题。后序遍历和中序遍历可以得出一个树的结构,用递归锁定根节点,然后再遍历左右子树,我之前发过类似题目的博客&…...
LVGL+FreeRTOS实战项目:智能健康助手(Max30102篇)
MAX30102 心率血氧模块简介 功能:用于检测心率和血氧饱和度,集成了红外和红光 LED 以及光电二极管。 接口:支持 I2C 通信,默认 I2C 地址为 0x57。 应用:广泛用于健康监测设备中,如智能手环、手表等。 硬…...
人脸识别【python-基于OpenCV】
1. 导入并显示图片 #导入模块 import cv2 as cv#读取图片 imgcv.imread(img/wx(1).jpg) #路径名为全英文,出现中文 图片加载失败,"D:\picture\wx.jpg" #显示图片 (显示标题,显示图片对象) cv.imshow(read_picture,im…...
redis常用命令和内部编码
文章目录 redis 为什么快redis中的Stringsetsetnxsetex getmsetmget计数操作incr、incrby、decr、decrby、incrbyfloatincrincrbyincrbyfloat 拼接(append)、获取(getrange)、修改字符串(setrange)、获取字符串长度(strlen)操作appendgetrangesetrangest…...
UI操作总结
该类 SolarWebx 继承自 Webx 和 IUixLikeMixin,主要用于扩展 giraffe.EasyUILibrary 的功能,提供了一系列与网页操作、元素定位、截图、图片处理等相关的方法。以下是对该类中每个方法的简要总结: __init__ 方法 作用:初始化 Sola…...
数据结构——实验八·学生管理系统
嗨~~欢迎来到Tubishu的博客🌸如果你也是一名在校大学生,正在寻找各种编程资源,那么你就来对地方啦🌟 Tubishu是一名计算机本科生,会不定期整理和分享学习中的优质资源,希望能为你的编程之路添砖加瓦⭐&…...
力扣hot100-->滑动窗口、贪心
你好呀,欢迎来到 Dong雨 的技术小栈 🌱 在这里,我们一同探索代码的奥秘,感受技术的魅力 ✨。 👉 我的小世界:Dong雨 📌 分享我的学习旅程 🛠️ 提供贴心的实用工具 💡 记…...
ESP32-Bus-Pirate:多功能硬件协议分析工具开发指南
ESP32-Bus-Pirate:多功能硬件协议分析工具开发指南1. 项目概述1.1 系统架构ESP32-Bus-Pirate是基于ESP32平台开发的多协议硬件调试工具,采用模块化分层设计架构。系统包含四个主要层次:用户交互层:支持USB串口终端、WiFi网页终端和…...
Dynamic-Datasource连接池监控指标:10个关键指标调用指南
Dynamic-Datasource连接池监控指标:10个关键指标调用指南 【免费下载链接】dynamic-datasource dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务 项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-datasource Dy…...
低查重AI教材写作指南,用对AI工具让教材创作更省心!
整理教材中的知识点实际上是项“精细活”,其中最大的挑战在于处理好平衡与衔接!我们常常担心会遗漏核心知识点,或者难以把握合适的难度——例如,小学教材有时难以理解,而高中教材又显得过于简单,缺乏深度和…...
DW_apb_uart初始化全流程解析:从时钟门控到中断配置的15个关键步骤
DW_apb_uart深度初始化指南:从寄存器配置到中断优化的15个实战要点 在嵌入式系统开发中,UART通信作为最基础却又最关键的接口之一,其稳定性和性能直接影响整个系统的可靠性。DW_apb_uart作为业界广泛使用的高性能UART IP核,其初始…...
从零构建IoT图像流:ESP32-CAM自动抓拍与App Inventor安卓端动态展示
1. ESP32-CAM硬件准备与环境搭建 第一次接触ESP32-CAM时,我被这个小巧的硬件惊艳到了——它集成了摄像头模块和WiFi功能,价格却不到百元。不过在实际操作中,我发现新手最容易卡在硬件连接环节。这里分享几个实测有效的技巧: 供电问…...
Reset Windows Update Tool终极指南:3步快速修复Windows更新所有问题
Reset Windows Update Tool终极指南:3步快速修复Windows更新所有问题 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...
RevokeMsgPatcher:构建数字时代的消息防护盾,让重要信息不再“蒸发“
RevokeMsgPatcher:构建数字时代的消息防护盾,让重要信息不再"蒸发" 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了࿰…...
从微信聊天到在线游戏:聊聊UDP和TCP在你手机App里的那些‘小心思’
从微信聊天到在线游戏:聊聊UDP和TCP在你手机App里的那些‘小心思’ 每天我们都在用手机App聊天、打游戏、看视频,但很少有人注意到这些应用背后隐藏的网络协议选择。为什么微信文字消息总能准确送达,而语音通话偶尔会断断续续?为…...
Python爬虫实战:手把手教你如何基于 Python 异步架构的 Crates.io 工业级爬虫实战!
㊗️本期内容已收录至专栏《Python爬虫实战》,持续完善知识体系与项目实战,建议先订阅收藏,后续查阅更方便~ ㊙️本期爬虫难度指数:⭐⭐☆☆☆(基础级) 🉐福利: 一次订阅…...
CentOS 6下OpenSSH从5.3升级到8.0的完整避坑指南(附Telnet备用方案)
CentOS 6环境下OpenSSH安全升级全流程:从风险规避到应急通道搭建 当一台运行CentOS 6的服务器在安全扫描中被标记出OpenSSH 5.3的高危漏洞时,任何有经验的运维工程师都会感到脊背发凉——这就像发现自家大门用的还是二十年前的挂锁。但更令人焦虑的是&am…...










