首页 > 其他分享 >IP协议详解

IP协议详解

时间:2024-10-20 21:52:36浏览次数:3  
标签:协议 IP Mac 详解 IP地址 设备 数据包 路由器

目录

网络层

一,地址管理

1,解决IP不够用的的问题:

方案一:动态分配IP地址

方案二:NAT 网络地址转换

方案三:IPv6

2,网络划分

特殊的IP地址:

二,路由选择

数据链路层


网络层

一,地址管理

实际上只有两取值4/6(4->IPv4.6->IPv6)

IP的报头也是可变长的0->15,当15的时候,报头长度为60

8位服务类型(Type Of Service): 3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置为 0). 4位TOS分别表⽰: 最⼩延时, 最⼤吞吐量, 最⾼可靠性, 最⼩成本. 这四者相互冲突, 只能选择⼀个. 对于ssh/telnet这样的应⽤程序, 最⼩延时⽐较重要; 对于ftp这样的程序, 最⼤吞吐量⽐较重要.

最⼩延时:数据从A到B时间消耗的最短

最⼤吞吐量:数据从A到B单位时间内,传输的数量更多

最⾼可靠性:IP协议虽然那个不像TCP那样就要严密的可靠性机制,但是IP也有一些机制会影响到丢包的概率

最⼩成本:设备消耗的资源少

:64KB,但是并不代表不能传输超过64KB的数据.IP协议内置了拆包组包机制,单个IP数据包确实没有办法超过64KB,但是并不代表不能超过64KB的数据,IP协议会自动把大的数据包,拆成多个IP数据包携带传输,在接收方在进行拼装

IP协议会自动拆包,同一个载荷的数据,会被分成多份,交给多个IP数据包来携带,多个IP数据包,16标识是相同数值.13位片偏移决定组包的时候数据包的位置,3位标志位,只有2个有效,其中一个,表示这个包是否需要组包(是否是拆包的一部分),另一个表示当前包是否是组包中的最后一个单位,剩下一个是保留位

如果想使用UDP实现实现一个超过64KB的数据包,应该如何做呢实现方案,参考IP,设置一个标识,约定标识相同的数据就应该进行组包,引入片偏移,约定组包的时候的先后顺序,引入标志位,区分是否为最后一个包以及是否需要组包

一个数据包最多在网络上的存活的时间,例如构造一个IP数据包,IP地址是错的,所以就需要一个时间上限,如果到时间还没有传输到,那么就要丢弃掉,防止消耗更多的网络资源,TTL的单位并不是s/min.而是"次数",指的是经路由器转发的次数.发送一个IP数据包的时候,TTL会有一个初始值,数据报每经过一次路由器就会TTL-1(经过交换机,不减),一旦PPL减到0,此时数据包就会被当前路由器丢掉

TTL64够用吗??

答:非常充裕的.每个路由器虽然不能感受到整个网络的全貌,但是都能够了解网络结构的一部分(具体来说,每个路由器都认识那些设备是与他相邻的)

IP数据包中,携带的载荷是那种传输层的数据包,通过不同的数值,感知到接下来要把数据交给TCP还是UDP还是其他协议

验证数据在传输中是否出错(只针对首部,IP报头)

IP地址,是一个32位的整数,(4个字节)通过三个圆点分隔开,每一个部分是一个字节,范围是0-255,点分十进制

IP地址是用来标记一个网络设备,所以期望IP是唯一的,32为表示的数据范围0->42亿9千万

1,解决IP不够用的的问题:

方案一:动态分配IP地址

一个设备上网就分配IP地址,不上网就先不分配

方案二:NAT 网络地址转换

以一当千,使用一个IP代表一大批设备

把IP地址分成了两大类:

分别是内网IP/私网[10*  172.16-172.31.*   192.168*]满足其中一种就是私网IP

IP外网IP/公网IP

有几个网卡就有几个IP.要求公网IP必须是唯一的,但是私网IP是允许重复的(在不同局域网是允许重复的)

NAT网络地址转化:一个人设备在进行上网的时候,IP数据包中的IP地址就会被NAT设备(通常就是路由器)进行自动修改

1,同一个局域网内,主机A访问主机B,不会涉及NAT机制

2,公网上的设备访问公网上的设备,不会涉及NAT

3,一个局域网中的主机A访问另一个局域网中的主机B,在NAT机制中是不允许的

4,局域网内部设备A,公网上的设备B,NAT机制主要就是针对这个情况进行生效的

相当于一个公网IP就可以代表一大批设备

当有多个主机给应用程序发送数据包:

是否可能出现不同主机上的源端口号相同:这个概率非常小,客户端这里的源端口号是随机分配的,是操作系统随机分配的空闲端口号

如果真的有两个相同的源端口号:路由器在建立映射关系的时候,也可以将端口号换成其他不重复的端口(NAPT)

NAT的缺点:网络环境过于复杂,替换过程中,每一层路由器就需要维护映射关系,每一次转发数据都需要查询映射关系,

方案三:IPv6

IPv4使用32为4个字节表示IP地址(2^32)

IPv6使用128位16字节表示IP地址 (2^128),IPv6 的地址空间非常巨大(可以给地球上每一粒沙子都分配一个地址)

之所以IPv6不是主流,是应为IPv4和ipv6不兼容,想要使用IPv6就需要换设备,在IPv6提出的年代,并不具备这样的条件,但是NAT机制,只需要给设备升级软件就可以.但是IPv6 在国内的普及程度很高,高达超过70%.2018-2019年左右的的时候工信部鼎力支持.

虽然当前大规模普及了IPv6 但实际上上网的时候任然走IPv4 协议(IPv4 和IPv6并存)

2,网络划分

IP地址中的"网络划分"组网(组建网络):组网的时候,就需要针对每一个上网的设备的IP(包括路由器的IP)进行设置,家庭网络比较简单的网络结构来说,路由器都具有"自动分配IP"的功能,对于比较复杂的网络结构就需要手动设置.

IP地址,32位整数,一分为二,左半部分是网络号,右半部分是主机号,需要通过"子网掩码"(CIDR)来区分网络号和主机号,子网掩码也是32为整数,左半部分都是1,右半部分都是0,不能0,1穿插出现.子网掩码左边有多少个1,就说明IP地址左边有多少的个bit是网络号

网络中规定:同一个局域网中的设备,网络号必须相同,主机号必须不同,相邻两个局域网中,网络号必须不同

例如,在一个局域网中,如果某个设备的网络号不相同就无法上网,某一个设备虽然网络号相同,但是如果主机号也相同也无法上网

除了基于"子网掩码"的方式进行划分之外,还有ABCDE五类网络,现在已经看不到这种方式了

特殊的IP地址:

1,主机号为全0(二进制),这个IP就是表示当前网段(相当于网络号)

2,主机号为全1(二进制),称为广播IP.往这个IP地址上发送数据包,就相当于给整个局域网所有的设备都发送了一遍这个数据包

很多时候看到的"业务上的广播"都是通过应用层编写代码来实现的,而不是通过广播IP,例如直播,进行直播的时候,老师会将声音和画面传到应用程序,然后应用程序遍历直播间的每一个人,将画面和声音一次发送给他们.

手机投屏到电视上:手机和电视需要到同一个局域网中,手机上知道有多少个允许投屏的设备,这样的功能就可以基于广播IP实现,在手机触发投屏按钮的时候,往对应的广播IP上发一个数据包(UDP)(TCP不支持广播)如果收到这个数据包的设备没有投屏功能就不做反应,但是一个有投屏功能就会返回一个响应,返回自己的IP是多少

3,127.* 环回IP(lookback)自发自收,给这个IP发一个数据,设备就会从这个IP上再收到一个相同的数据,自己发送给自己,使用环回IP一般是进行测试,一般使用的环回IP为127.0.0.1

二,路由选择

网络是复杂度,从一个节点到另一个节点之间会存在许多路线.,每个路由器只知道附近的设备,无法知道网络结构的全貌,所以无法得到"最优解",只能得到"较优解"

路由表(路由器内部维护的数据结构)路由表就类似于hash一样,可以就相当于IP地址,value就是对应的网络接口,IP数据包到达路由器就会有一个路由表查表操作,IP数据包中的目的IP,查一查个目的IP在路由表中是否存在,如果查到了,自然就会按照路由表指向的方向转发即可,如果没有查到,路由表就会有一个"默认的表项"(下一跳),默认指向一个更高级的路由器(认识的设备更广),如果这个路由器也查不到,也有下一跳,到更高级的路由器......

真实的转发过程,会更加复杂

1)路由表里面的东西是怎样来的,自动获取(路由表生成算法),手工配置(网络管理员)

2)真实的网络结构(广域网的网络结构是怎样的)

数据链路层

以太网

帧尾是校验和,帧头包含目的地址(Mac地址/物理地址),类型:描述了载荷中是怎样的数据(ARP/RARP不传输业务数据,而是给转发功能提供辅助功能)

ARP数据包/ARP协议:可以视为当前设备获得到周围设备的IP地址和Mac地址之间的映关系.IP协议路由器转发过程中,这个过程都是拿着IP地址来进行查路由表,从而得到的是"网络接口"我们还需要获得更具体的Mac地址的设备,这时候就涉及到IP和Mac的映射关系.ARP协议,就是建立上述映射关系,当前设备接入网络的时候,就会广播发送ARP报文,收到ARP报文请求的设备就会返回ARP响应,响应中就会告知自己的IP和Mac

1500是数据链路层数据帧最大的载荷长度,1500字节,相当于1.5KB,这个数字称之为MTU,MTU和硬件直接相关,不同的硬件设备,对应了不同数据链路层协议,对应了不同的MTU,MTU的限制就会对上层协议产生直接的影响(IP协议),IP协议能拆包组包,实际上IP协议更多的是来应对MTU的限制,当一个数据包到达1500字节时,机会自动进行拆包了

1,Mac地址和IP地址的区别:Mac地址使用6个字节表示,IP地址是4个字节,Mac地址仍然可以给每个设备分配一个地址值,一般一个网卡,在出厂设置时,Mac地址就分配好了,写死了(不能改).Mac地址也可以作为身份标识(例如,绑定设备功能,就是通过Mac来实现的)

2,Mac地址是使用在数据链路层,用来实现相邻设备之间的数据转发,IP地址使用在网络层,立足于转发流程,进行路径规划. 理论上,搞一套地址就可以,也可以在微观层面上完成所有的工作.实际上两个都留下来了,分别负责不同的任务

例如:从伦敦到西安;

第一步:路径规划(网络层)

伦敦->北京->西安

伦敦->上海->西安

第二步:实施

1)源IP:伦敦;目的IP:西安;源MacIP:伦敦;目的MacIP北京

2)源IP:伦敦;目的IP:西安;源MacIP:北京;目的MacIP西安

以太网数据帧里面的Mac地址,随着转发的过程,时刻发生改变(每经过一个交换机/路由器都会产生上述选择)

DNS应用层协议,也可以认为是一套系统,域名解析系统.域名=>网址,代表了IP地址,域名和IP地址存在对应关系,一般是一个域名对应一个或多个IP地址,也有可能多个域名对应一个IP地址.

把域名转换成IP地址,这样的一套系统称之为 "域名解析系统".早期的域名解析系统非常简单,通过一个文件(hosts)来实现.网站太多了,域名也有很多,IP地址也有很多,靠文件来维护,是不现实的,为了解决上述问题,搭建了DNS服务器,把hosts文件放到DNS服务器里,当某个电脑需要域名解析,就访问DNS服务器.世界上有有诸多设备,每时每刻都在访问DNS服务器,DNS服务器能顶住这么大的访问量吗.=>为解决上述问题,多搞出来一些DNS服务器,称之为"镜像服务器".事实上,世界上有数不清的镜像服务器,往往是由一些运营商/互联网公司维护的,每个人上网的时候,就会就近访问DNS服务器.

一旦数据有变更,针对这种变更,需要约定某个服务器为基准,一旦有变更,就修改这个基准服务器,其他服务器就会从基准的服务网同步数据,这种服务器称之为"根服务器".

标签:协议,IP,Mac,详解,IP地址,设备,数据包,路由器
From: https://blog.csdn.net/2302_81705247/article/details/142567606

相关文章

  • 使用 JavaScript (Node.js) 实现验证码识别与自动化登录
    安装所需依赖首先,确保你已经安装了Node.js。然后,使用npm安装所需的库:bashnpminstallaxiosjimptesseract.js2.下载验证码图片使用axios下载验证码图片并保存到本地:更多内容联系1436423940javascriptconstfs=require('fs');constaxios=require('axios');......
  • 域名和IP地址收集
    实验介绍:被动信息收集是指通过搜索引擎数据库等,搜索目标的关键信息,较为隐蔽。主动信息收集则是需要主动向目标发送数据包一:域名信息收集域名用于数据传输时对计算机的定位dns使域名和IP相互映射whois是查询域名的ip和所有者的数据库1.Netcraft提供whois服务https://siter......
  • CSP2024 前集训:多校A层冲刺NOIP2024模拟赛08
    前言先痛骂没良心出题人,T1\(n\sqrtn\)多大你刚好给多大,一点不多给,T2才是签到题,因为放了T2位置打了暴力就去想T3了,我是唐氏,谁让你T1、T2swap的?T3实则三道题。但是还是感觉T1更简单啊,\(5e4\)搁哪儿摆着呢一眼\(O(n\sqrtn)\),甚至空间也是这么多,太明显了。挂分挂......
  • 对于 CF,AT,CSP-S,NOIP,我想说
    尽管我是div2一题水平,但是......
  • logback.xml配置文件详解
    原文链接:logback.xml配置文件详解–每天进步一点点上一篇文章介绍了springboot配置自定义日志文件logback.xml今天这篇文章简单介绍一下logback.xml配置文件的一些含义。1.基本结构logback的基本结构如下图:configuration表示配置的根节点appender用来格式化日志输出......
  • 多校A层冲刺NOIP2024模拟赛09
    多校A层冲刺NOIP2024模拟赛09考试唐完了,T2、T4都挂了100分,人麻了。排列最小生成树给定一个\(1,2,\dots,n\)的排列\(p_1,p_2,\dots,p_n\)。构造一个\(n\)个点的完全无向图,节点编号分别是\(1,2,\dots,n\)。节点i和节点j之间的边边权为\(|pi−pj|×|i......
  • 20.ZGC详解
    一、ZGC概念1.介绍  ZGC(The Z Garbage Collector)是JDK 11中推出的一款追求极致低延迟的垃圾收集器;   停顿时间不超过10ms(JDK16已经达到不超过1ms);   停顿时间不会随着堆的大小,或者活跃对象的大小而增加;   支持8MB~4TB级别的堆,JDK15后已经可以支......
  • 19.JVM调优常量池详解
    一、GC日志详解1.常用参数对于java应用我们可以通过一些配置把程序运行过程中的gc日志全部打印出来,然后分析gc日志得到关键性指标,分析GC原因,调优JVM参数。打印GC日志方法,在JVM参数里增加参数,%t代表时间-Xloggc:./gc-%t.log-XX:+PrintGCDetails-XX:+PrintGCDateStamps-X......
  • 集成Spring Security详解
    集成SpringSecurity详解一、SpringSecurity简介SpringSecurity是一个功能强大且高度可定制的身份验证和访问控制框架,它专注于为Java应用程序提供全面的安全解决方案。作为Spring项目的一部分,SpringSecurity继承了Spring框架的灵活性和可扩展性,能够轻松地集成到任何Spr......
  • Modbus通信协议
    Modbus是什么一种串行通信协议,是Modicon公司(现在的施耐德电气)于1979年发表,用于PLC之间的通信,已成为工业领域通信协议事实上的业界标准,并且是现在工业电子设备之间常用的连接方式。应用场景广泛应用于PLC、传感器、继电器等设备之间的通信。协议版本ModbusTCP使用以太网,将......