网络原理-TCP_IP(6)

网络层

在复杂的网络环境中确定一个合适的路径.

IP协议

与TCP协议并列,都是网络体系中最核心的协议.

基本概念

主机:配有IP地址,但是不进行路由控制的设备;

路由器:即配有IP地址,又能进行路由控制;

节点:主机和路由器的统称; 

协议头格式

4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4.(只有两种:IPv4,IPv6).

4位头部长度(header length):IP头部的长度是多少个32bit,也就是length * 4的字节数,4bit表达的最大数字为15,因此IP的最大长度是60字节.(IP报头也是可以变长的).

8位服务类型(Type Of Sevice):3位优先权字段(已经弃用),4位TOS字段和一位保留字段(必须置为0).4位TOS分别表示:最小延时(吃饭快),最大吞吐量(吃饭多),最高可靠性(IP并非是像TCP一样提供了强可靠性,但是内部也有考虑,减小了丢包率),最小成本(硬件设备的开销).这四者互相冲突,只能选择一个.

16位总长度(total length):IP数据整体占多少字节.(即报头+载荷,虽然IP有长度限制,但也提供了拆包和组包的功能).

16位标识(id):唯一的标识主机发送的报文.如果报文在数据链路层被分片了,那么每一个片中的id都是相同的.(哪些数据应该在一起组装).

3位标志字段:第一位保留(保留的意思是现在不用,但是说不定以后要用到).第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文.第三位表示"更多分片",如果分片了话,最后一个分片置为1,其它是0,类似一个结束标记.

13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移.其实就是表示当前分片在原报文中的哪个位置,实际偏移的字节数是这个值*8得到的.因此,除了最后一个报文之外,其它报文的长度必须是8的整数倍(否则报文就不连续了).(组装包的先后顺序).

8位生存时间(Time To Live,TTL):数据报到达目的地的最大报文次数,一般是64.每次经过一个路由,TTL-=1,一直减到0还没有到达,那么就丢弃了,这个字段主要是为了防止路由循环.(小提示:在cmd窗口中使用tracert + 网络名指令)可以看到当前的网络路径是怎样的.

8位协议:表示上层协议的类型(传输层使用哪个协议).

16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏.(不管载荷).

32位源地址和32位目标地址:表示发送端和接收端.(最关键的地方)采用的是点分十进制,3个点分成4个部分,每个部分1字节(0~255). -> IPv4. 希望每一个网络都有一个唯一的IP地址.(数值达到了2^32,约42亿9千万->可能不够用).

选项字段(不定长,最多40字节):略.

地址管理

定义:使用一套地址体系(IP地址),来描述互联网上每个设备所处的位置.(不仅仅是电脑/手机,路由器,服务器也有IP地址).

网段划分

网段划分是为了方便组网,因为比如公司,学校等人多,上网设备也多,网络环境复杂.

IP地址分为两个部分,网络号和主机号.

网络号:保证相互连接的两个网段具有不同的标识;

主机号:同一网段中,主机之间具有相同的网络号,但是必须由不同的主机号;

注意:两个相邻的局域网,网络号不能相同(一个路由器连接的网络就是相邻的).

不同的子网其实就是把网络号相同的主机放到一起;

如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号是一致的,但是主机号必须不能和子网中的其它主机重复.

通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的IP地址都不相同.

那么问题来了,手动管理子网内的IP,是一个相当麻烦的事情.

有一种技术叫做DHCP,能够自动给子网内新增主机结点分配IP地址,避免了手动管理IP的不便

一般路由器都带有DHCP功能,因此路由器也可以看作是一个DHCP服务器.

过去(上古时期)曾经提出一种划分网络和主机号的方案(直接通过IP的前缀来起到设置网段的效果),把所有IP地址分为5类,如下图所示.

• 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 

随着互联网的快速发展,这种划分方案的局限性很快就体现了出来,大多数组织都申请B类网络地址,导致B类地址很快就消耗完了,而A类却浪费了大量的地址;(比较死板)

例如,申请了一个B类地址,理论上一个子网内能允许6w5k多个主机.A类地址的子网内的主机数中更多.

然而实际的网络架设中,不会存在一个子网内中有这么多个情况.因此大量的IP地址都被浪费掉了.

针对这种情况又提出了新的方案,称为CIDR:

引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;

子网掩码也是一个32位的正整数.通常用一段"0"来结尾;

将IP地址和子网掩码进行"按位与"操作,得到的结果就是网络号;

网络号和主机号的划分与这个IP地址是A类,B类,还是C类无关;

特殊的IP地址

将IP地址中的主机地址全部设为0(eg.192.168.0.0),就成为了网络号,代表这个局域网(这个IP比较特殊,不能分配给某个主机).

将IP地址中的主机地址全部设为1(eg.192.168.0.255),就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包(UDP);  广播地址:往广播地址上发信息,局域网中所有设备都能收到(一对多的传输).典型场景:手机投屏,电脑投屏.(要求:必须是同一个局域网) .连上wifi点投屏键,就提示了可投屏设备(通过广播完成).

127.*的IP地址(本机)用于本机环回测试,通常是127.0.0.1.

IP地址的数量限制

我们知道,IP地址(IPv4)是一个4字节32位的正整数.那么一共有2的32次方个IP地址,大概是43亿左右.而TCP/IP规定,每个主机都需要有一个IP地址.

这意味着,一共有43亿台主机能接入网络吗?

实际上,由于一些特殊IP地址的存在,数量远不足43亿;另外IP地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个IP地址.

CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率,减小了浪费,但是IP地址的绝对上限没有增加),仍然不是很够用.需要用三种方法来解决:

动态分配IP地址:只给接入网络的设备分配IP地址.因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址是不一定相同的;

NAT技术(后面重点介绍);

IPv6:IPv6并不是IPv4的简单升级版,这是两个互不相干的协议,彼此并不兼容;IPv6用16字节128位来表示一个IP地址;但是目前IPv6还没有普及;(IPv6的报头和IPv4是不兼容的,引入IPv6就意味着当前网络设备(路由器不支持),就需要更换为IPv6的设备).

 私有IP地址和公网IP地址

如果一个组织内部组建局域网,IP地址只用于局域网中的通信,而不是直接连接到Internet上,理论上,使用任意的IP地址都可以,但是RFC1918规定了用于组建局域网的私有IP地址.

公网设备访问公网设备,没有问题,直接访问即可;

局域网设备访问局域网设备(同一局域网中),没有问题;

局域网设备访问局域网设备(不同局域网当中),不允许访问;

局域网访问公网就要对局域网设备进行IP地址转换;

公网访问局域网设备,不允许访问.

10.*,前8位是网络号,共16777216个地址;

172.16.到172.31.,前12位是网络号,共1048576个地址

192.168.*,前16位是网络号,共65536个地址;

包含在这个范围内的都成为私有IP,其余为全局IP(公网IP);

你的设备只要连接上路由器,此时路由器就会给你自动分配;

一个路由器LAN口连接的主机,都从属于当前这个路由器的子网中;

不同的路由器,子网IP实际上都是一样的(通常是192.168.1.1).子网内的主机IP地址不能重复.但是子网之间的IP地址就可以重复了.

每一个家用路由器,其实又作为运营商路由器的子网中一个结点,这样运营商路由器就会有很多级,最外层的运营商路由器,WAN口IP就是一个公网IP了.

子网内主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP.(NAT技术).

如果希望我们自己实现的服务器程序,能够在公网中被访问到,就需要把程序部署在一台具有外网IP的服务器上.这样的服务器可以自行购买.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue的一些基础设置

1.浏览器控制台显示Vue 设置找到扩展,搜索Vue 下载这个 然后 点击扩展按钮 点击详细信息 选择这个,然后重启一下就好了 ——————————————————————————————————————————— 2.优化工程结构 src的components里要…

wayland(xdg_wm_base) + egl + opengles 纹理贴图进阶实例(四)

文章目录 前言一、使用gstreamer 获取 pattern 图片二、代码实例1. pattern 图片作为纹理数据源的代码实例1.1 基于opengles2.0 接口的 egl_wayland_texture2_1.c1.2 基于opengles3.0 接口的 egl_wayland_texture3_1.c2. xdg-shell-client-protocol.h 和 xdg-shell-protocol.c3…

IDEA中的神仙插件——Smart Input (自动切换输入法)

IDEA中的神仙插件——Smart Input (自动切换输入法) 设置 更多功能详见官方文档:Windows版SmartInput使用入门

面试经典150题——串联所有单词的子串(困难)

"Opportunities dont happen, you create them." ​ - Chris Grosser 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力求解 遇见这种可能刚开始没什么思路的问题,先试着按照人的思维来求解该题目。对于一个人来讲,我想要找到 s 字符串中…

Hive拉链表设计、实现、总结

水善利万物而不争,处众人之所恶,故几于道💦 文章目录 环境介绍实现1. 初始化拉链表2. 后续拉链表数据的更新 总结彩蛋 - 想清空表的数据:转成内部表,清空数据后,再转成外部表,将分区目录删掉&am…

无心剑英译仓央嘉措《永在我心》

永在我心 Forever in My Heart 仓央嘉措 By Tsangyang Gyatso 这么多年 你一直在我心口幽居 我放下过天地 放下过万物 却从未放下过你 so many years slipped away you’ve been living in my heart I’ve dropped heaven and earth even dropped everything but never dr…

OWASP TOP10

OWASP TOP10 OWASP网址:http://ww.owasp.org.cn A01:失效的访问控制 例如:越权漏洞 案例1: 正常:每个人登录教务系统,只能查询自己的成绩信息 漏洞:张三登录后可以查看自己的成绩 例如&…

人工智能学习与实训笔记(五):神经网络之推荐系统处理

目录 ​​​​​​​七、智能推荐系统处理 7.1 常用的推荐系统算法 7.2 如何实现推荐​​​​​​​ 7.3 基于飞桨实现的电影推荐模型 7.3.1 电影数据类型 7.3.2 数据处理 7.3.4 数据读取器 7.3.4 网络构建 7.3.4.1用户特征提取 7.3.4.2 电影特征提取 7.3.4.3 相似度…

智能网卡(SmartNIC):增强网络性能

在当今的数字时代,网络性能和数据安全是各行各业面临的关键挑战。智能网卡是一项颠覆性的技术创新,对增强网络性能和加强数据安全性具有关键推动作用。本文旨在探讨智能网卡的工作原理及其在不同应用场景中的重要作用。 什么是智能网卡? 智…

Rust 基本环境安装

rust 基本介绍请看上一篇文章:rust 介绍 rustup 介绍 rustup 是 Rust 语言的安装器和版本管理工具。通过 rustup,可以轻松地安装 Rust 编译器(rustc)、标准库和文档。它也允许你切换不同的 Rust 版本或目标平台,以及…

太以假乱真了,大家小心

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

.NET Core MongoDB数据仓储和工作单元模式封装

前言 上一章我们把系统所需要的MongoDB集合设计好了,这一章我们的主要任务是使用.NET Core应用程序连接MongoDB并且封装MongoDB数据仓储和工作单元模式,因为本章内容涵盖的有点多关于仓储和工作单元的使用就放到下一章节中讲解了。仓储模式(R…

SpringMVC速成(二)

文章目录 SpringMVC速成(二)1.SSM整合1.1 流程分析1.2 整合配置步骤1:创建Maven的web项目步骤2:添加依赖步骤3:创建项目包结构步骤4:创建SpringConfig配置类步骤5:创建JdbcConfig配置类步骤6:创建MybatisConfig配置类步骤7:创建jdbc.properti…

云计算基础-虚拟化概述

虚拟化概述 虚拟化是一种资源管理技术,能够将计算机的各种实体资源(如CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来并可供分割、组合为一个或多个逻辑上的资源。这种技术通过在计算机硬件上创建一个抽象层,将单台…

《UE5_C++多人TPS完整教程》学习笔记15 ——《P16 会话接口委托(Session Interface Delegates)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P16 会话接口委托(Session Interface Delegates)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主&#xf…

Matplotlib plt.scatter:从入门到精通,只需一篇文章!

Matplotlib plt.scatter:从入门到精通,只需一篇文章!🚀 利用Matplotlib进行数据可视化示例 🌵文章目录🌵 一、plt.scatter入门:轻松迈出第一步 👣二、进阶探索:plt.scatt…

大文件上传如何做断点续传?

文章目录 一、是什么分片上传断点续传 二、实现思路三、使用场景小结 参考文献 一、是什么 不管怎样简单的需求,在量级达到一定层次时,都会变得异常复杂 文件上传简单,文件变大就复杂 上传大文件时,以下几个变量会影响我们的用…

用HTML和CSS打造跨年烟花秀视觉盛宴

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>跨年烟花秀</title><meta name"viewport" content"widthdevi…

poetry,一个好用的Python项目依赖管理库

🏷️个人主页:鼠鼠我捏,要死了捏的主页 🏷️付费专栏:Python专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前言 在 Python 开发领域,项目依赖管理是一个至关重要的问题。Python Poetry 是一个现代化的项目依赖管理工具,旨在简化 Python 项目的依赖管理和打包…

【JavaSE】数据类型和运算符

目录​​​​​​​ 前言 数据类型 1. 数据类型的分类 2. 基本数据类型 变量 1. 概叙 2. 整型变量 3. 字节型 & 短整型 & 长整型变量 4. 单 / 双精度浮点型变量 5. 字符型变量 6. 布尔型变量 类型转换 1. 自动类型转换(隐式) 2. 强制类型转换(显式) 补…