网络编程 - IP协议

目录

一,IP协议格式

1.1 拆包组包

1.2 8位生存空间

二,地址管理

2.1 动态分配 IP

2.2 NAT 机制(网络地址转换)

2.3 IPv6

2.4 网段划分

三,路由选择


一,IP协议格式

  • 4位版本:IPv4
  • 4位首部长度:代表IP报头的长度,报头最短是20个字节(即没有选项),最长是60个字节(即选项拉满),虽然只有 4 bit ,但是此处的单位是4个字节,所以可以表示60个字节的长度。
  • 8位服务类型:3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。
  • 16位总长度:IP数据包的长度(0~64kb),虽然IP协议也存在64kb这样的大小限制,但是IP协议自身支持 "拆包组包" 这样的功能。
  • 8位协议:描述该IP协议的载荷部分是一个UDP协议,还是一个TCP协议,要知道按照那种协议的方式来拆分。
  • 16位首部校验和:这个校验和只是校验 IP首部,不管 IP数据的载荷部分,因为UDP/TCP协议自身有校验和
  • 32位源IP地址/32位目的IP地址:本质上是一个32位整数,为了方便理解,写作点分十进制,比如:127.0.0.1

1.1 拆包组包

通过以下三个属性,来支持 IP 协议的拆包组包:

  •  16位标识:如果16位标识相同,就说明它们是由一个同一个大包拆分成的小包
  •  3位标志:有一位表示是否可以拆包,有一位表示是否是最后一个(即组包是否结束),还有一位没什么用
  • 13位片偏移:由该部分的大小表示组包时的前后顺序

1.2 8位生存空间

描述这个IP数据包,在网络上还能存活多久,TTL的单位是次数,IP数据包被构造出来的时候,会给TTL赋一个初始值(32,64....),数据在转发过程中,每转发一次,TTL就 - 1,如果这个数据包转发了TTL次之后,还没有到达对方,就会被丢弃。

虽然可能会出现TTL耗尽还没有到达目的设备的情况,但是该机制还是很有用的,假设一个数据包的目的IP写错了,实际上不存在这个IP,那么这个数据包不可能到达目标,也不可能允许在网络上一直存在。

这有点类似于"六度空间理论" —— 理论上你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过6个中间人你就能够认识任何一个陌生人。这在现实中很难做到,因为不是每个朋友都能全力以赴的执行,但是在计算机中是可以的,网络环境中包含很多的路由器,每一个路由器都会转发给相邻的设备,所以出现TTL耗尽的概率很小。

二,地址管理

IP地址,是一个32位的整数,也就是说最多就只有4294967296个地址,而到目前为止,能够上网的设备远远超过了这个数字,如何解决 IP地址不够用的问题呢?

2.1 动态分配 IP

就是如果你这个设备不上网,就把分配给你的IP地址分配给别人去使用,这个方案提高了 IP 地址的利用率,但是没有增加 IP 地址的数目,也就是治标不治本。(虽然是一个过渡方案,但目前仍然广泛使用)

2.2 NAT 机制(网络地址转换)

将IP地址分成两个大类:

  1. 内网IP(局域网IP)如果一个IP地址,是 10.* 或者 172.16.* - 172.31.* 或者 192.168.*,那么就称为内网 IP,在同一个局域网内部,内网IP是不能重复的;在不同的局域网中,内网IP是可以重复的。
  2. 外网IP(广域网IP)除了内网IP,剩下的IP就是外网IP,外网IP必须唯一

注:NAT机制的本质上就是让一个IP地址,代表一批设备。

举个例子:比如有1~100的编号,要用这些编号表示更多的人。

方案一:一个编号表示一个人,那么只能表示100个人。

方案二:1~10这几个编号,每一个都表示一个班,每一个班都能有11~100这些编号的人。那么就可以表示900个人,NAT机制就类似于这个方案。

 NAT机制是如何工作的?

 但是这里还有一个问题,如果有多台设备同时访问同一个服务器,此时返回的响应,路由器设备要返回给哪个主机?此时我们就会使用端口号来区分。

 那如果两个设备的端口号相同,路由器会主动把相同的端口,替换成不同的端口,路由器内部会记录它们的映射关系。

当前的网络环境,就是使用 NAT + 动态分配 的方式来解决 IP地址不够用的问题。NAT机制最大的优势,就是他是一个 "纯软件的方案"(只要软件一升级就可以使用),也正因为这个机制,局域网内部的设备能主动访问外网的设备,但是外网的设备无法访问内网的设备。

2.3 IPv6

IPv6使用16个字节来表示 IP 地址,也就是 2^128,这么大的数字足以给地球上的每一粒沙子都分配一个IP地址,而沙子是制造计算机的原材料,也就是说除非有一天我们走出地球,否则IP地址是不可能用完的。

2.4 网段划分

一个IP地址会分成两个部分,网络号(标识一个局域网) + 主机号(标识了局域网中的一个设备),同一个局域网中的设备,网络号必须相同,主机号可以不同,两个相邻的局域网(通过一个路由器连接),网络号不能相同。

一个IP地址,哪里是网络号,哪里是主机号是由子网掩码确定的,子网掩码也是一个32位的整数,但是它的左侧二进制位全是1,右侧全是0。而被标记成1的部分对应的IP地址就是网络号。比如:

如果一个IP地址,主机号全1,表示这个IP是一个"广播地址",不能给一个具体主机分配;如果一个IP地址,主机号全0,当前这个IP表示网络号,代表一个局域网,不能给一个具体主机分配;如果一个IP是 127 开头的,此时这个IP就是一个环回IP,最常用的127.0.0.1,表示设备自身。主要用来进行一些测试。

三,路由选择

路由选择就是描述了IP协议的转发过程,在进行IP数据报转发的时候,每一个路由器只能一些局部信息(它是和谁相连的)这就意味着IP数据在转发过程中,是一个"探索式"的过程,只能给出一个局部最优解。

一个网络层的数据报,每次到达一个路由器,就会进行"问路",每一个路由器内部都有一个数据结构叫"路由表 ",根据目的IP查询路由表,如果查到,就按照路由表给定的方向转发,如果没查到,路由表中有一个默认的表项,按照默认的表项转发即可。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶祇秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值