JAVAEE---网络原理3

网络层

网络层协议是--->IP协议

IP协议报头:

具体来解释一下IP协议报头中的各部分的意思:

(1)4位版本:IP协议的版本号,当前主要讨论IPv4(还有一个是IPv6咱不讨论)

(2)4位首部长度:IP的报头是可变的,带有选项。4位的取值范围是0-15,这里的单位是4字节,如果取值是1111---->15,实际表示的首部长度就是60字节

(3)TOS(日常开发中很少关注):说是8位,其实只有4位是有效的。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这里的TOS相当于是切换形态(同一时刻只能取这四种中的一种状态)

(4)16位总长度:16位--->最大长度64k,单个IP数据报最大长度不能超过64k

那么,如果要构造一个更长的数据报(超过了64k)怎么办

解决办法-------->IP协议自身实现了分包和组包这样的操作

(5):这三个字段就是用来进行分包和组包的

我们来解释一下什么事分包和组包----->当IP数据报太长的时候,IP协议就会把这个大包拆成多个小包,保证每个小包不超过64k 

看下面的例子:

好,那么下面有一个问题,我现在把大包拆成多个小包了,那么我怎么知道这些小包是来自同一个大包的呢?

答案是---->(5)中的16位标识.每个小包会有一个"标识",来自同一个大包的小包的"标识"是一样的

好的,那么这个问题解决了,那么我还有问题,就是我到时候组包的时候,我们怎么排小包的顺序呢?

答案是---->(5)中的13位片偏移.每个小包会有一个"片偏移",有点像编号的意思,但是啊但是也不单纯是像编号一样,基于"片偏移"可以算出中间差多少空间(比如就像下图这样)

除了"标识"和"片偏移",每个小包上还会有一个"结束标记"------>(5)中的3位标志.3位中只有一位是好使的,0代表有后续,1代表是最后一个包(结束标记)


面试题:

如何基于UDP实现分包组包呢?

答案----->照抄IP中的分包组包 


 (6):表示一个IP数据报在网络上还能存在多久,这里的单位是转发次数

IP数据报被发送的时候会有一个初始的TTL(比较常见的取值是128或64),IP数据报每次经过一个路由器,TTL就会-1.如果TTL减到0,此时收到这个包的路由器就会把这个包丢弃.正常的IP数据报都会在既定的TTL内到达,但有的包中的IP地址可能永远到不了,像这样的包,也不可能在网络上无休止的转发.

(7): 传输层使用的是哪种协议,TCP或UDP都有不同的取值

(8):用来校验数据是否正确

(9) :源IP表示发件人地址,目的IP表示收件人地址


 IP协议完成两方面工作:

1.地址管理

2.路由选择

我们先说地址管理

我们看到的IP地址是一个点分十进制构成的数据

IP地址分成两个部分:网络号+主机号.网络号描述当前的网段信息(局域网的标识) ,主机号用来区分局域网内部的主机

我们要知道,上面举的IP地址的例子他的网络号占3个字节,但是其实网络号的bit位不是固定的,到底网络号占IP地址的前多少个bit位是不确定的,这要看"子网掩码"(用来表示多少个bit位是网络号,也是一个32位点分十进制的整数),子网掩码的左边都是1,右边都是0,(不会有1,0混着排的情况),左边多少个1就表示哪些位是网络号,剩下的0就是哪些位是主机号

就比如像下面这样:


我们需要知道,IP地址网段划分是通过子网掩码的方式划分的,但是在有子网掩码之前,我们是通过"分类"的方式来划分的,把IP地址分成了A,B,C,D,E五类(这个笔试有可能考一下下


规定:同一个局域网里,主机之间的网络号是相同的,主机号是不相同的.

         两个相邻的局域网(同一个路由器连接的)的网络号是不同的

举一个下图的例子:

一些特殊的IP地址

1.如果IP的主机号是全0,此IP就表示网络号(局域网里的一个正常的设备,主机号不能设为0)

2.如果IP的主机号位全1,此IP就表示"广播地址",往这个广播地址上发的消息,整个局域网中都能收到

3.如果IP是127开头,此IP就表示"环回IP",表示主机自己,比如说127.0.0.1

4.如果IP是10开头/192.168开头/172.16-172.31开头,就表示此IP是一个局域网内部的IP(内网IP).除此之外,剩下的IP称为外网IP(直接在广域网上使用的IP)

规定:外网IP一定是唯一的,每个外网IP都对应到唯一的一个设备;内网IP只在当前局域网中是唯一的,不同的局域网中可以有相同的内网IP的设备

上面说到内网IP只在当前局域网中是唯一的,不同的局域网中可以有相同的内网IP的设备,那么就有一个问题想问了,本来我们是想让IP地址能唯一表示网络上的一个设备,但是现在同一个IP能表示不同设备,那那那那IP地址不够用可咋办呢?

解决办法:

1.动态分配IP地址,让每个设备连上网的时候才有IP,不联网的时候这个IP就可以给别人用.但是这个办法不能从根本上解决问题

2.NAT机制---->让多个设备共用同一个外网IP.

NAT机制把IP分成了内网和外网,对于一个外网IP,可以在互联网的任意位置都能访问到.外网IP只能表示唯一的设备;对于一个内网IP,只能在当前局域网内访问.局域网1中的设备不能使用内网IP访问局域网2的设备.内网IP可以重复出现,但是在当前局域网中的此IP是唯一的

NAT设备就是:能够把从内网发出去的源IP修改成外网IP的路由器设备(比如说运营商的路由器)

就比如说同学和汤老师想要通信就需要到外网上通信,这个时候先是通过运营商的路由器将同学的源IP和汤老师的源IP都修改为外网IP,然后连接到外网服务器上(比如cctalk),这个时候,同学和唐老师就可以进行通信了

下面有一个问题,就是如果像下图这样,有两个设备都想连接到外网服务器cctalk,此时cctalk看到这两个连接,可是这两个连接的IP地址都来自于同一个外网IP(运营商路由器给改的),那么这时候问题来了,cctalk怎么区分这两个连接谁是谁呢?

答案是---->靠端口号区分

NAT不光会对IP进行修改,调整成外网IP,同时也会对端口进行调整,如果不同设备的端口号一样,就会调整成不同的端口,同时NAT会记录这个映射关系,保证服务器返回的数据再按照这个映射关系还原回去

但是需要注意哈,NAT也是有极限存在的,端口号的个数65535,如果一个局域网的连接超过了65535,这个时候NAT就不一定好使了,端口号就不够用了

因此第二个解决方法-->NAT机制,也只是续命了一波,但没有从根本上解决问题

接着说第3个解决办法

3.IPv6

IPv6在报头中使用了一个更长的字段来表示IP地址(16个字节,128位),IPv6比IPv4大很多很多,IPv6是真正从根本上解决了IP地址不够用的问题


说完地址管理,我们来说一下路由选择~

路由选择就是规划路径,两个设备之间要找出一条路径,能够完成传输的过程 .要想找到路径,前提是要先认识路

IP数据报中的目的地址就表示这个包要发到哪里去.如果当前路由器认识这个目的地址,就会告诉你去往目的地址的路径;如果当前路由器不认识,就会告诉你一个大概的方向,让你走到下一个路由器的时候再问问.以此类推,一直走啊走,总会遇到一个认识这个目的地址的路由器,于是就可以具体的转发过去了.有时候一个路由器不光认识去往目的地址的这一个路径,还认识其他路径,因此就可以选择一个更适合的路径去往目的地址

这里解释一下什么叫路由器"认识"这个IP地址

路由器内部维护了一个数据结构--->路由表.某个路由器接入网络后,就会和其他设备进行通信,在认识的过程中,路由器就来构造这个路由表.路由表里面记录了路由器的网络号,以及网络号对应的网络接口(网络接口就对应到路由器里面具体的端口).目的IP就和网络号匹配,匹配上了就认识咯.


网络层介绍完了,接下来讲数据链路层和物理层

数据链路层主要的协议叫做---->"以太网"协议

以太网数据帧:

看上图,通过6个字节表示源地址和目的地址,这比IPv4长了6w多倍哦.我们把这里的地址称为"ma地址"

mac地址做到了每个设备都是唯一的(每个网卡都是唯一的)

我们来介绍下MTU

MTU:一个以太网数据帧能够承受的数据范围

以太网数据帧能够承受的数据范围取决于硬件设备,不同的硬件设备对应的数据链路层协议不一样,相应的MTU也不相同.为什么呢---->我们之前学过,知道数据链路层考虑的是相邻节点之间的数据传输,当时我们举的交通工具的例子对吧,不同的交通工具能够搭载的数据量就不相同

如果数据量超过MTU怎么办---->IP层进行分包,从而适应数据链路层的MTU

我们看这个图,图中又出现了一个陌生的词MSS,MSS是TCP中在IP不分包的前提下最多搭载的载荷量,MSS对TCP起到一定的提示效果,当当前传输TCP的数据长度不超过MSS,这时属于最高效的状态

我们来说一下ARP

ARP报文不是用来传输数据的,只是起到一个辅助的效果

什么辅助效果呢?---->路由器这样的设备在转发数据的时候,首先拿到的是一个IP地址(目的IP),通过IP地址来决定接下来这个数据要怎么走(从哪个端口出去,发到哪个设备上).因此就得决定接下来封装的以太网数据帧中的目的mac是什么.那么ARP的辅助作用就来了,需要根据ARP协议建立起IP--->mac的映射关系

当设备启动的时候,就会像局域网中广播ARP报文,每个设备收到后都会给出一个应答,应答的信息包括自己的IP和mac.收到这些设备的应答后,发起广播的一方就可以根据这些回应建立起这个映射关系了(就像老师想统计每个同学的邮箱,老师就在群里喊一声,同学们都把自己的名字和邮箱私信给我,大家收到这个广播消息就纷纷私信,然后老师就得到了结果,然后把每个同学的名字和邮箱对应的整理到一个表格上)

以太网协议不仅规定了数据链路层的内容,也规定了物理层的内容

 你可能会有一个疑问,已经有了IP地址,为什么还要物理地址?

 当年网络层协议和数据链路层协议是各自独立研发出来的,IP地址和mac地址就有点重复了,现在的现状就是mac地址和IP地址同时使用,他们表示不同的功能

IP地址现在用来表示一次传输过程中的起点和终点(不考虑NAT的情况下,一个IP数据报中的源IP和目的IP是固定的)

mac地址现在用来表示传输过程中,任意两个相邻节点之间的地址(一个以太网数据帧在每次转发过程中,源mac和目的mac都会改变)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值