【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机制,下节会进行详细解说~
太棒了!你居然耐心地看完了这些知识!
有这个毅力你做什么都能成功的!(๑•̀ㅂ•́)و✧
下节再见✿✿ヽ(°▽°)ノ✿~










