IPv4协议

IPv4协议_第1张图片
IP 协议

网络层的代表协议: IP协议 ~~ 具体来说,叫做IPv4协议(v4版本的意思)

协议头格式

IPv4协议_第2张图片

4位版本号(version): 指定 IP 协议的版本,对于IPv4来说,就是4。

4位首都长度: 描述了 IP 报头多长(IP 报头是变长的)
注: 报头中有一个选项部分,是变长的,也是可有可无的.此处的单位也是4字节.

8位服务类型(Type Of Service): 说是8位,实际上只有4位有效. 这4位中只有1位可以是1,其他的都是0. 这4位就表示IP协议的四种形态/四种工作模式, 分别表示: 最小延时,最大吞吐量,最高可靠性,最小成本, 这四者相互冲突, 只能选择一个,实际开发中就可以根据需要,来切换IP的模式,达到最优效果.


16位总长度(total length): 描述了一个IP数据报的长度(头+载荷),IP数据报整体占多少个字节.这个长度减去前面的IP报头长度,剩下的就是载荷长度,一个完整的TCP/UDP 数据报长度.16位总长度,意味着一个IP数据报,最大只能支持64KB 的限制,但是IP自身就支持对包的拆分和组装,一个IP数据报携带的数据载荷太长了,超过了64KB,就会在网络层针对数据进行拆分.把一个数据拆成多个IP数据报再分别发送.接收方,再重新拼装.

例子:

发送方: 把100KB的数据,交给传输层(封装),传输层交给网络层(封装),网络层就把这个100KB的数据拆包(比如拆成两份)64K + 36K,这两份再交给数据链路层,由以太网分装成两个数据帧.
接收方: 数据链路层,针对两个数据帧进行分用,得到两个ip数据报,交给网络层.
网络层针对这两个IP数据报进行解析,把里面的载荷拼成一个,交给传输层…

注: 此处虽然最大可以是64KB,但实际上,IP协议拆包不一定就按照64KB为单位进行拆分.实际的单位往往更小(取决数据链路层的情况).


4位头部长度(header length): IP头部的长度是多少个32bit,也就是length4的字节数。4bit表示最大的数字是15,因此IP头部最大长度是60字节。

16位标识(id),3位标志字段,13位分片偏移,这几个字段都是辅助拆包/组包提供的.
16位标识(id): 唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的。
3位标志字段: 其中一位是结束标志.
13位分片偏移(framegament offset): 标识了多个包的先后顺序.


8位生存时间(TTL): 一个数据报在网络上能够传输的最大时间.这个时间的单位不是"秒",而是“次数”.
一个数据报构造出来,会有一个初始的TTL数值(比如32或者64,或者128…)这个报每次经过一个路由器转发,TTL- 1. 如果一直减到0了,还没有到达目标, 此时就认为这个包永远也到不了,就可以丢弃了.

8位协议: 描述了当前载荷部分内容是属于那个协议(TCP/UDP)的.

16位首部检验和: 此处只需要针对首部进行校验.载荷部分(TCP/UDP数据报)自身已经有校验和了.
注: 如果校验和不一致,就会直接丢弃.IР不负责重传.如果上层使用TCP,TCP会在没收到 ack 之后就重传.




32位源IP地址 和 32位目的IP地址

32位源IP地址和32位目的IP地址, IP 协议中,最重要的部分!!!

此处看到的IP地址是32位的整数,而咱们日常见到的IP则是一串数字(为了可读性和方便传播). 示例: 183.230.242.153
转换过程: 使用三个 “.” 把32位, 4个字节的数字给分割开,分成4个部分. 每个部分分别使用0-255十进制整数表示.该转换方法也被称为点分十进制.

背景: IP 地址, 我们是期望每个设备都不相同.但是 32 位数字, 只能表示42亿9千万个数字. 期望使用这个表示全世界所有的上网设备(
智能手机+PC+服务器+路由器+其他的网络设备+物联网(空调,洗衣机,冰箱都能联网))是远远不够用的.

解决 IP 地址不够用问题的办法.

第一种: 动态分配IP地址

此时就可以省下一批 IP 地址了,但是这个方案没有从根本上增加IP地址.只是提高了利用率,治标不治本.

第二种: NAT网络地址转换

本质是使用一个 IP 代表一批设备,也能够大大提高 IP 地址的利用率.

在NAT背景下, 就把 IP 地址分成两个大类.
1.内网IP(私有IP), 比如: 10.* , 172.16* - 172.31.* , 192.168.* 这三类.
2.外网IP(公网IP), 除了内网 IP 之外,剩下的都是公网 IP.

NAT 要求,公网 IP 必须是唯一的,私网 IP 可以在不同的局域网中重复出现.
如果某个私网里的设备想访问公网的设备,就需要对应的NAT设备(路由器),把IP地址进行映射,从而完成网络访问.
反之,公网的设备,无法直接访问私网的设备的.不同局域网的私网的设备没法直接相互访问.

博主的笔记本的 IP 地址: 10.100.204.125 => 是 10.* 这一类,就属于局域网内部的私有 IP.
注: 内网 IP 只要在局域网内部不重复即可, 不同局域网中则是允许重复的.
博主的笔记本的外网IP : 183.230.242.153

IPv4协议_第3张图片

只要这个电脑是经过运营商路由器转发给服务器,服务器看到的源IP就都一样.
如果是多个电脑同时访问同一个服务器,服务器的响应就会先发给路由器,路由器根据这些电脑不同的端口号(传输层的端口号)来区分,决定发给哪个设备.
因此,服务器能拿到的只是路由器的IP, 不能拿到我电脑的内网IP, 如果我笔记本不主动和服务器联系,服务器也就不知道我的端口从而就无法主动找到它.

拓展知识(仅做科普): 对于黑客来说,你的电脑的内网IP, 他/她无法直接访问; 你的外网IP, 也不是对应你的电脑,而是你对应的运营商的路由器,直接黑你的电脑是有难度.但是可以通过链接的方式,比如钓鱼网站.甚至可以是一个可执行程序,一个邮件,一张图片…都可能在你的电脑上偷偷安装个程序,主动联系到黑客的服务器上,并让这个程序在后台一直和服务器建立联系,这时,你的电脑就属于他/她的了(俗称肉鸡).

NAT 机制能够有效的解决 IP 不够用的问题, 但是带来的副作用就是网络环境更加复杂了.


第三种: IPv6

IPv6 从根本上解决了 IP 不够用的问题.

使用 16 字节表示 IP 地址的个数, 即 42亿 * 42亿 * 42亿 * 42亿 , 一个天文数字. 即使把地球上的每一粒沙子都分配一个 IPv6 的地址,也是够用的.

IPv6 虽然看起来非常美好,但是当前世界上,仍然是以 NAT+IPv4+动态分配 来进行网络组建的,真正使用IPv6的地方非常非常少. 由于IPv6和 IPv4 不兼容, 想要支持 IPv6 就需要更换路由器等网络设备,就需要花钱,因此使用IPv6的地方非常少.
不过我们国家的 IPv6 的普及度就非常高(80%以上), 原因: 2018 年 中美贸易战, 为了防止美国的制裁“卡脖子”,因为 IPv4 地址的分配权限是在美国那里的, 避免对我们的互联网行业造成非常致命的打击, 所以大力推进 IPv6 的普及.于是现在我们的各种程序,运营商,网络设备都支持了IPv6,只是没有真正开启罢了.

你可能感兴趣的:(javaEE的学习,学习笔记,网络,网络协议,java-ee,学习)