IP 协议的相关特性(部分)

IP 协议的报文格式

4位版本号

        用来表示IP协议的版本,现有的IP协议只有两个版本,IPv4,IPv6。

4位首部长度:

        设定和TCP的首部长度一样

8位服务类型:

        (真正只有4位才有效果),类似于模式/形态 切换。3位优先权字段(已经弃用),4TOS字段,和1位保留字段(必须置为0)。4TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。

16位总长度

        IP数据报整体占多少个字节。16位总长度为64kb,但是IP协议,自身支持“拆包组包”机制,如果需要携带比较长的数据的时候,IP协议会自动的把一个数据报拆成多个数据报,接收方在进行分用时,也会把多个数据报合并成一个数据报。

16位标识:

        唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的。

13位分片偏移
        是分片相对于原始IP 报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。因此当一个数据报被分片后,数字小的为前面的数据报,数字大的为后面的数据报。
3位标志字段:
        第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTUIP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为0,其他是1。类似于一个结束标记。
8位生存时间(TTL
        数据报到达目的地的最大报文跳数。一般是64 。每次经过一个路由,TTL -= 1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环。
8位协议:
        表示上层(传输层)协议的类型。
16位头部校验和:
        使用CRC 进行校验,来鉴别头部是否损坏,只需要校验首部。
要想知道什么是源IP,就得知道什么是IP。 IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说, IP 地址用于定位主机的网络地址(设备所在) 。就像发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。 IP 格式: IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。 特殊 IP:

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

本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于

开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。IP协议有两个版本,IPv4IPv6。我们整个的课程,凡是提到IP协议,没有特殊说明的,默认都是指IPv4。 IPv4数量=2^32,大约43亿左右,而TCP/IP协议规定,每个主机都需要有一个IP地址。对于全世界 计算机来说,这个数量是不够的,所以后来推出了IPv6(长度128)。但因为目前IPv4还广泛的使用,且可以使用其他技术来解决IP地址不足的问题,所以IPv6也就没有普及。

        那么IPv4的地址不够用怎么办?有这几种方法。

1)动态分配IP(DHCP):你这个设备不会一直需要上网,等需要上网时,就分配IP,不需要时就不先分配。不过这种方法只能缓解,但不能根治。
2)NAT机制(网络地址转换):把IP地址分成两大类,1.内网IP:不同的局域网的IP地址可以相同,同一个局域网的内网IP地址不可以相同。此时,大量的设配可以使用同样的IP了(在不同的局域网),IP不够用的问题就得到了很大的改善。2.外网IP:外网IP不能重复。
        如果是同一个局域网内部之间的设备进行通信,那肯定可以,但是如果A局域网的设备想和B局域网中的设备通信,这两个设备的IP地址可能相同,哪怎么办?这种情况是禁止的,如果想通信,就需要有一个带有外网IP的设备进行中转。那么局域网中的设备如何访问带有外网IP的设备呢?当局域网中的设备访问带有外网IP的设备时,如向一个服务器发送信息,这个信息经过层层中转,到达电信路由器(带有外网IP),然后触发NAT机制,此时这个外网IP就会将信息中的源IP替换成这个外网IP,替换后会维护一张映射表,描述着替换前的IP和替换后的IP,然后在发送给该服务器,当服务器返回响应后给这个外网IP,然后这个外网IP就根据这个映射表将目的IP给替换成原来得IP,这样就完成了交互。上述过程是简化的,其实在到达电信客户端时就可能经历过多次NAT机制。不过NAT的缺点也很明显,如效率不高,非常繁琐,不方便直接访问局域网内的设备,也不能真正解决IP地址不够用的情况等。而IPv6因为数量够大,它才真正解决了IP地址不够用的情况,不过IPv6和IPv4不兼容。那么为什么IPv6没有大规模普及呢?可能是因为要想升级IPv6,就需要更换路由器等设备,而IPv4则只需要路由器厂商开发出新版本的软件,升级软件,即可直接支持,这也是NAT的最大优势,“纯软件实现”。
        IP地址分为两个部分,网络号和主机号
1)网络号:标识网段,相互连接的两个网段具有不同的标识
2)标识主机,同一个网段内,主机之间具有相同的网络号,但是必须具有不同的主机号。
同一个局域网中设备的网络号必须相同,主机号必须不同,不同的局域网的网络号必须不同。那么如何分辨哪个部分是网络号?哪个部分是主机号呢?这就要通过子网掩码来识别,子网掩码和IP地址一样,也是4字节,32位整数,左侧必须是连续的1,右侧必须是连续的0,0和1不能穿插,n个比特位为1的是网络号,m个比特位为0的为主机号。如有20个比特位为1,12个比特位为0,那么IP地址前20个比特位为网络号,后12个比特位为主机号。
        
        上述说的是IP协议如何管理地址,IP协议还有另一个重要功能:路由选择。当传输信息时,由于路由器无法了解全貌,只能认识部分网络情况(和它相邻的设备情况),在这个前提下,进行路由转发,就只能“摸着石头过河”,因此路由器转发数据的过程相当于问路,每个路由器内部有一个数据结构路由表,数据报到达路由器的时候,就需要查询路由表(问路),如果查到了,就可以直接按照这个方向继续转发,数据就能到达。如果没查到,路由器会给一个默认的方向(下一跳地址),沿着默认方向走(往往是走到上一级路由器)。

 

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

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

相关文章

智慧停车场项目-SpringBoot的Smart-parking

基于SpringBoot的Smart-parking 智慧停车场项目 介绍 基于 SpringBoot Vue 的智能停车场项目 系统首页 作者 如需本项目源代码,可扫码或者VX:zxd1534124905联系作者。 基础环境 JDK1.8、Maven、Mysql、IntelliJ IDEA、payCloud 相关组件 ok-adminvueiViewec…

Vue笔记_插件组件_lucky-canvas抽奖转盘

文章目录 官网使用(vue2.x)[1] 下载[2] 引入[3] 使用配置项-width/height配置项-blocks配置项-prizes配置项-buttons优化案例 lucky-canvas 是一个基于 Js Canvas 的抽奖 web 前端组件,提供 大转盘和 九宫格两种抽奖界面,UI 精美,功能强大…

PhotoShop批量压缩图片

打开photoshop,在顶部的菜单栏选择文件》脚本》图像处理器。 选择合适的参数,运行即可。

IDEA如何拉取gitee项目?

1.登录gitee 说明:打开idea,在设置上面搜索框输入gitee,然后登录gitee注册的账号。 2. 创建gitee仓库 说明:创建idea中的gitee仓库。 3.寻找项目文件 说明:为需要添加gitee仓库的项目进行添加。 4.项目右键 说明&a…

【API篇】五、Flink分流合流API

文章目录 1、filter算子实现分流2、分流:使用侧输出流3、合流:union4、合流:connect5、connect案例 分流,很形象的一个词,就像一条大河,遇到岸边有分叉的,而形成了主流和测流。对于数据流也一样…

Go实现CORS(跨域)

引言 很多时候,需要允许Web应用程序在不同域之间(跨域)实现共享资源。本文将简介跨域、CORS的概念,以及如何在Golang中如何实现CORS。 什么是跨域 如果两个 URL 的协议、端口(如果有指定的话)和主机都相…

【Go之道】探索Go语言之旅:基础与进阶指南

在这个数字化快速发展的时代,掌握一门编程语言已成为必备技能。今天,我将带你踏上【Go之道】,探索Go语言的魅力,为你的编程之旅助力。 一、Go语言概述 Go,又称为Golang,是由Google设计和开发的一种静态类型…

Java中的代码重构:技巧、优秀实践与方法

什么是 Java 代码重构? Java 代码重构是一种在不影响代码外部行为的前提下进行的代码优化,它通过渐进和小规模的优化来改善现有代码的结构和质量。重构的目标是提高代码的可读性、性能、可维护性和效率等。 Martin Fowler 是这个领域的权威的大牛和非常…

QML(11)——qml界面之间通信方式详解

目录 一、属性绑定1、直接绑定 property01: property02实例代码 2、条件绑定 Qt.binding实例代码 二、信号传递1、on<Property>Changed实例代码 2、on<Signal>实例代码 3、条件信号传递 connect实例代码 4、Connections 一、属性绑定 属性绑定具有持续性 1、直接…

【python】什么是网络爬虫?

什么是网络爬虫&#xff1f; 网络爬虫是一种自动化程序&#xff0c;用于从互联网上抓取信息。这些信息可以是文本、图像、视频、数据表格等各种形式的数据。爬虫程序通过模拟浏览器的行为&#xff0c;自动访问网页、抓取内容&#xff0c;并将其保存或处理。这对于数据挖掘、搜索…

osg实现三次样条Cardinal曲线

目录 1. 前言 2. 预备知识 3. Qt实现的二维Cardinal曲线 4. 用osg实现三维Cardinal曲线 4.1. 工具/ 原料 4.2. 代码实现 1. 前言 在设计矢量图案的时候&#xff0c;我们常常需要用到曲线来表达物体造型&#xff0c;单纯用鼠标轨迹绘制显然是不足的。于是我们希望能够实现这…

竞赛 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…