当前位置: 首页 > news >正文

网络知识学习(笔记二)

        ios模型规定的网络模型一共有7层,但是实际使用过程中,4层的TCP/IP模型是经常使用的,网络知识学习笔记里面也是基于4层TCP/IP模型进行分析的,前面已经讲了:(1)物理层,(2)数据链路层。本次笔记将记录网络层、运输层的UDP,运输层的TCP将放在下次笔记中记录。

一、网络层

        网络层主要是:IP、ICMP、ARP协议等。

        (1)如下图所示,网络层的报文主要有两部分组成:首部、数据。

        (2)首部:网络层添加的报文。

        (3)数据:上一层“运输层”传过来的数据报文。

1.1、网络层报文

(1)网络层报文一些长度的规定

        1、网络层数据包报文中,首部得固定长度是20个字节,首部得可变长度部分尾40个字节,总长度为20~60个字节

        2、网络层数据包报文得总长度为65535个字节,是指:首部长度+数据长度

        3、数据链路层中报文要求网络层传过来的数据长度不能超过1500个字节。如果网络层传过来的数据超过了1500个字节,将对网络层中的报文进行分片,每片都是含有网络层的报文首部的。

(2)网络层数据报文首部分析

        网络层报文的格式如下所示,下面将针对报文中的每个部分的内容进行解释。下图所示的占的多少,并不是字节,一个字节有8位。

   

1.版本(Version):占4位

      0100:IPV4

      0110:IPV6

2.首部长度(Header Length):

        占4位二进制乘以4才是最终长度

        最小值:0101,对应的十进制值是5,所以最终首部长度最小是5*4=20字节

        最大值:1111,对应的十进制值是15,所以最终首部长度最大时15*4=60字节

        由于首部固定长度是20字节,所以可变长度是0~40字节

3.总长度:Total Length

        占16位

        3.1.首部+数据部分的长度之和,即整个数据包的长度,最大值是65535字节

        3.2.整个数据包是要传给数据链路层作为帧的数据部分的,但是帧的数据部分不能超过1500字节,所以过大的IP数据包,会被分成片(fragments)传输给数据链路层。

        而且每一片fragments都有自己的网络层首部(IP首部)。

4.区分服务:Differentiated Services Field

        4.1.占8位,可以用来提高网络的服务质量,Quality of Service

        4.2.没有值时:0x00;如果值是0x40,可能路由器就会优先传输这个给IP包,即提高网络服务质量。

        区分服务这部分是不需要用户关心的。

5.标识(Identification):

        5.1.占16位,数据包的ID当数据包传给数据链路层时,发现数据包过大,数据包就会进行分片。每一片fragments都有自己的IP首部,而且这些片的IP首部的标识部分都一样。这样就能区分哪些片是一个IP包拆分的。被分片的数据包的标识位ID是不变的,所有片的标识都是一样的。

        5.2.数据包的ID:代表是哪个IP包。而且有一个计数器专门管理数据包的ID,没发出一个数据包,ID就加1。

        5.3.这个时候虽然能确定下来片fragments属于哪个数据包,但是怎么确定哪个片属于数据包的哪个部分呢?使用下面介绍的片偏移的方式。

        如果数据包过大,标识的数值加到最大的时候,就会变成0,从0从新开始加。

6.片偏移(Fragment Offset)

       同一个数据包的标识ID是一样的,那么划分的长度都是最长的,所以可以通过片偏移的方式,从一个片的位置找到下一个片的位置。

         1.占13位,片偏移乘以8:字节偏移,每一片的长度一定是8的整数倍。

        2.字节偏移:

                        第一片:从IP数据包首部后的第0字节处开始算,共1400字节

                        第二片:从IP数据包首部后的第1400字节处开始算,共1400字节。

                        第三片:从IP数据包首部后的第2800字节处开始算,共1000字节。

                                        所以第一片的字节偏移是0,其IP首部中片偏移就是0/8=0

                        第二片的字节偏移是1400,其IP首部中片偏移就是1400/8=175

                        第三片的字节偏移是2800,其IP首部中片偏移就是2800/8=350

        3.为什么不直接用字节偏移呢,而是要再除以8,用片偏移呢?

                       因为存放偏移量的这部分一共才13位,最大值是8192-1=8191。而整个IP数据包的最大长度是65535字节。所以如果用字节偏移量的话,很可能13位不够表示。

7.标志(Flags)

        1.占3位,每一位有不同的含义。

        2.第一位(Reserved Bit):保留位

        3.第二位(Don't Fragment):1代表不允许分片,0代表允许分片

        4.第三位(More Fragments):1代表不是最后一片,0代表最后一片。

                一旦发现第三位是0,说明这个网络层的数据包已经组装好了。

8.协议和首部检验和

        只对网络协议报文中的首部进行检验。刚开始首部检验和的几位全是零,对首部计算之后的检验值放在首部检验和的位置。

        网络层的数据是从运输层传下来的,那么运输层用的什么协议会被记录下来,放在网络层首部的协议位置处。

        另外,ICMP也有协议字段,但是这些协议是被划分到网络层的。

        传输层的TCP协议的数据,或者UDP协议的数据,都会传输给网络层,被打包成IP协议的数据。

9.生存时间:Time To Live, TTL

        占8位

        1.每个路由器在转发之前都会将TTL减1一旦发现TTL减为0路由器会返回错误报告

        2.各个操作系统的发送数据的默认TTL,减一的次数也是不一样的

        如果没有上面的生存时间,如果用户配置错误,导致数据在两个路由器之间来回的传输出数据,就会占据路由器,导致路由器无法工作。

        所以百度服务器应该是部署在linux服务器上,所以中间经历了64-52=12个服务器。

        3.ping baidu.com -i 1

        设置ping的数据的TTL是1,那么经过第一个路由器时就会减成0,就不会往下再发送包,而是返回报错信息。

        我得ip:192.168.43.143。所以我的第一个网关地址就是192.168.43.1:

二、传输层协议

        1.传输层的TCP协议的数据,或者UDP协议的数据,都会传输给网络层,被打包成IP(IPV4、IPV6)协议的数据。

        2.传输层主要有两个协议:

        1.TCP(Transimission Control Proticol),传输控制协议

如果之前的数据没有发送成功,还会再发送一次,那么就打乱了实时性(现在接收的信息,突然插入一个之前的信息)。

        2.UDP(User Datagram Protocol),用户数据报协议。

如果之前的数据没有成功发过来,那我也不要了,我只关注当前的信息:音视频通话。

        3.两个协议的大致区别:

        4.我们一般发送一个请求,是先在应用层用一个协议封装一个数据,然后在发给下一层,即传输层。

        TCP协议一般封装的是,来自应用层的HTTP/HTTPS等协议封装的数据

        UDP协议一般封装的是,来自应用层的DNS协议封装的数据。

1、UDP协议

1.1、UDP的数据格式

        1.UDP是无连接的,减少了建立和释放连接的开销

        2.UDP尽最大可能交付传输的数据,但是不保证数据的完整性,即不保证可靠交付。

        3.因此不需要维护一些复杂的参数,首部只有8个字节。(TCP首部至少20个字节)

1.2、UDP首部的构成

        1.UDP长度

                16位,2字节:表示  首部的长度+数据的长度

        2.UDP校验和 Checksum

                检验和的计算部分:伪首部+首部+数据

                伪首部:仅在计算检验和时起作用,并不会传递给网络层。

        3.端口Port

                1.服务器可以在一个端口上开启一个服务器软件,这个服务器软件来监听发送到这个端口的数据。之后服务器软件再从8080端口将数据返回给客户端。

                2.UDP首部中每个端口部分占用2字节,可以推测出端口号的取值范围0~65535。

                3.客户端的源端口是应用软件发送请求时的端口,而且是临时开启的随机端口,不固定。

                临时开一个端口发数据,所以同一个应用软件前后两次发数据时,源端口很可能是不一样的。

                4.服务响应请求,返回数据时。此时UDP数据包首部中的目的端口部分,就是客户端发送这个数据的源端口。

                客户端接收到响应的数据,发现目的端口是12656,就会恍然;原来是响应我上次从12656端口发送的数据。

                服务器发送数据时,源端口不变。

        5.防火墙可以设置开启/关闭一些端口来提高安全性。

        6、防火墙和服务器之间的管理

        用户只能发请求过来,请求获得服务器数据,不能通过账号或密码直接访问服务器。

1.3、UDP的抓包分析

        注意:服务器是采用80端口监听数据的。

下面是抓包分析UDP报文数据格式。

        1.传输层的首部是1f 40 0f a8 00 3f 0e 73这8个字节,下面的部分02开始是传输层的数据部分。

        2.传输层的数据会传给网络层,被封装成包:而且数据部分是从1f 40 0f a8 00 3f 0e 73这8个字节开始。

相关文章:

网络知识学习(笔记二)

ios模型规定的网络模型一共有7层,但是实际使用过程中,4层的TCP/IP模型是经常使用的,网络知识学习笔记里面也是基于4层TCP/IP模型进行分析的,前面已经讲了:(1)物理层,(2&a…...

万字解析设计模式之组合模式、亨元模式

一、组合模式 1.1概述 组合模式是一种结构型设计模式,它允许将对象组合成树形结构,以表示“部分-整体”的层次结构。组合模式使得客户端可以一致地对待单个对象和对象组合,从而将复杂的层次结构展现为一个统一的树形结构。 在组合模式中&…...

HTTP之常见问答

1:HTTP/1.1 如何优化? :尽量避免发送 HTTP 请求;通过缓存技术,使用请求的 Etag 参数来处理判断缓存过期等问题,类似304状态码就是告诉客户端,缓存有效还能继续使用 :在需要发送 HTTP…...

java伪共享问题

参考文章 https://blog.csdn.net/qq_45443475/article/details/131417090 产生原因 cpu 与内核数据交换的单位是 cache 行,多核 cpu 的高速缓存在对同一个变量进行修改时由于缓存一致性协议导致对应的缓存失效。 缓存行的大小 cpu 架构有关系,如果是 …...

【Ubuntu】Ubuntu arm64 部署 Blazor Server 应用

部署步骤 发布安装运行环境:dotnet-sdk(必装)、aspnetcore-runtime、dotnet-runtime安装证书设置环境变量:临时变量、当前用户永久变量、所有用户的永久变量运行:终端运行、后台运行 基本情况 开发系统环境 系统&am…...

Android加固为何重要?很多人不学

为什么要加固? APP加固是对APP代码逻辑的一种保护。原理是将应用文件进行某种形式的转换,包括不限于隐藏,混淆,加密等操作,进一步保护软件的利益不受损坏。总结主要有以下三方面预期效果: 1.防篡改&#x…...

【C/PTA】函数专项练习(一)

本文结合PTA专项练习带领读者掌握函数,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。 目录 6-1 输出星期名6-2 三整数最大值6-3 数据排序6-4 多项式求值 6-1 输出星期名 请编写函数,根据星期数输出对应的星期名。 函数原…...

SUDS: Scalable Urban Dynamic Scenes

SUDS: Scalable Urban Dynamic Scenes:可扩展的城市动态场景 创新点 1.将场景分解为三个单独的哈希表数据结构,以高效地编码静态、动态和远场辐射场 2.利用无标签的目标信号,包括RGB图像、稀疏LiDAR、现成的自监督2D描述符,以及…...

蓝桥杯算法双周赛心得——迷宫逃脱(记忆化搜索)

大家好,我是晴天学长,非常经典实用的记忆化搜索题,当然也可以用dp做,我也会发dp的题解,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .迷宫逃脱 迷官逃脱…...

nodejs+vue线上生活超市购物商城系统w2c42

超市管理系统的开发流程包括对超市管理系统的需求分析,软件的设计建模以及编写程序实现系统所需功能这三个阶段。对超市管理系统的需求分析。在这个阶段,通过查阅书籍,走访商场搜集相关资料,了解经营者对软件功能的具体所需和建议…...

飞翔的小鸟

运行游戏如下: 碰到柱子就结束游戏 App GameApp类 package App;import main.GameFrame;public class GameApp {public static void main(String[] args) {//游戏的入口new GameFrame();} } main Barrier 类 package main;import util.Constant; import util.Ga…...

浅析OKR的敏捷性

前言 OKR对于工作的提升有着一定的不可替代的作用。特别在敏捷方面。 OKR的敏捷性 OKR(Objectives and Key Results)是一种目标设定框架,它的敏捷性主要体现在以下几个方面: 公开透明 OKR要求完全公开透明,让每个员…...

Linux+qt:创建动态库so,以及如何使用(详细步骤)

目录 1、根据安装Qt Creator的向导进行创建 2、开发动态库注意的一些细节 3、给动态库添加一个对外开放的接口文件 4、了解下Qt的 .pri文件(非常实用) 5、如何调用动态库.so 1、根据安装Qt Creator的向导进行创建 (1)选择“…...

如何将Docker的构建时间减少40%

与许多公司类似,我们为产品中使用的所有组件构建docker映像。随着时间的推移,其中一些映像变得越来越大,我们的CI构建花费的时间也越来越长。我的目标是CI构建不超过5分钟——差不多是喝杯咖啡休息的理想时间。如果构建花费的时间超过这个时间…...

二分查找——经典题目合集

文章目录 🦜69. x 的平方根🌼题目🌻算法原理🌷代码实现 🐳35. 搜索插入位置🌼题目🌻算法原理🌷代码实现 🦭852. 山脉数组的峰顶索引🌼题目🌻算法原…...

在Jupyter Lab中使用多个环境,及魔法命令简介

一、Jupyter Lab使用conda虚拟环境 1、给虚拟环境添加 ipykernel 方法一: 创建环境时直接添加ipykernel 方法:conda create -n 【虚拟环境名称】python3.8 ipykernel实例如下: conda create -n tensorflow_cpu python3.8 ipykernel 方法二&#xff…...

知虾数据软件:电商人必备知虾数据软件,轻松掌握市场趋势

在当今数字化时代,数据已经成为了企业决策的重要依据。对于电商行业来说,数据更是至关重要。如果你想在电商领域中脱颖而出,那么你需要一款强大的数据分析工具来帮助你更好地了解市场、分析竞争对手、优化运营策略。而知虾数据软件就是这样一…...

c语言中*p1++和p1++有啥区别

在C语言中,*p1和p1是两个不同的表达式,有以下区别: *p1:这是一个后缀递增运算符的组合。首先,*p1会取出指针p1所指向的值,并且对p1进行递增操作。简而言之,这个表达式会先取出p1指向的值&#x…...

2

【任务 2】私有云服务运维[10 分] 【适用平台】私有云 【题目 1】OpenStack 开放镜像权限[0.5 分] 使 用 OpenStack 私 有 云 平 台 , 在 OpenStack 平台的 admin 项 目 中 使 用 cirros-0.3.4-x86_64-disk.img 镜像文件创建名为 glance-cirros 的镜像,通…...

SELinux零知识学习二十二、SELinux策略语言之类型强制(7)

接前一篇文章:SELinux零知识学习二十一、SELinux策略语言之类型强制(6) 二、SELinux策略语言之类型强制 3. 访问向量规则 AV规则就是按照对客体类别的访问许可指定具体含义的规则,SELinux策略语言目前支持四类AV规则&#xff1a…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...