一篇文章带你熟悉 TCP/IP协议-(一)-
https://segmentfault.com/a/11...
一篇文章带你熟悉 TCP/IP协议-(二)-
https://segmentfault.com/a/11...
一篇文章带你熟悉 TCP/IP协议-(三)-
https://segmentfault.com/a/11...
4、网络层中的 IP 协议
- IP(IPv四、IPv6)至关于 OSI 参考模型中的第3层——网络层。网络层的主要做用是“实现终端节点之间的通讯”。这种终端节点之间的通讯也叫“点对点通讯”。
- 网络的下一层——数据链路层的主要做用是在互连同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就须要借助网络层。网络层能够跨越不一样的数据链路,即便是在不一样的数据链路上也能实现两端节点之间的数据包传输。
- IP 大体分为三大做用模块,它们是 IP 寻址、路由(最终节点为止的转发)以及 IP 分包与组包。
1. IP 地址
1.1 IP 地址概述
- 在计算机通讯中,为了识别通讯对端,必需要有一个相似于地址的识别码进行标识。在数据链路中的 MAC 地址正是用来标识同一个链路中不一样计算机的一种识别码。
- 做为网络层的 IP ,也有这种地址信息,通常叫作 IP 地址。IP 地址用于在“链接到网络中的全部主机中识别出进行通讯的目标地址”。所以,在 TCP/IP 通讯中全部主机或路由器必须设定本身的 IP 地址。
- 不论一台主机与哪一种数据链路链接,其 IP 地址的形式都保持不变。
- IP 地址(IPv4 地址)由32位正整数来表示。IP 地址在计算机内部以二进制方式被处理。然而,因为咱们并不习惯于采用二进制方式,咱们将32位的 IP 地址以每8位为一组,分红4组,每组以 “.” 隔开,再将每组数转换成十进制数。以下:

1.2 IP 地址由网络和主机两部分标识组成
- 以下图,网络标识在数据链路的每一个段配置不一样的值。网络标识必须保证相互链接的每一个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP 地址的“主机标识”则不容许在同一个网段内重复出现。由此,能够经过设置网络地址和主机地址,在相互链接的整个网络中保证每台主机的 IP 地址都不会相互重叠。即 IP 地址具备了惟一性。

- 以下图,IP 包被转发到途中某个路由器时,正是利用目标 IP 地址的网络标识进行路由。由于即便不看主机标识,只要一见到网络标识就能判断出是否为该网段内的主机。

1.3 IP 地址的分类
- IP 地址分为四个级别,分别为A类、B类、C类、D类。它根据 IP 地址中从第 1 位到第 4 位的比特列对其网络标识和主机标识进行区分。
A 类 IP 地址是首位以 “0” 开头的地址。从第 1 位到第 8 位是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0 是 A 类的网络地址。A 类地址的后 24 位至关于主机标识。所以,一个网段内可容纳的主机地址上限为16,777,214个。segmentfault
- B 类 IP 地址是前两位 “10” 的地址。从第 1 位到第 16 位是它的网络标识。用十进制表示的话,128.0.0.0~191.255.0.0 是 B 类的网络地址。B 类地址的后 16 位至关于主机标识。所以,一个网段内可容纳的主机地址上限为65,534个。
- C 类 IP 地址是前三位为 “110” 的地址。从第 1 位到第 24 位是它的网络标识。用十进制表示的话,192.0.0.0~223.255.255.0 是 C 类的网络地址。C 类地址的后 8 位至关于主机标识。所以,一个网段内可容纳的主机地址上限为254个。
- D 类 IP 地址是前四位为 “1110” 的地址。从第 1 位到第 32 位是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255 是 D 类的网络地址。D 类地址没有主机标识,经常使用于多播。
- 在分配 IP 地址时关于主机标识有一点须要注意。即要用比特位表示主机地址时,不能够所有为 0 或所有为 1。由于所有为 0 只有在表示对应的网络地址或 IP 地址不能够获知的状况下才使用。而所有为 1 的主机一般做为广播地址。所以,在分配过程当中,应该去掉这两种状况。这也是为何 C 类地址每一个网段最多只能有 254( 28 - 2 = 254)个主机地址的缘由。
1.4 广播地址
- 广播地址用于在同一个链路中相互链接的主机之间发送数据包。将 IP 地址中的主机地址部分所有设置为 1,就成了广播地址。
- 广播分为本地广播和直接广播两种。在本网络内的广播叫作本地广播;在不一样网络之间的广播叫作直接广播。
1.5 IP 多播
- 多播用于将包发送给特定组内的全部主机。因为其直接使用 IP 地址,所以也不存在可靠传输。
- 相比于广播,多播既能够穿透路由器,又能够实现只给那些必要的组发送数据包。请看下图:

- 多播使用 D 类地址。所以,若是从首位开始到第 4 位是 “1110”,就能够认为是多播地址。而剩下的 28 位能够成为多播的组编号。
此外, 对于多播,全部的主机(路由器之外的主机和终端主机)必须属于 224.0.0.1 的组,全部的路由器必须属于 224.0.0.2 的组。安全
1.6 子网掩码
- 如今一个 IP 地址的网络标识和主机标识已再也不受限于该地址的类别,而是由一个叫作“子网掩码”的识别码经过子网网络地址细分出比 A 类、B 类、C 类更小粒度的网络。这种方式实际上就是将原来 A 类、B 类、C 类等分类中的主机地址部分用做子网地址,能够将原网络分为多个物理网络的一种机制。
- 子网掩码用二进制方式表示的话,也是一个 32 位的数字。它对应 IP 地址网络标识部分的位所有为 “1”,对应 IP 地址主机标识的部分则所有为 “0”。由此,一个 IP 地址能够再也不受限于本身的类别,而是能够用这样的子网掩码自由地定位本身的网络标识长度。固然,子网掩码必须是 IP 地址的首位开始连续的 “1”。
- 对于子网掩码,目前有两种表示方式。第一种是,将 IP 地址与子网掩码的地址分别用两行来表示。以 172.20.100.52 的前 26 位是网络地址的状况为例,以下:

- 第二种表示方式是,在每一个 IP 地址后面追加网络地址的位数用 “/ ” 隔开,以下:

另外,在第二种方式下记述网络地址时能够省略后面的 “0” 。例如:172.20.0.0/26 跟 172.20/26 实际上是一个意思。服务器
2. 路由
- 发送数据包时所使用的地址是网络层的地址,即 IP 地址。然而仅仅有 IP 地址还不足以实现将数据包发送到对端目标地址,在数据发送过程当中还须要相似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表。
- 该路由控制表的造成方式有两种:一种是管理员手动设置,另外一种是路由器与其余路由器相互交换信息时自动刷新。前者也叫作静态路由控制,然后者叫作动态路由控制。
- IP 协议始终认为路由表是正确的。而后,IP 自己并无定义制做路由控制表的协议。即 IP 没有制做路由控制表的机制。该表示由一个叫作“路由协议”的协议制做而成。
2.1 IP 地址与路由控制
- IP 地址的网络地址部分用于进行路由控制。
- 路由控制表中记录着网络地址与下一步应该发送至路由器的地址。
- 在发送 IP 包时,首先要肯定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具备相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。若是路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。

3. IP 分包与组包
- 每种数据链路的最大传输单元(MTU)都不尽相同,由于每一个不一样类型的数据链路的使用目的不一样。使用目的不一样,可承载的 MTU 也就不一样。
- 任何一台主机都有必要对 IP 分片进行相应的处理。分片每每在网络上遇到比较大的报文没法一会儿发送出去时才会进行处理。
- 通过分片以后的 IP 数据报在被重组的时候,只能由目标主机进行。路由器虽然作分片但不会进行重组。
3.1 路径 MTU 发现
- 分片机制也有它的不足。如路由器的处理负荷加剧之类。所以,只要容许,是不但愿由路由器进行 IP 数据包的分片处理的。
- 为了应对分片机制的不足,“路径 MTU 发现” 技术应运而生。路径 MTU 指的是,从发送端主机到接收端主机之间不须要分片是最大 MTU 的大小。即路径中存在的全部数据链路中最小的 MTU 。
- 进行路径 MTU 发现,就能够避免在中途的路由器上进行分片处理,也能够在 TCP 中发送更大的包。
4. IPv6
- IPv6(IP version 6)是为了根本解决 IPv4 地址耗尽的问题而被标准化的网际协议。IPv4 的地址长度为 4 个 8 位字节,即 32 比特。而 IPv6 的地址长度则是原来的 4 倍,即 128 比特,通常写成 8 个 16 位字节。
4.1 IPv6 的特色
- IP 得知的扩大与路由控制表的聚合。
- 性能提高。包首部长度采用固定的值(40字节),再也不采用首部检验码。简化首部结构,减轻路由器负担。路由器再也不作分片处理。
- 支持即插即用功能。即便没有DHCP服务器也能够实现自动分配 IP 地址。
- 采用认证与加密功能。应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能。
- 多播、Mobile IP 成为扩展功能。
4.2 IPv6 中 IP 地址的标记方法
- 通常人们将 128 比特 IP 地址以每 16 比特为一组,每组用冒号(“:”)隔开进行标记。
- 并且若是出现连续的 0 时还能够将这些 0 省略,并用两个冒号(“::”)隔开。可是,一个 IP 地址中只容许出现一次两个连续的冒号。
4.3 IPv6 地址的结构
- IPv6 相似 IPv4,也是经过 IP 地址的前几位标识 IP 地址的种类。
- 在互联网通讯中,使用一种全局的单播地址。它是互联网中惟一的一个地址,不须要正式分配 IP 地址。

4.4 全局单播地址
- 全局单播地址是指世界上惟一的一个地址。它是互联网通讯以及各个域内部通讯中最为经常使用的一个 IPv6 地址。
- 格式以下图所示,如今 IPv6 的网络中所使用的格式为,n = 48,m = 16 以及 128 - n - m = 64。即前 64 比特为网络标识,后 64 比特为主机标识。

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

4.6 惟一本地地址
- 惟一本地地址是不进行互联网通讯时所用的地址。
- 惟一本地地址虽然不会与互联网链接,可是也会尽量地随机生成一个惟一的全局 ID。
- L 一般被置为 1
- 全局 ID 的值随机决定
- 子网 ID 是指该域子网地址
- 接口 ID 即为接口的 ID

4.7 IPv6 分段处理
- IPv6 的分片处理只在做为起点的发送端主机上进行,路由器不参与分片。
- IPv6 中最小 MTU 为 1280 字节,所以,在嵌入式系统中对于那些有必定系统资源限制的设备来讲,不须要进行“路径 MTU 发现”,而是在发送 IP 包时直接以 1280 字节为单位分片送出。
4.8 IP 首部(暂略)
5. IP 协议相关技术
- IP 旨在让最终目标主机收到数据包,可是在这一过程当中仅仅有 IP 是没法实现通讯的。必须还有可以解析主机名称和 MAC 地址的功能,以及数据包在发送过程当中异常状况处理的功能。
5.1 DNS
- 咱们日常在访问某个网站时不适用 IP 地址,而是用一串由罗马字和点号组成的字符串。而通常用户在使用 TCP/IP 进行通讯时也不使用 IP 地址。可以这样作是由于有了 DNS (Domain Name System)功能的支持。DNS 能够将那串字符串自动转换为具体的 IP 地址。
- 这种 DNS 不只适用于 IPv4,还适用于 IPv6。
5.2 ARP
- 只要肯定了 IP 地址,就能够向这个目标地址发送 IP 数据报。然而,在底层数据链路层,进行实际通讯时却有必要了解每一个 IP 地址所对应的 MAC 地址。
- ARP 是一种解决地址问题的协议。以目标 IP 地址为线索,用来定位下一个应该接收数据分包的网络设备对应的 MAC 地址。不过 ARP 只适用于 IPv4,不能用于 IPv6。IPv6 中能够用 ICMPv6 替代 ARP 发送邻居探索消息。
- RARP 是将 ARP 反过来,从 MAC 地址定位 IP 地址的一种协议。
5.3 ICMP
- ICMP 的主要功能包括,确认 IP 包是否成功送达目标地址,通知在发送过程中 IP 包被废弃的具体缘由,改善网络设置等。
- IPv4 中 ICMP 仅做为一个辅助做用支持 IPv4。也就是说,在 IPv4 时期,即便没有 ICMP,仍然能够实现 IP 通讯。然而,在 IPv6 中,ICMP 的做用被扩大,若是没有 ICMPv6,IPv6 就没法进行正常通讯。
5.4 DHCP
- 若是逐一为每一台主机设置 IP 地址会是很是繁琐的事情。特别是在移动使用笔记本电脑、只能终端以及平板电脑等设备时,每移动到一个新的地方,都要从新设置 IP 地址。
- 因而,为了实现自动设置 IP 地址、统一管理 IP 地址分配,就产生了 DHCP(Dynamic Host Configuration Protocol)协议。有了 DHCP,计算机只要链接到网络,就能够进行 TCP/IP 通讯。也就是说,DHCP 让即插即用变得可能。
- DHCP 不只在 IPv4 中,在 IPv6 中也可使用。
5.5 NAT
- NAT(Network Address Translator)是用于在本地网络中使用私有地址,在链接互联网时转而使用全局 IP 地址的技术。
- 除转换 IP 地址外,还出现了能够转换 TCP、UDP 端口号的 NAPT(Network Address Ports Translator)技术,由此能够实现用一个全局 IP 地址与多个主机的通讯。
- NAT(NAPT)其实是为正在面临地址枯竭的 IPv4 而开发的技术。不过,在 IPv6 中为了提升网络安全也在使用 NAT,在 IPv4 和 IPv6 之间的相互通讯当中经常使用 NAT-PT。
5.6 IP 隧道

- 如上图的网络环境中,网络 A 与网络 B 之间没法直接进行通讯,为了让它们之间正常通讯,这时必须得采用 IP 隧道的功能。
- IP 隧道能够将那些从网络 A 发过来的 IPv6 的包统合为一个数据,再为之追加一个 IPv4 的首部之后转发给网络 C。
- 通常状况下,紧接着 IP 首部的是 TCP 或 UDP 的首部。然而,如今的应用当中“ IP 首部的后面仍是 IP 首部”或者“ IP 首部的后面是 IPv6