javaEE-网络原理-IP协议

目录

[一.网络层 IP协议](#一.网络层 IP协议)

IP协议头部格式

IP协议如何管理地址

1.动态分配IP地址:

2.NAT机制(网络地址映射)

​编辑3.IPv6

IP协议如何进行网段划分

早期的网段划分和现在还不一样:

一些特殊的IP地址:

IP协议进行地址管理

[二、数据链路层 以太网](#二、数据链路层 以太网)

以太网帧格式:

三、DNS协议


一.网络层 IP协议

IP协议主要完成两项工作:

1.地址管理:使用一套地址体系(IP地址),来描述互联网上每个设备所处的位置.

2.路由选择:指一个数据包如何从互联网上的一个设备传输到另一个设备。

IP协议头部格式

1.4位版本(version):指定IP协议的版本,对于IPv4来说,就是4.对IPv6来说,就是6,只有两个值.目前主流版本是IPv4.

2.4位首部长度(header length):IP头部的⻓度是多少个32bit,也就是length*4的字节数.4bit表⽰最 ⼤的数字是15,因此IP头部最⼤⻓度是60字节.

3**.8位服务类型(Type Of Service)** :实际上只有4位,并且这4位是相互冲突的,只有1位是1,其余三位都是0,分别代表:最小延时,最大吞吐量,最高可靠性,最小成本。表示当前IP协议所处的模式。

4.16位总长度(total length):整个IP数据报的总长度(报头+载荷)。

虽然IP数据报长度受限,但IP提供了拆包和组包的功能,当IP载荷(TCP数据报/UDP数据报)长度过长时,IP数据报就会自动拆分成多个IP数据报,每个数据报都会携带载荷的一部分信息.

这个拆包是在操作系统内核中完成的,程序代码无法控制.

5.16位标识符,3位标志位,13位片偏移:

上面拆包时,多个IP数据报将一个载荷拆分成多个IP数据报,这多个IP数据报的标识符都是相同的值.

拆包之后如何组包就是通过 16位标识符,3个标志位和13位片偏移 来识别完成的.

16位标识符用来确认哪些是同一个IP数据报的载荷,将其组装在一起;

3位标志位:只有2位是有效的,1位代表IP数据报是否拆分;1位代表该IP数据报携带的载荷是否为最后一个.

13位片偏移:表示了这些包的先后顺序,IP数据报可能会出现先发后至的现象,这个片偏移标识载荷的前后位置.

6.8位生存时间:单位是"次数"。当一个IP数据报每经过一个路由器,TTL的值就-1,当TTL为0时,就将这个数据报丢掉。这是为了防止IP数据报的目的地址有问题,而在网络中无限止的转发下去。

TTL的值一般是32/64就足以支撑当前的网络传输了.

windows有一个tracert指令,可以查看当前网络通信的路径:

比如访问美国官网:

7.8位协议:表示在传输层使用哪个协议.

8.16位首部检验和:只用来检验IP报头,IP数据报的载荷中有TCP检验和/UDP检验和,在IP层就不再检验了.

9.32位原IP地址,32位目的IP地址:标示量发件人和收件人的IP地址.

IP协议如何管理地址

就是通过这两个32位原IP地址和32位目的IP地址.

IP地址本质上就是32位整数,为了方便,把IP地址表示成 点分十进制的形式。通过三个点,把IP地址分成4部分,每部分1字节,每个字节的范围:0-255。

IP地址的存在,就是为了区分网络上的不同设备,希望每个设备都有一个唯一的IP地址.

32位地址,表示的范围:2^32=42亿9千万多 的数字,这个数字看起来很大,但对于快速发展的网络来说,并没有很大,如何解决IP地址不够用问题,就成了一个很重要的事情,

有三种解决方法:

1.动态分配IP地址:

全世界,并不是所有设备都同一时刻一起上网的,通过更充分的利用IP地址,动态分配IP地址,解决问题。(这个方法,理论上可行,但实际中中很难实施的)

2.NAT机制(网络地址映射)

先把IP地址分为两大类:

1.私网IP(局域网IP):IP地址以:10.*,172.16-172.31.*,192.168.*开头的都是局域网IP。

2.公网IP(广域网IP):除了私网IP外,别的都是公网IP.

要求公网的设备上,使用的公网IP都不能重复,必须是唯一的;但私网设备使用的私网IP,只要保证在同一个局域网内不能重复,不同局域网之间的IP允许重复。

由于上面的规定,在设备之间进行访问时,有一个重要限制:

1>.公网设备访问公网设备时,可以直接访问。

2>.私网设备访问私网设备(同一个局域网中的),可以直接访问。

3>.私网设备访问私网设备(不同局域网中的),不允许访问。

4>.私网设备访问公网设备,需要对私网设备地IP地址进行转换,也是可以访问地。

5>.公网设备访问私网设备,不允许主动访问。

一个路由器一般都带有两个IP地址:

LAN口IP:一般是一个局域网;

WAN口IP:可能是一个局域网,也可能是一个公网。

路由器地核心就是把这两个局域网连接起来。

在客户端(我的电脑)构造一个IP数据报:

到达路由器,要对源IP进行修改,设这个路由器地WAN口IP为5.6.7.8;

这个IP数据报到达路由器,就会被修改为:

并不是每个路由器都会对IP地址进行替换地,当当前IP地址为公网IP时,就不在替换了。

进行IP地址替换,本质上是为了让一个公网IP地址,对应到多个设备,从而起到节省IP的效果.

当IP数据报到达服务器之后,只能看到源IP为5.6.7.8,无法感知最初局域网IP地址了。

从服务器中返回的IP数据报又怎样返回到局域网设备呢?

路由器在进行NAT的时候,会把这次通信的相关信息记录下来:

路由器IP数据报:

源Ip  替换后IP  目的IP

主机一: 192.168.1.10 5.6.7.8 1.2.3.4

从服务器返回的响应数据的源IP和目的IP和收到的IP数据报是相反的:

服务器IP数据报:

源IP:1.2.3.4

目的IP:5.6.7.8

当服务器将相应数据返回的时候,t通过目的IP,对照路由表中记录的替换后的IP ,就能找到源IP地址了.

当局域网中的主机访问的都是不同的服务器,可以根据 路由表中的记录 通过 替换后的IP 进行查找源IP地址,但是当局域网设备不只一个访问相同的服务器时,又能找到源主机吗?

此时路由器中记录的信息:

源Ip  替换后IP  目的IP

主机一: 192.168.1.10 5.6.7.8 1.2.3.4

主机二: 192.168.1.20 5.6.7.8 1.2.3.4

当 将返回的信息的 目的IP 与路由表的 替换后的IP 进行对比,此时,还是无法确定哪个是源主机.

实际上,这个表中还有一列数据:源端口 目的端口:

路由器收到的响应数据包是这样的,

路由器通过查询 IP数据报 传输层的目的端口,就能知道 替换之前的IP了。

又有问题了,因为端口号都是系统随机分配的,若是极小的概率下,两个主机之间的端口号相同,又要怎么查找源IP地址呢?

这是路由器有实现了一个功能,替换源端口号:路由器会对端口号进行映射,为每个主机分配不同的端口号:

此时,路由器IP数据报到达服务器处的IP数据报就成了这个样子:

IP数据报:

源IP 目的IP 源端口 目的端口

主机一:5.6.7.8 1.2.3.4 10001 9090

主机二:5.6.7.8 1.2.3.4 10002 9090

返回响应的IP数据报就成了这个样子:

源IP 目的IP 源端口 目的端口

主机一:1.2.3.4 5.6.7.8 9090 10001

主机二:1.2.3.4 5.6.7.8 9090 10002

IP数据报返回到路由器时,通过 查找传输层的目的端口 就能找到源主机了。

3.IPv6

NAT机制是通过公用一个公网IP,来节省IP地址数量,并没有增加IP地址的数量;IPv6就是从根本上解决问题:增加了IP地址的数量,IPv4中 IP数量为4字节,32个比特为,IPv6将其扩大到16字节,64个比特位.就是2^64个地址,这就是一个天文数字了,完全够用。

但还有一个问题,IPv6的报头结构和IPv4是不兼容的,存在结构不兼容的问题,引入IPv6,就意味着需要对整个网络设备进行升级,更换成能支持IPv6的设备,这是一个在网络发展长河中是一个非常漫长的过程.

IP协议如何进行网段划分

IP地址分为两个部分:网络号+主机号

网络号:保证一个网段之内有相同的网络号;

主机号:同一个网段之内,每个主机之间有相同网络号,但每个主机必须有不同的主机号.

在windows控制台中输入ipconfig可以查看自己主机的信息:

可以看到:IPv4地址的信息:192.168.159.1;

这里还有一个子网掩码:255.255.255.0;这里的前三个数是非0的,第四个数是0,则说明PIv4 的

前三个数据: 192.168.159 就是网络号;第四个数据: 1 就是主机号.

这些IP地址都是路由器自动配置的,不需要我们手动配置.

在一个局域网中,若有主机号和网络号都相同,那么这个主机是无法上网的;

在局域网中,如果主机的网络号和路由器的网络号不相同,也是无法上网的,因为这个主机无法通过路由器访问外网,也就无法访问局域网那个的其他网络.

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

早期的网段划分和现在还不一样:

早期的网段是分为A,B,C,D,E五类。

这种方式的划分比较死板,且A,B类的浪费量非常大,A类的主机号可以有24位,即一个局域网内可以有2^24个主机,没有这么大的局域网能包含这么多主机,很难有这样的使用场景。

这种网段划分的方式已经费用了。

一些特殊的IP地址:

127.*:表示环回IP(loopback),代表自己的主机。一般用于测试(常用 127.0.0.1)

若某个IP的主机号全是0,则表示"这个网段";

若某个IP的主机号全是1,表示:"广播地址"。这两个IP是一种特殊的IP,不能分配给主机。

广播对应的IP有多种:

单播:一对一;

组播:一对多(这里的多是有限制的,全部中的一部分)

多播:一对多(所有,没有限制)

向广播地址上发送消息,局域网上的所有设备都能收到消息。(但要发UDP消息,TCP消息不支持广播)

IP协议进行地址管理

路由选择是找到了能到达目的主机的所有路径,但哪条在什么样的需求下最合适,就需要探索。

由于网络结构太复杂了,每个路由器无法掌握全局路径信息,IP地址对于路径选择属于探索式的"边走边问",无法在最开始就把路线规划好。

二、数据链路层 以太网

以太网是横跨数据链路层和物理层。

以太网帧格式:

以太网引入了另一套地址体系,"mac"地址/物理地址。mac地址和IP地址是两套独立的地址体系。

IP地址侧重于全局转发,从起点地址到目的地址的转发;mac地址更侧重于局部路径的转发,两个相邻设备的转发。

mac地址按照16进制的形式表示,字符之间用 - 或者 ; 分隔:

mac地址能表示的范围要比IPv4大很多,每个主机都有一个自己的mac地址,是一一绑定的关系。

IP地址很多时候是动态分配的,而mac地址是静态分配的,网卡出厂的时候,mac就写死了,因此可以通过一个mac地址来确定一个主机位置。

数据链路层的以太网数据帧:

由于每个主机都有自己的mac地址,因此,每经过一个路由器/交换机,源mac和目的mac都会改变,

经过这样的转发,就能把数据报进行封装和分用.

ARP和RARP是两个横跨了 网络层 和 数据链路层 的协议.

ARP协议建⽴了主机IP地址和MAC地址的映射关系.ARP 是能让路由器/交换机建立起内部的结构:IP->mac(类似于hash表)转发表。

RARP:也是能让路由器/交换机建立起内部的结构 :mac->IP 建立起一个内部结构,占46字节.

以太网数据帧载荷部分的数据范围是46-1500字节,最小·46就是ARP协议的使用,最⼤值1500称为以太⽹的最⼤传输单元(MTU),1500字节是受限于物理设备的特性(IP数据报将载荷进行截取承载,也是有这个原因)

三、DNS协议

DNS是⼀整套从域名映射到IP的系统,叫域名解析协议

TCP/IP中使⽤IP地址和端⼝号来确定⽹络上的⼀台主机的⼀个程序.但是IP地址不⽅便记忆.于是⼈们发明了⼀种叫主机名的东西,是⼀个字符串,并且使⽤hosts⽂件来描述主机名和IP地址的关系.

DNS服务器,并不是只有一份,而是由很多份

搭建根域名服务器还时,还会对域名进行分级管理,一级域名,二级域名,三级域名....这样可以控制每个域名管理的数据都不多.

像:www.baidu.com 这就是域名解析协议.

com属于一级域名;baidu:属于二级域名;www属于三级域名...

相关推荐
幽兰的天空7 小时前
介绍 HTTP 请求如何实现跨域
网络·网络协议·http
lisenustc7 小时前
HTTP post请求工具类
网络·网络协议·http
心平气和️7 小时前
HTTP 配置与应用(不同网段)
网络·网络协议·计算机网络·http
心平气和️7 小时前
HTTP 配置与应用(局域网)
网络·计算机网络·http·智能路由器
Gworg8 小时前
网站HTTP改成HTTPS
网络协议·http·https
Mbblovey8 小时前
Picsart美易照片编辑器和视频编辑器
网络·windows·软件构建·需求分析·软件需求
北顾南栀倾寒9 小时前
[Qt]系统相关-网络编程-TCP、UDP、HTTP协议
开发语言·网络·c++·qt·tcp/ip·http·udp
GZ_TOGOGO9 小时前
PIM原理与配置
网络·华为·智能路由器
7ACE9 小时前
Wireshark TS | 虚假的 TCP Spurious Retransmission
网络·网络协议·tcp/ip·wireshark·tcpdump
大丈夫立于天地间10 小时前
ISIS基础知识
网络·网络协议·学习·智能路由器·信息与通信