[计算机网络之四] IP 协议

1、IP 协议概述

  IP 即网际协议,是 OSI 参考模型中的第 3 层 —— 网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。

IP的作用.png
  • 网络层和数据链路层的关系

  以行程和机票/火车票为例,从一个地方到达另一个地方的行程,中间可能需要乘坐多种交通工具,乘坐每种交通工具的这一段路相当于一段数据链路,只有知道完整的行程才能知道要经过哪些数据链路才能顺利到达目的地,而这就是网络层的作用,网络层通过路由选择,经过一个个路由器的转发,数据才能顺利到达目标主机。

IP和数据链路层的关系.png



2、IP 基础知识

  在计算机通信中,为了识别通信对端,必须要有一个类似于地址的识别码进行标识。在数据链路层,采用 MAC 地址,而在网络层,采用 IP 地址。

IP地址.png

(1)路由控制

  路由控制是指将分组数据发送到最终目标地址的功能。

路由控制.png

  路由器中维护了一个路由转发表,记录了某个网络的 IP 要通过哪个端口转发到另一个网络中去,路由器只知道下一跳(网络中的一个区间)转发的路径,但是通过网络中一跳跳的转发,最终可以到达目的主机。

多跳路由器.png

  与之类比的常见的场景是,你要去某个地方,但是不认路,你问别人要怎么走,别人告诉你,先走到某个地方,再问问人,一路问路,最终到达目的地。

IP包的发送.png

  路由控制表:为了将数据发给目标主机,所有主机都维护着一张路由控制表。该表记录 IP 数据在下右边应该发给哪个路由器,IP 包将根据这个路由表在各个数据链路上传输。

路由控制表.png


(2)数据链路的抽象化

  通过 IP 地址,网络层对数据链路层不同链路的相异特性进行了抽象化。不同的数据链路,最大传输单位(MTU:Maxiumum Transmission Unit)不同,在某个链路上可能只需要一个包,在另一个链路上可能需要分成多个包,这种将较大的 IP 包分成多个较小的 IP 包的操作就是分片处理

(3)IP 属于面向无连接型

  IP 面向无连接,发包之前不需要建立与对端目标地址之间的连接,这样做一是为了简化网络层协议的实现,二是为了提高处理速度。通信可靠性和连接的建立交给传输层去实现,通过合理分层,有利于后续对这些协议进行扩展和性能上的优化。


3、IP 地址的基础知识

  IP 地址(IPv4)用 32 位正整数来表示,每个主机上都必须有一块网卡,网卡通常都会设置一个 IP 地址,而路由器通常会有两块网卡,因为连接两个网络会有两个 IP 地址。

IP地址和网卡.png

(1)IP 地址的组成

  IP 通常由 “网络标识(网络地址)” 和 “主机标识(主机地址)” 两部分组成。

  网络标识在数据链路的每个段配置不同的值,必须保证互相连接的每个段的地址不重复。相同段内的主机必须有相同的网络标识,而主机标识在同一段内不允许重复。通过设置网络地址和主机地址,在互相连接的整个网络中保证每台主机的 IP 地址都不会互相重叠,即 IP 地址有了唯一性。

IP地址的主机标识.png

IP地址的网络标识.png


(2)IP地址的分类

  IP 地址可分为 A、B、C、D、E 五类,其中A、B、C类是常用的类型,D类用于多播,E类保留使用,

A~E 类地址的特点如下:

  • A 类地址:以 0 开头,第一个字节范围:0~127,网络号占一个字节,主机号占三个字节,因此一个网段最多能容纳 2^24 - 2 = 16777214 台主机;

  • B 类地址:以 10 开头,第一个字节范围:128~191,网络号占两个字节,主机号占两个字节,因此一个网段最多能容纳 2^16 - 2 = 65534 台主机;

  • C 类地址:以 110 开头,第一个字节范围:192~223,网络号占三个字节,主机号占一个字节,因此一个网段最多能容纳 2^8 - 2 = 254 台主机;

  • D 类地址:以 1110 开头,第一个字节范围为 224~239;

  • E 类地址:以 1111 开头,保留地址,第一个字节的范围为 240~255。

IP地址的分类.png

  主机地址不可以为全 0 或全 1,全0在表示对应的网络地址或 IP 地址不可获知的情况下才使用,而全1代表网段内的广播地址。

(3)广播地址

  广播地址用在同一个链路中相互连接的主机之间发送数据包。IP 地址中的主机地址部分全部变成 1,就成了广播地址,广播分为本地广播和直接广播两种。

  • 本地广播

    在本网络内的广播叫做本地广播。

本地广播.png
  • 直接广播

    在不同网络之间的广播叫做直接广播。

直接广播.png


(4)IP 多播

  多播用于将包发给特定组内的所有主机。由于直接使用 IP 协议,因此也不存在可靠传播。

  • 多播提高了发送效率

  在使用多播之前,一直使用广播的方式将数据发送给多台终端主机,广播跟多播相比的缺点:

  • 广播将数据发送给所有终端主机,需要网络内的主机 IP 之上的一层去判断是否有必要接收数据,是则接收,否则丢弃,会给毫无关系的网络或主机带来影响,造成网络上很多不必要的流量;

  • 广播无法穿透路由。

    多播既可以穿透路由,又实现了只给必要的组发送数据包。

单播.png
多播和广播.png
  • 多播地址

  多播使用 D 类地址。因此,如果从首位开始到第 4 位是 “1110”,就可以认为是多播地址,而剩下的28位可以成为多播的组编号。

多播地址.png

  从 224.0.0.0 到 239.255.255.255 都是多播地址的可用范围。其中从 224.0.0.0 到 224.0.0.225 的范围不需要路由控制,在同一个链路内也能实现多播。而在这个 范围之外设置多播地址会给全网所有组内成员发送多播的包。

(5)子网与子网掩码

  • 划分子网的必要性

  网络标识相同的计算机必须同属于同一个链路。而一个 A 类的网络最多可容纳 1600 多万台计算机,一个 B 类网络最多可容纳 6 万 5 千多台计算机,实际上是不存在有这么多计算机的网络。

  • 如何划分子网

  这就导致一个 A 类或 B 类网络中大部分地址是用不上的,造成极大的浪费,为了充分利用地址资源,通过子网掩码细分出比 A 类、B 类、C 类更小粒度的网络。这种方式实际就是将原来 A、B、C 类地址中的主机地址部分用作子网络,将原网络分为多个物理网络。

  • 子网掩码的表示方式

    子网掩码必须是 IP 地址的首位开始连续的 “1”。

    表示方式由两种,一种是将连续的 “1” 用 IP 地址的形式表示。

子网掩码的表示方式1.png

另一种是直接在 IP 后加个 “/” 再加数字表示有多少位连续的 “1”。

子网掩码的表示方式2.png

第二种方式下记述网络地址是可以省略后面的 “0”,例如 172.20.0.0/16 跟 172.20/16 其实是一个意思。

  • CIDR

  放弃对 IP 地址的传统分类,采用任意长度分割 IP 地址的网络标识和主机标识,这种方式叫做 CIDR(Classless Inter-Domain Routing,无类型域间选路)。

  CIDR 可以将多个地址划分到一个较大的网络内,更有效地录用了 IPv4 地址,同时通过路由集中降低了路由器的负担。

CIDR应用举例.png
  • VLSM

  CIDR 一开始应用时,要求网络内部要采用固定长度的子网掩码,但是在公司内部划分子网时,不同部门需要的主机数可能不一样,如果固定子网掩码长度,会造成不必要的 IP 地址浪费,举个栗子:

  某个公司申请了一个 C 类地址的网段 192.168.10.0/24 (24表示IP地址32位的前24位都是1,表示子网掩码255.255.255.0)。现在公司里有 A、B、C、D、E 五个部门,每个部门需要的主机数要求如下:

部门 需要的主机数
NetA 30台主机
NetB 24台主机
NetC 14台主机
NetD 6台主机
NetE 2台主机

  假设是公司内网要采用固定长度的子网掩码,那么肯定按主机数需求最大的部门来设定,A 部门需要 30 台主机,主机地址至少必须 5 位,2^5 - 2 = 30(去掉全 0 和全 1),所以网络地址是 27 位,子网掩码是 255.255.255.224,有 3 位可以作为子网号,所以一共可以有 8 个子网,如下:

网络号(3位子网号) 主机位
192.168.10. 000 00000
192.168.10. 001 00000
192.168.10. 010 00000
192.168.10. 011 00000
192.168.10. 100 00000
192.168.10. 101 00000
192.168.10. 110 00000
192.168.10. 111 00000

  B 部门依然需要 5 位表示主机地址,但是 C 部门只需要 4 位,D 部门只需要 3 位,E 部门只需要两位,如果能根据部门需要使用可变长的子网掩码,将节省 IP 地址资源,这就是 VLSM(Variable Length Subnet Mask)存在的价值。

(6)全局地址和私有地址

  全局地址指能在互联网上直接通信的 IP 地址,而私有地址不能,但是通过 NAT (Network Address Translation)技术,可以将私有地址转化为全局地址,最终使得配有私有地址的主机与配有全局地址的互联网主机实现了通信。

  比如家庭局域网分配给设备的 IP 地址是一个私有地址,而路由器把局域网内网中的私有地址转换为公网中的全局地址。

全局IP和私有IP.png



4、路由控制

(1)什么是路由控制

  IP 地址可用于网络层的报文传输,在设备上离不开路由器,路由器会保存一个路由控制表,决定了发送到某个目标主机的报文的下一跳要发送到哪个路由器。

路由控制表和IP包发送.png
  • 默认路由、主机路由、环回地址

    默认路由:减少路由控制表的大小,一般标记为 0.0.0.0 或 default。

    主机路由:子网掩码是32位,整个 IP 地址的所有位都参与路由,多用于不希望通过网络地址路由的情况。

    环回地址:在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址,IP 表示为 127.0.0.1,域名表示为 localhost。

(2)路由控制表的聚合

  减少路由表的大小。

路由表的聚合.png



5、IP 分割处理和再构成处理

(1)IP 报文的分片和重组

  不同的数据链路的最大传输单元 MTU 都不尽相同,当网络层的 IP 数据包交到数据链路层处理时,可能会将 IP 数据包划分成多个分片再发送。

  路由器会做分片但是不会做重组,重组在目标主机处完成,因为被分片的 IP 数据报传送的路径可能不一样。

IP报文的分片和重组.png

  分片的缺点:① 加重路由器的处理负荷;
        ② 一旦某个分片丢失,会造成整个 IP 数据报作废。

(2)路径 MTU

  路径 MTU 指从发送端到接收端主机之间不需要分片时最大 MTU 的大小。

  UDP 只负责用户数据报的快速发送,不保证可靠传输,也不会管分片,发送主机对 IP 数据报的分片在 IP 层实现,工作原理如下:

路径MTU.png

  TCP 根据路径 MTU 的大小计算出最大段长度(MSS),然后根据这些信息进行数据报的发送,IP 层不再进行分片,原理如下:

TCP路径MTU.png



6、IPv6

  IPv6 是为了根本解决 IPv4 地址耗尽的问题而被标准化的网际协议。

(1)IPv6 的特点

  扩展了 IPv4 的功能,减轻了管理员的负担,具有如下特点:

  • IP 地址的扩大与路由控制表的聚合

    聚合是为了避免路由控制表膨大。

  • 性能提升

    包首部简化处理,减轻路由器负荷,路由器不再做分片处理。

  • 支持即插即用功能

    即使没有 DHCP 服务器也可以实现自动分配 IP 地址。

  • 采用认证和加密功能

    应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能。

  • 多播、Mobile IP 成为扩展功能

(2)IPv6 地址的表示

  IPv6 地址有128个比特,一般用 8 个 16 位字节表示,字节用十六进制表示。

IPv6地址表示法.png

  如果中间的 16 位都是 0,则可以采用省略表示法

IPv6的省略表示.png


(3)IPv6 地址的结构

IPv6地址结构.png

  在 IPv6 的环境下,可以同时将这些 IP 地址全都设置在同一个 NIC 上,按需灵活使用。

IPv6中的通信.png
  • 全局单播地址

  直接在互联网中通信的地址。

全局单播地址.png
  • 唯一本地地址

  唯一本地地址是不进行互联网通信时所使用的地址,一般用于企业内网,在不联网或通过 NAT 以及代理联网的环境下使用。

唯一本地地址.png
  • 链路本地单播地址

  链路本地单播地址是指在同一个数据链路内唯一的地址,它用于不经过路由器,在同一个链路中的通信。通常接口 ID 保存 64 比特版的 MAC 地址。

链路本地单播地址.png


(4)IPv6 分段处理

  IPv6 的分片处理只在作为起点的发送端主机上进行,路由器不参与分片,这时为了减少路由器的负荷,提高网速。


7、IPv4首部

  IPv4 的数据报格式如下所示:

IPv4数据报格式.png

(1)版本(Version)

  表示 IP 协议的版本。比如 IPv4 的版本号是 4,IPv6 的版本号是 6。
  常见的协议和对应的版本号如下:

IP首部的版本号.png


(2)首部长度(IHL: Internet Header Length)

  表示 IP 首部的大小,单位为 4 字节(32 比特),没有可选项时,一般为 5。

(3)区分服务(TOS: Type Of Service)

  8 比特组成,表示服务的质量,每一位的含义如表所示:

TOS.png

  因为 TOS 的控制过于复杂,互联网几乎没有使用,该字段被拆分为 DSCP 和 ECN 两个字段,分别进行质量控制和拥塞通知。

DSCP和ECN.png
  • DSCP

  DSCP(Differential Services Codepoint,差分服务代码点),用来进行质量控制。

  • ECN

  ECN(Explicit Congestion Notification,显式拥塞通告),用来报告网络拥堵情况,由两个比特组成。

ECN.png

  第 6 位的 ECT 用以通告上层 TCP 层协议是否处理 ECN。当路由器在转发 ECN 为 1 的包的过程中,如果出现网络拥堵的情况,就将 CE 为设置为 1。

(4)总长度(Total Length)

  IP 首部和数据部分合起来的总字节数。

(5)标识(ID: Identification)

  用于分片重组,同一个分片的标识值相同,不同分片的标识值不同。

(6)标志(Flags)

  标识包被分片的相关信息。每一位的具体含义如下:

分片标志flags.png


(7)片偏移(Fragment Offset)

  标识被分片的每一个分段相对于原始数据的位置。第一个分片对应的值为 0,占 13 位,最多可以表示 2^13 = 8192 个相对位置,单位为8字节,因此最大可以表示原始数据 8 * 8192 = 66636 字节的位置。

(8)生存时间(TTL: Time To Live)

  表示可以中转多少个路由器,没经过一个路由器,TTL 就会减少 1,直到变成 0 则丢弃该包。

(9)协议(Protocol)

  表示 IP 首部的下一个首部隶属于哪个协议。

  最常用是表示传输层的 TCP/UDP 协议,如果用于 IP 隧道,则下一个首部可能仍然是 IP 首部,除此之外还可能是其他协议。

(10)首部校验和(Header Checksum)

  只校验数据报的首部,用来确保 IP 数据报不被破坏。

(11)源地址(Source Address)

  表示发送端 IP 地址。

(12)目标地址(Destination Address)

  表示接收端 IP 地址。

(13)可选项(Options)

  长度可变,通常只在进行实验或诊断时使用。包含如下几点信息:

  • 安全级别
  • 源路径
  • 路径记录
  • 时间戳

(14)填充(Padding)

  首部的比特数必须是 32 的整数倍,如果不足则填充,通常只在使用可选项的情况下才会填充。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354