【JavaEE初阶】网络层-IP协议

目录

IP协议

IP协议的报文结构

IP协议/网络层做的工作是什么

IP协议的各部分的含义和作用

4位版本

4位首部长度

8位服务类型(TOS)

16位总长度(字节数)

拆包组包功能是如何实现的

8位生存时间(TTL)

TTL是64bit够用吗?

什么是"六度空间"?

8位协议

16位首部检验和

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

那IP地址不够用了咋办?


IP协议

IP协议的复杂程度和TCP差不多

日常开发的时候,最多是用到传输层就够了,关于网络层,除非你是专门开发路由器的工程师,否则一般不会涉及

IP协议的报文结构

IP协议/网络层做的工作是什么

  • 地址管理:使用IP地址来标识网络上的某个设备的位置
  • 路由选择,在两个通信节点之间,规划出一个合理的路径

IP协议的各部分的含义和作用

4位版本

  • 标识了IP协议的版本号,开发阶段主要使用IPv4
  • IPv6是最近几年才多起来的
  • IPv6是大规模商用的版本

4位首部长度

  • IP协议的报头长度(也有"选项"以供扩充长度)
  • 以4字节为基本单位
  • 四位 最多可以表示 1111 -> 换算成十进制->15,说明4位首部长度最多可表示 15*4=60 字节的长度

8位服务类型(TOS)

  • 决定了IP协议的工作方式
  • 8位服务类型:3位优先字段(已弃用),4位TOS字段,和1位保留字段(必须置为0),4位TOS分别为
  • 最小延时(A->B花时尽可能短)
  • 最小成本(系统开销低)
  • 最大吞吐量(单位时间传输最多)
  • 最高可靠性(可靠性传输优先)
  • 这四者相互冲突,**只能选择一个,**当前的系统要最优先保证哪个性能
  • IP协议可以切换工作状态↑

16位总长度(字节数)

  • 一个IP报头+载荷的长度->一个IP数据包的长度
  • 最大长度为64KB
  • IP协议内置了拆包组包功能
  • 比如,IP要携带一个比较大的TCP数据报,IP协议就会自动拆成多个,通过多个IP数据报共同传输一个TCP数据报
拆包组包功能是如何实现的
  • 16位标识的作用:拆包:把拆出来的多个包,设为相同的标识、组包:把标识相同的数据包组合到一起
  • 3位标志:其中一个标志位,表示是否触发了拆包操作,还有一个表示当前包是否是最后一个
  • 13位片偏移:表述了数据报的先后顺序,偏移量小的放前面,偏移量大的放后面

【面试题】如果基于UDP实现传输超过64KB的数据,要怎么设计?

  • 可以参考IP协议
  • 在应用层协议中,程序员自己手动写代码来实现 "标识符"、"标志位"、"片偏移"

8位生存时间(TTL)

  • 一个IP数据报在网络上传输的最大"次数"
  • IP数据报每经历一次路由器的转发,TTL值就-1,TTL减到0,就说明包到不了,这个包就会被丢掉
  • 比如发了一个错误的数据包(目的IP写错了),是注定不可能达到的,这个包也不能无限传输啊,不仅占宽带还没有用~
  • 通过cmd指令查看TTL的情况:ping+想要访问的域名
TTL是64bit够用吗?
  • 当64步还不能到达目的ip时,TTL还可以自动设置为更大的值->128
  • 其实网络中还有一个"六度空间"理论->两个设备之间,不需要经历这么多次转发
什么是"六度空间"?
  • 每个路由器虽然只认识与它相邻 的设备,但是路由器可以发动朋友(相邻的路由器)/朋友的朋友去找目的设备
  • 每层朋友都会竭尽全力地去找
  • 一般来说,最多经过六层"朋友",就能找到目的设备

8位协议

  • 标识了传输层使用了哪种协议
  • 数据链路层到网络层=>也有一个类似的协议编号
  • 网络层到传输层=>8位协议
  • 传输层到应用层=>端口号

16位首部检验和

  • 只检验首部
  • 而载荷部分是由TCP、UDP进行校验

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

  • 是IP协议最关键的部分
  • IP地址本质上是通过32位的整数来表示的
  • 由于32位整数不方便阅读,于是通常会通过点分十进制的方式来表示IP地址
  • 用三个点,分出四部分
  • 每个部分的取值范围是 0-255
  • 32位IP地址,只能表示42亿9千万个不同的IP
  • 随着移动互联网时代开启。物联网时代开启(冰箱空调等)
  • 现在看来,IP地址的分配已经捉襟见肘了

那IP地址不够用了咋办?

方案一:动态分配IP

  • 上网的分配,不上网的不分配

方案二:NAT机制 网络地址转换【当前世界的最主要方式】

  • 把所有的IP分为两类:公网IP和外网IP

关于NAT机制,下节会进行详细解说~

太棒了!你居然耐心地看完了这些知识!

有这个毅力你做什么都能成功的!(๑•̀ㅂ•́)و✧

下节再见✿✿ヽ(°▽°)ノ✿~

相关推荐
学习编程的Kitty1 小时前
JavaEE进阶——Spring Boot项目
数据库·spring boot·java-ee
Han.miracle1 小时前
Java ee初阶——定时器
java·java-ee
飞鱼&2 小时前
HashMap相关问题详解
java·hashmap
没有bug.的程序员2 小时前
Spring Cloud Alibaba 生态总览
java·开发语言·spring boot·spring cloud·alibaba
快乐非自愿3 小时前
Java垃圾收集器全解:从Serial到G1的进化之旅
java·开发语言·python
zz-zjx3 小时前
LVS三种模式及调度算法解析
网络·lvs
树在风中摇曳3 小时前
Java 静态成员与继承封装实战:从报错到彻底吃透核心特性
java·开发语言
Timememory8293 小时前
配置DNS主从服务
运维·服务器
z202305085 小时前
Linux之vmlinux文件段布局和arm64 的链接脚本vmlinux.lds.S分析
linux·运维·服务器