Java 网络原理 ②-IP协议

这里是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 地址 数量耗尽的问题,我们下节再见~~~
  • 毕竟不知后事如何,且听下回分解
  • ❤️❤️❤️❤️❤️❤️❤️
相关推荐
LG.YDX1 小时前
计算机网络:计算机网络的分类
计算机网络
Lin桐1 小时前
②Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网
linux·网络协议·tcp/ip·网络安全·缓存·信息与通信·信号处理
anguruanjian1 小时前
安固软件指南:确保外发文件安全的全面策略
服务器·网络·安全·企业微信·安固软件
esmember2 小时前
电路研究9.3.1——合宙Air780EP中的AT开发指南:TCP 使用 SSL 示例
网络·at指令·tcp 使用 ssl 示例
自由鬼2 小时前
免费开源抓包工具Wireshark介绍
运维·服务器·网络·测试工具·网络安全·wireshark
希望_睿智2 小时前
C++网络编程之套接字选项配置
c++·网络协议
真正的醒悟3 小时前
SSL-VPN案例
网络·windows·ssl
愚公搬代码5 小时前
【愚公系列】《Python网络爬虫从入门到精通》045-Charles的SSL证书的安装
网络·爬虫·python·网络协议·ssl
不脱发的猴子8 小时前
Wireshark使用教程
网络·测试工具·wireshark
EasyCVR10 小时前
EasyRTC嵌入式视频通话SDK的跨平台适配,构建web浏览器、Linux、ARM、安卓等终端的低延迟音视频通信
android·arm开发·网络协议·tcp/ip·音视频·webrtc