Java 网络原理 ②-IP协议

server/2025/2/3 9:02:58/

 这里是Themberfue

经过五节课的传输层协议的讲解,接下来我们将进入网络层协议——IP协议的讲解了~~~


IP协议 

  • IP 相信大家在日常生活中或多或少都听过,你的IP地址是什么?192.168.0.1 ......
  • IP 其实是个网络层协议,即互联网协议(Internet Protocol)网络通信的核心协议之一,工作在 网络IP协议主要负责在复杂网络环境中,为数据包提供逻辑寻址、路由选择和传输服务。IP协议是无连接的,也就是说,它并不保证数据的可靠传输。
  • 当然,IP 协议 的复杂度不必 TCP 协议 的低,但是,我们开发人员一般活跃在 应用层 和 传输层,对于 网络层 及往下的较少接触,除非你从事路由开发等网络层相关的工作。所以我并不会讲的很深入,讲个大概就可以了。
  • IP 协议 / 网络层 主要的作用是:地址管理:使用 IP 地址,标识网络上某个设备的位置。路由选择:在两个通信节点间,规划出一个合适的路径。

  • 我们先从 IP 协议 首部报文格式 来学习 IP 协议。

  • 版本(Version):表示 IP 协议的版本号(IPv4 或 IPv6),至于v1、v2、v3、v5呢?这些版本应该都是测试版本,也就是不那么成熟的版本,而 IPv4 和 IPv6 则是开发较为成熟的版本,故发行出来使用了。
  • 首部长度(IHL):指定 IP 数据包头部的长度,IP 协议 的报头,也是变长的,通过可选字段管理,首部长度占4位,单位是4字节,则 IP 协议 的报头最小大小为 60字节
  • 服务类型(Type of Service,ToS):用于区分数据包的优先级,3位优先权字段(已经弃用)4位 ToS 字段 1位保留字段(必须置为0)。4位 ToS 分别表示:最小延时最大吞吐量最高可靠性最小成本。这四者相互冲突,所以只能选择⼀个。对于 ssh/telnet这样的应用程序,最小延时比较重要;对于 FTP 这样的程序,最大吞吐量比较重要。
  • 总长度(Total Length):数据包的总字节数(包括头部和数据部分),IP 协议 内置了拆包组包的功能,以避免数据过长而丢失。
  • 标识(Identification):用于标识数据包,分片后各片使用相同标识号。同一个数据包拆包后,各个小包的标识都是一样的,在组包时则可以根据这些标识来知道这些是拆包前同一个数据包的。
  • 标志(Flags):3位标志,第1位作为保留第2位,分段,是否允许分片(如果不允许分片,包超过了数据链路支持的最大长度,则丢弃该包,返回发送方一个 ICMP 错误)。第3位,更多分段。表示是否最后一个分片。当目的主机接收到一个 IP 数据报时,会首先查看该数据报的标识符,并且检查标志位的第3位是置0或置1,以确定是否还有更多的分段。如果还有后续报文,接收主机则将接收到的报文放在缓存直到接收完所有具有相同标识符的数据报,然后再进行重组。
  • 片偏移(Fragment Offset):控制数据包的分片,与 TCP 协议 一样,拆包后的数据不一定是按顺序到达的,所以 片偏移 描述了 拆包后的顺序,随后根据这些顺序进行组包操作,将相同标识的组包在一起。
  • TTL(Time to Live):
  1. 数据包在网络中的最大生存时间,防止数据包在网络中无限循环。发送方和接收方之间,还需要经过许多路由器和交换机后数据才能发送到对方。
  2. TTL 的单位为 "次数",即 TTL 有一个初始值,每经过一个路由器或交换机其值就减一,若减为0后,数据还没到达对端,认为该数据包不能正确传输,则丢弃该数据包。
  3. 你发送了一个错误的数据包,比如该 IP 地址 根本不存在,为了避免 数据包 在网络层无线传输,加入 TTL 可以避免。
  4. TTL 的初始值一般设置为 64,也就是最多经过 64次转发就可以到达对端,如果经过64次还没有到达对方呢?理论上存在,实际上不可能,大不了设置成 128 也成。你应该听过 "六度分隔理论"。简单地说:“你和任何一个陌生人之间所间隔的人不会超六个,也就是说,最多通过六个人你就能够认识任何一个陌生人。” 数据在互联网的传输也差不多这样。
  5. 如果网络上有些路由器的路由表配置不合理,路由寻址可能会导致死循环,数据包会一直循环传输。 IP 包发送的时候可以设置一个 TTL 值,比如 TTL=64,每经过一个路由器 TTL 减 1,减到 0 还没到到目的地,路由器会抛弃这个IP包,并使用一个 ICMP 消息通知发送方。
  6. 你可以听过 windows 的 cmd 的 ping命令,这样可以查看到该次转发的 TTL值我们可以看到 TTL = 51,表示经过了 13次的路由转发。
  • 协议(Protocol):指定上层(传输层)使用的协议(如 TCP 为 6,UDP 为 17)。
  • 校验和(Header Checksum):校验头部数据的完整性,与 TCP 和 UDP 的校验和类似。
  • IP地址和目标IP地址:
  1. 标识数据的发送方和接收方。IP 地址 由 32 位正整数来表示。TCP / IP 通信要求将这样的 IP 地址分配给每一个参与通信的主机。IP 地址在计算机内部以二进制方式被处理。然而,由于人类社会并不习惯于采用二进制方式,需要采用一种特殊的标记方式。那就是将 32 位的 IP 地址以每 8 位为一组,分成 4 组,每组以 “.” 隔开,再将每组数转换为十进制数,这种方法被称为 "点分十进制"。使用 32位地址,可支持约 43亿个地址
  2. 在最初设计IPv4协议时,本来以为 43亿个地址是够用的,但随着互联网的高速发展,43亿个地址在2025年的今天早已分配完了
  3. 为了解决这个方法,人们想出了一些方法:动态分配NATIPv6
  4. IPv6 使用了128位地址,可支持约 3.4×10³⁸个地址,相当于可以为地球上每一粒沙子分配一个地址,也可以每全球每个人的身上的每根毛分配一个地址。关于 IPv6,我们在后面会简单说明。

  • 具体解决 IP 地址 数量耗尽的问题,我们下节再见~~~
  • 毕竟不知后事如何,且听下回分解 
  • ❤️❤️❤️❤️❤️❤️❤️

 


http://www.ppmy.cn/server/164572.html

相关文章

【算法】回溯算法专题② ——组合型回溯 + 剪枝 python

目录 前置知识进入正题小试牛刀实战演练总结 前置知识 【算法】回溯算法专题① ——子集型回溯 python 进入正题 组合https://leetcode.cn/problems/combinations/submissions/596357179/ 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以…

电脑要使用cuda需要进行什么配置

在电脑上使用CUDA(NVIDIA的并行计算平台和API),需要进行以下配置和准备: 1. 检查NVIDIA显卡支持 确保你的电脑拥有支持CUDA的NVIDIA显卡。 可以在NVIDIA官方CUDA支持显卡列表中查看显卡型号是否支持CUDA。 2. 安装NVIDIA显卡驱动…

基于新年视角下的城市人流数据分析

2025年新年~~~ 旅游消费似乎又成为城市活力的动力话题。 透过话题看数据,透过数据看结果,无非是从--人流量--到--人留量,能不能留下人,能否因人而产生消费。 基于这个角度,地方政府经营城市的商业模式本质则是为城市…

数据分析系列--[12] RapidMiner辨别分析(含数据集)

一、数据准备 二、导入数据 三、数据预处理 四、建模辨别分析 五、导入测试集进行辨别分析 一、数据准备 点击下载数据集 二、导入数据 三、数据预处理 四、建模辨别分析 五、导入测试集进行辨别分析 Ending, congratulations, youre done.

【深度分析】DeepSeek 遭暴力破解,攻击 IP 均来自美国,造成影响有多大?有哪些好的防御措施?

技术铁幕下的暗战:当算力博弈演变为代码战争 一场针对中国AI独角兽的全球首例国家级密码爆破,揭开了数字时代技术博弈的残酷真相。DeepSeek服务器日志中持续跳动的美国IP地址,不仅是网络攻击的地理坐标,更是技术霸权对新兴挑战者的…

【数据采集】案例01:基于Scrapy采集豆瓣电影Top250的详细数据

基于Scrapy采集豆瓣电影Top250的详细数据 Scrapy 官方文档:https://docs.scrapy.org/en/latest/豆瓣电影Top250官网:https://movie.douban.com/top250写在前面 实验目的:基于Scrapy框架采集豆瓣电影Top250的详细数据。 电脑系统:Windows 使用软件:PyCharm、Navicat Python…

设计模式 - 行为模式_Template Method Pattern模板方法模式在数据处理中的应用

文章目录 概述1. 核心思想2. 结构3. 示例代码4. 优点5. 缺点6. 适用场景7. 案例:模板方法模式在数据处理中的应用案例背景UML搭建抽象基类 - 数据处理的 “总指挥”子类定制 - 适配不同供应商供应商 A 的数据处理器供应商 B 的数据处理器 在业务代码中整合运用 8. 总…

Heptagon record 数据结构

Heptagon 语言支持 record 数据结构。record 数据结构与 Scade struct 数据结构相似。对 record 结构的操作支持结构构造、record 成员访问,record 成员修改。 record 结构构造的形式如 {f1 val; f2; val2}。使用样例如 typet {f1:int; f2:bool} fun recordDef(…