【计算机网络】初识IP协议


前言

IP协议,可谓是程序猿必备的基础功之一,这不仅仅是因为IP协议为面试的常客,更是因为IP协议为整个网络协议中最重要、最常被人接触的一种协议。例如IP地址就几乎为所有人所熟知的一种概念,无论是浏览网页、聊天、打游戏,都离不开IP地址,想必这也说明了其重要性了吧。掌握IP协议不仅能够让你在面试脱颖而出,更能提高你的作为程序员的内功,学习IP协议刻不容缓,从现在开始!!!

IP协议基础

概念

IP协议是一种不可靠的网络传输协议 ,对于数据的传输只是尽力而为,主要负责将数据传输到网络中唯一标识的目的地址。IP协议工作在TCP/IP模型中的网络层,负责为数据包分配源IP和目的IP,并将选择合适的路由将数据传输到目的地。

IP协议分为IPV4与IPV6,IPV6是用于解决IPV4地址耗尽问题而被设计出来的终极解决方案,但因为IPV6与IPV4兼容性不好,难以推广,所以当今主流的版本还是IPV4.

IP的报文格式

下图为IP的报文格式。

cpp 复制代码
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| 4位版本  |  4位首部长度  | 8位服务类型(TOS)|       16位总长度       | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|         16位标识        |    3位标志    |     13位片偏移         | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|      8位生存时间(TTL)    |   8位协议     |      16位首部校验和    | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                       32位源IP地址                            | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                       32位目的IP地址                           | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|              选项                       |         填充        | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          数据报                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • 版本:用于标识IP协议版本,如:IPV4则为4,IPV6则为6

  • 首部长度:用于计算报头长度,计算方式为:首部长度 * 4

  • 服务类型:一般服务有:最小延时、最大吞吐量、最高可靠性、最小成本。

  • 总长度:IP数据报的总长度。

  • 16位标识:用于标识报文的唯一性,当报文被分片时则分片的标识都一致

  • 3位标识

    • 第一位:用于保留,暂时不使用
    • 第二位:标识为1则表示禁止IP数据报分片
    • 第三位:标识为1则表示数据报分片了,为0表示数据数据之后没有分片了
  • 13位片偏移:用于标识分片的数据在原数据的位置,计算方式为

  • 8位生存时间:用于标识数据最多能经过多少次路由转发,最多经过为255个路由转发。

  • 8位协议:用于标识上层的协议,为TCP则交付给上层TCP协议...

  • 16位首部校验和:用于检验是否头部是否损坏

IP地址

子网掩码

一个IP地址被划分成网络号与主机号,子网掩码是用于区别IP地址中网络号与主机号的手段,子网掩码通过与IP之地进行按位与来区别主机地址与网络地址。

工作原理:

子网掩码 CIDR表示法 可用主机数 描述
255.0.0.0 /8 16,777,214 A类地址,超大规模网络
255.255.0.0 /16 65,534 B类地址,大规模网络
255.255.255.0 /24 254 C类地址,中小规模网络
255.255.255.128 /25 126 子网掩码用于划分更小的子网
255.255.255.192 /26 62 更小规模的子网

例子:

cpp 复制代码
192.168.1.128/26  // 十进制
11000000.10101000.00000001.10000000/26 // 二进制
11111111.11111111.11111111.11000000    // 掩码

// 主机号范围:
192.168.1.129 ~ 192.168.1.190
// 网络地址:
192.168.1.128
// 广播地址:
192.168.1.191
//计算过程:
根据最后6位掩码得出:可用主机地址数为63个。除去网络地址与广播地址则为61个。

IP地址分类

IP地址分为4类地址:

  1. A类地址:0.0.0.0/8 ~ 127.0.0.0/8 为A类地址, 主机位有24位
  2. B类地址:128.0.0.1/16 ~ 191.255.0.0/16 为B类地址,主机位有16位
  3. C类地址:192.168.0.0/24 ~ 239.255.255.0/24 为C类地址,主机位有16位
  4. D类地址:224.0.0.0 ~ 239.255.255.255 为D类地址,没有主机位,常用于多播。

特殊地址:

  • 本地环回:127.0.0.0/8 的地址都为本地环回,数据只会在本机内传输

  • 私网IP:私网IP指的是不会传入公网(互联网)的地址,设置之初用于本地网络的数据传输,私网IP有以下三类:

    1. 10.0.0.0~10.255.255.255 (10/8) :能够容纳 2 24 2^{24} 224 个主机,一般用于大型网络
    2. 172.16.0.0~172.31.255.255(172.16/12) : 能够容纳 2 20 2^{20} 220 个主机,一般用于中型网络
    3. 192.168.0.0~192.168.255.255(192.168/16) : 能够容纳 2 16 2^{16} 216 个主机,一般用于小型网络
  • 广播地址 :广播地址指的是主机位全为1的地址,如:192.168.255.255/16。广播地址允许设备将数据发送给同一网络中全部的主机。

  • 网络地址 :网络地址指的是主机为全为0的地址,如:192.168.0.0/16.网络地址用来标识所在子网的地址,用于确定IP所属网络。

IP协议工作原理

IP地址划分

当今世界上拥有70多亿人口,而IPV4地址使用32个bit位组成的,最多只能容纳42亿台主机,为了解决IPV4地址短缺的问题,世界各地的科学家们也是绞尽脑汁,最终得到了子网划分与NAT模式这两种最常用的解决方案。

子网划分

我们在前面已经了解了子网掩码,那么也该介绍子网掩码相关的子网划分了。世界上的网络分为4大类,但现实是我们不太可能会存在一个子网内存在数十万台主机的情况,直接使用A类、B类会造成极大的浪费,为了解决这种情况,子网划分技术被设计了出来。

工作原理

子网划分其实就是把主机号的一部分划分给网络号,让一个大的网络地址空间划分成若干个较小的、更容易管理的子网,从而提高网络地址空间的利用率与管理性。

可变掩码长度

子网划分通过掩码的确提高了网络的利用率,但实际上不是每个子网都需要如此大的主机范围。

例如:

  1. 部门A需要500台主机
  2. 部门B需要100台主机
  3. 部门C需要50台主机。

像这种情况子网掩码如果保持一致,那么子网划分的效率将会降低不少,于是为了继续提高IP地址的利用率,可变长度子网掩码(VLSM)又由此诞生。

NAT模式

尽管子网划分技术提高了网络IP地址的利用率,但IP地址的总量也还是不会改变,如果每台主机都分配一个IP地址,那么还是远远不够的,毕竟当今人口70亿,而IP地址只有40亿个。

此时NAT技术便应声而起,~公网IP不够,私网IP来凑~,NAT技术允许将主机私网地址转换成公网地址,从此NAT技术便成为最重要的解决IP数量不足的解决方案,以至于严重阻碍到IPV6的发展。

工作原理

NAT技术通过映射技术来实现私网到公网的转换,每个连接通过私网IP:端口->公网IP:端口的方式来进行映射,当端口有冲突时则随机选择一个端口。

NAT技术的小细节

  • TCP与NAT:使用TCP连接时,NAT服务器会在接收到FIN信号时删除映射关系,如果连接长时间无响应则一般在5分钟后删除映射条目。

  • UDP与NAT: 使用UDP连接时,NAT服务器会建立一个临时映射条目,如果连接长时间无响应则自动删除映射条目。

NAT的限制

  • 无法直接访问位于NAT服务器后的主机。
  • 映射条目的创建和销毁会损耗一定性能。
  • 一旦NAT设备出现异常,所有的TCP连接都会断掉。

路由选择

IP协议不能仅凭自己就将数据发送到远端地址,为了将报文发送到合适的网络,IP报文需要交付给路由器,让路由器选择最适合的地址。

路由器中拥有着一种叫做路由控制表的数据结构,当IP报文被发送到路由器时,路由器会根据其路由控制表选择一个最匹配的IP地址,如果没有匹配的IP地址,则发送到默认路由。

路由选择类型

  1. 静态路由:需要管理员手动设置路由表。
  2. 动态路由:自动计算更新路由表。

IP相关协议

ICMP

无论你是否为一名程序猿,相信ping指令都多多少少有所了解,而这个ping指令便是利用了ICMP协议而实现的程序。ICMP协议是为了辅助IP协议而被设计出来的协议,因为IP协议无法确定远端IP地址是否存在,

工作流程

一般情况下,IP报文如果转发到路由器,发现目的IP地址不存在,那么路由器将会丢弃该IP报文,但如果IP报文封装上ICMP协议,则路由器将会把将错误原因返回填上到ICMP的报文中,并返回。

DHCP

DHCP是一种自动分配IP地址的协议,意在实现即插即用,也就是当设备连接上网络后,DCHP服务器(一般在路由器上)会自动为你分配一个闲置的IP地址,免除了每次添加设备都要分配IP地址的麻烦。

工作流程

  • 发现阶段:首先发送一条广播信息(源ip:0.0.0.0, 目的ip:255.255.255.255)来发现DHCP服务器,DHCP发现信息后将返回一条DHCP提供包信息(包含可分配的IP、子网掩码、租约时间等).

  • 请求阶段:客户端选择一个IP地址,并发送请求信息给DHCP服务器,表明接受服务。DHCP服务器收到信息后,发送一个DHCP确认信息给客户端,表明正式分配IP地址给客户端。

DNS

DNS是一种将域名转换为IP地址的协议,打比喻来讲DNS就像是手机中的电话簿,我们可以用名字来标明电话号码,这样我们便减少了通信的成本。

工作流程

  1. 发送请求:用户向DNS服务器查询域名对应的IP地址。

  2. 检查缓存:用户的请求会先发送到本地DNS服务器,DNS服务器会检查是否有该域名的缓冲,如果没有则递归查询。

  3. 递归查询:本地DNS服务器没有域名信息,则会向根DNS服务器查询,层层向上查询,类似于在树中递归查找。

  4. 返回结果:如果找到了结果则将结果返回给客户端。

总结

IP协议是一种不可靠的网络协议,主机需要访问互联网则必须要有公网IP,为了解决IP地址不足的问题,子网划分与NAT技术被发明了出来。为了更好的服务IP协议,像DNS、DHCP、ICMP等协议被设计出来,互联网技术的发展也离不开这些辅助的协议。

相关推荐
.Ayang8 分钟前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型
hgdlip1 小时前
主IP地址与从IP地址:深入解析与应用探讨
网络·网络协议·tcp/ip
今天我刷leetcode了吗1 小时前
docker 配置同宿主机共同网段的IP 同时通过通网段的另一个电脑实现远程连接docker
tcp/ip·docker·电脑
代码吐槽菌1 小时前
基于SSM的毕业论文管理系统【附源码】
java·开发语言·数据库·后端·ssm
豌豆花下猫2 小时前
Python 潮流周刊#78:async/await 是糟糕的设计(摘要)
后端·python·ai
YMWM_2 小时前
第一章 Go语言简介
开发语言·后端·golang
码蜂窝编程官方2 小时前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
lwprain2 小时前
安装支持ssl的harbor 2.1.4 docker 19.03.8 docker-compose 1.24.0
网络协议·ssl·harbor
软件技术员2 小时前
Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书
服务器·网络协议·ssl
hummhumm2 小时前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang