TCP/IP协议栈

TCP/IP协议栈

思维导图

image.png

TCP/IP协议栈

首先我们了解一下IP在TCP/IP中的位置
image.png

IPv4分组

网络层将传输层的数据打包后,如果数据很小,可以称为IP数据报,如果数据过大则进行分片,每一片称为IPv4分组。一般数据都比较多,大部分情况都是分组。

IPv4分组格式

一个IP分组由首部数据两部分组成。首部前一部分的长度固定,共20B,是所有IP分组必须具有的。在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制。
image.png
image.png

IP首部的部分重要字段含义如下:

  • 版本。指IP的版本,目前广泛使用的版本号为4。
  • 首部长度占4位,1B。以32位为单位,最大值为60B (15*4B)。最常用的首部长度是20B,此时不使用任何选项(即可选字段)。
  • 总长度占16位,2B。指首部和数据之和的长度,单位为字节,因此数据报的最大长度为216-1= 65535B。以太网帧的最大传送单元(MTU)为1500B,因此当一个IP数据报封装成帧时,数据报的总长度(首部加数据) - -定不能超过下面数据链路层的MTU值。
  • 标识。占16位。它是一个计数器,每产生一个数据报就加1,并赋值给标识字段。但它并不是“序号”(因为IP是无连接服务)。当一个数据报的长度超过网络的MTU时,必须分片,此时每个数据报片都复制一次标识号, 以便能正确重装成原来的数据报。
  • 标志。占3位。标志字段的最低位为MF, MF= 1表示后面还有分片,MF= 0表示最后一个分片。” 标志字段中间的一位是DF,只有当DF =0时才允许分片。
  • 片偏移。占13位。它指出较长的分组在分片后,某片在原分组中的相对位置。片偏移以8个字节为偏移单位,8B,即每个分片的长度一定是8B (64 位)的整数倍。
  • 首部校验和。占16位。IP数据报的首部校验和只校验分组的首部,而不校验数据部分。
  • 生存时间(TTL)。占8位。数据报在网络中可通过的路由器数的最大值,标识分组在网络中的寿命,以确保分组不会永远在网络中循环。路由器在转发分组前,先把TTL减1。若TTL被减为0,则该分组必须丢弃。
  • 协议。占8位。指出此分组携带的数据使用何种协议,即分组的数据部分应交给哪个传输层协议,如TCP、UDP等。其中值为6表示TCP,值为17表示UDP。
  • 源地址字段。占4B,标识发送方的IP地址。
  • 目的地址字段。占4B,标识接收方的IP地址。

IP数据报分片

一个链路层数据报能承载的最大数据量称为最大传送单元(MTU)。因为IP数据报被封装在链路层数据报中,因此链路层的MTU严格地限制着IP数据报的长度,而且在IP数据报的源与目的地路径上的各段链路可能使用不同的链路层协议,有不同的MTU。例如,以太网的MTU为1500B,而许多广域网的MTU不超过576B。当IP数据报的总长度大于链路MTU时,就需要将IP数据报中的数据分装在两个或多个较小的IP数据报中,这些较小的数据报称为
image.png
再回忆一下IP数据报格式的相关字段意义
image.png
image.png
image.png
image.png

网络层转发分组的流程

网络层的路由器执行的分组转发算法如下:

  • 从数据报的首部提取目的主机的IP地址D,得出目的网络地址N。
  • 若网络N与此路由器直接相连,则把数据报直接交付给目的主机D,这称为路由器的直接交付;否则是间接交付,执行步骤3)。
  • 若路由表中有目的地址为D的特定主机路由(对特定的目的主机指明一个特定的路由,通常是为了控制或测试网络,或出于安全考虑才采用的),则把数据报传送给路由表中所指明的下一跳路由器;否则,执行步骤4)。
  • 若路由表中有到达网络N的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行步骤5)。
  • 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行步骤6)。
  • 报告转发分组出错。
    注意: 得到下一跳路由器的IP 地址后并不是直接将该地址填入待发送的数据报,而是将该IP地址转换成MAC地址(通过ARP,见4.3.4节),将其放到MAC帧首部中,然后根据这个MAC地址找到下一跳路由器。在不同网络中传送时,MAC帧中的源地址和目的地址要发生变化,但是网桥在转发帧时,不改变帧的源地址,请注意区分。

IPv4与NAT

IPv4地址

组成与分类

连接到因特网上的每台主机(或路由器)都分配一个32比特的全球唯一标识符,即IP地址。传统的IP地址是分类的地址,分为A、B、C、D、E五类。
image.png
image.png

  • 无论哪类IP地址,都由网络号主机号两部分组成。
  • 即IP地址::= {<网络号>, <主机号>}。
  • 其中网络号标志主机(或路由器)所连接到的网络。一个网络号在整个因特网范围内必须是唯一的。
  • 主机号标志该主机(或路由器)。一台主机号在它前面的网络号所指明的网络范围内必须是唯一的。

由此可见,一个IP地址在整个因特网范围内是唯一的。
image.png

特殊地址不做主机IP地址

在各类IP地址中,有些IP地址具有特殊用途,不用做主机的IP地址:
image.png

常用IP地址ABC使用范围

常用的三种类别IP地址的使用范围见表
image.png

A类地址可用的网络数为2^7-2减2的原因是:第一,网络号字段全为0的IP地址是保留地址,意思是“本网络”;第二,网络号为127的IP地址是环回测试地址。
B类地址的可用网络数为2^14-1,减1的原因是128.0这个网络号是不可指派的。
C类地址的可用网络数为2^21-1,减1的原因是网络号为192.0.0 的网络是不可指派的。

IP地址的重要特点

IP地址有以下重要特点:

  • 每个IP地址都由网络号主机号两部分组成,因此IP地址是–种分等级的地址结构。分等级的好处是:①IP地址管理机构在分配IP地址时只分配网络号(第一级), 而主机号(第二级)则由得到该网络的单位自行分配,方便了IP 地址的管理;②路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目标主机号),从而减小了路由表所占的存储空间。
  • IP 地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络时,该主机就必须同时具有两个相应的IP地址,每个IP地址的网络号必须与所在网络的网络号相同,且这两个IP地址的网络号是不同的。因此IP网络上的一个路由器必然至少应具有两个IP地址(路由器每个端口必须至少分配一个IP地址)。
  • 用转发器或桥接器(网桥等)连接的若干LAN仍然是同一个网络(同一个广播域),因此该LAN中所有主机的IP地址的网络号必须相同,但主机号必须不同。
  • 在IP地址中,所有分配到网络号的网络(无论是LAN还是WAN)都是平等的。
  • 在同一个局域网上的主机或路由器的IP地址中的网络号必须是一样的。路由器总是具有两个或两个以上的IP地址,路由器的每个端口都有一个不同网络号的IP地址。

网络地址转换—NAT

NAT简介

网络地址转换(NAT)是指通过将专用网络地址(如Intranet)转换为公用地址(如Internet),从而对外隐藏内部管理的IP地址。它使得整个专用网只需要一个全球IP地址就可以与因特网连通,由于专用网本地IP地址是可重用的,所以NAT大大节省了IP地址的消耗。同时,它隐藏了内部网络结构,从而降低了内部网络受到攻击的风险。

私有IP地址

此外,为了网络安全,划出了部分IP地址为私有IP地址私有IP地址只用于LAN,不用于WAN连接(因此私有IP地址不能直接用于Internet,必须通过网关利用NAT把私有IP地址转换为Internet中合法的全球IP地址后才能用于Internet), 并且允许私有IP地址被LAN重复使用。这有效地解决了IP地址不足的问题。私有IP地址网段如下:
image.png

专用互联网/本地互联网

在因特网中的所有路由器,对目的地址是私有地址的数据报一律不进行转发。这种采用私有IP地址的互联网络称为专用互联网或本地互联网。私有IP地址也称可重用地址。

如何实现私有IP地址上网

image.png

  • 使用NAT时需要在专用网连接到因特网的路由器上安装NAT软件,NAT路由器至少有一个有效的外部全球地址。
  • 使用本地地址的主机和外界通信时,NAT路由器使用NAT转换表将本地地址转换成全球地址,或将全球地址转换成本地地址。
  • NAT转换表中存放着{本地IP地址:端口}到{全球IP地址:端口}的映射。
  • 通过{ip地址:端口}这样的映射方式,可让多个私有IP地址映射到同一个全球IP地址。

子网划分与子网掩码、CIDR

子网划分

两级IP地址的缺点:IP地址空间的利用率有时很低;给每个物理网络分配一个网络号会使路由表变得太大而使网络性能变坏;两级的IP地址不够灵活。
image.png

从1985年起,在IP地址中又增加了一个“子网号字段”,使两级IP地址变成了三级IP地址。这种做法称为子网划分。子网划分已成为因特网的正式标准协议。

子网划分的基本思路

  • 子网划分纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
  • 主机号借用若干比特作为子网号,当然主机号也就相应减少了相同的比特。三级IP地址的结构如下: IP地址={<网络号>,<子网号>, <主机号>}。
  • 凡是从其他网络发送给本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号,先找到连接到本单位网络上的路由器。然后该路由器在收到IP数据报后,按目的网络号和子网号找到目的子网。最后把IP数据报直接交付给目的主机。
    image.png

子网掩码

子网掩码的引入,为了告诉主机或路由器对一个A类、B类、C类网络进行了子网划分,使用子网掩码来表达对原网络中主机号的借位。为了使外部可以连接子网内的网络。
image.png

子网掩码是一个与IP地址相对应的、长32bit的二进制串,它由一串1和跟随的一串0组成。

其中,1对应于IP地址中的网络号及子网号而0对应于主机号

计算机只需将IP地址和其对应的子网掩码逐位“与”(逻辑AND运算),就可得出相应子网的网络地址。
image.png

现在的因特网标准规定:所有的网络都必须使用子网掩码。如果一个网络未划分子网,那么就采用默认子网掩码。

A、B、C类地址的默认子网掩码分别为255.0.0.0、 255.255.0.0、255.255.255.0.

例如,某主机的IP地址192.168.5.56,子网掩码为255.255.255.0,进行逐位“与”运算后,得出该主机所在子网的网络号为192.168.5.0。

一道例题:
image.png

另一道例题
image.png

使用子网时的分组转发
由于子网掩码是一个网络或一个子网的重要属性,所以路由器在相互之间交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉对方。路由表中的每个条目,除要给出目的网络地址和下一跳地址外,还要同时给出该目的网络的子网掩码

在使用子网掩码的情况下

  • 一台主机在设置IP地址信息的同时,必须设置子网掩码
  • 同属于一个子网的所有主机及路由器的相应端口,必须设置相同的子网掩码。
  • 路由器的路由表中,所包含信息的主要内容必须有目的网络地址子网掩码下一跳地址

使用子网掩码时路由器的分组转发算法如下:

  • 从收到的分组的首部提取目的IP地址,记为D。
  • 先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐位相“与”,看结果是否和相应的网络地址匹配。若匹配,则将分组直接交付,否则间接交付,执行步骤3)。
  • 若路由表中有目的地址为D的特定主机路由,则将分组传送给路由表中所指明的下一跳路由器;否则,执行4)。
  • 对路由表中的每一行(目的网络地址、子网掩码、下一跳地址)中的子网掩码和D逐位相“与”,其结果为N。若N与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行步骤5)。
  • 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行步骤6)。
  • 报告转发分组出错。
    image.png

无分类域间路由选择CIDR

为什么要发明CIDR?

  • 在域名系统出现之后的第一个十年里,基于分类网络进行地址分配和路由IP数据包的设计就已明显显得可扩充性不足 。为了解决这个问题,互联网工程工作小组在1993年发布了一新系列的标准,以定义新的分配IP地址块和路由IPv4数据包的方法。
  • 一个IP地址包含两部分:标识网络的前缀和紧接着的在这个网络内的主机地址。在之前的分类网络中,IP地址的分配把IP地址的32位按每8位为一段分开。这使得前缀必须为8,16或者24位。因此,可分配的最小的地址块有256(24位前缀,8位主机地址,2^8^=256)个地址,而这对大多数企业来说太少了。大一点的地址块包含65536(16位前缀,16位主机,2^16^=65536)个地址,而这对大公司来说都太多了。这导致不能充分使用IP地址和在路由上的不便,因为大量的需要单独路由的小型网络(C类网络)因在地域上分得很开而很难进行聚合路由,于是给路由设备增加了很多负担。
    两张图了解CIDR的特点:
    image.png
    image.png

路由器根据路由表转发的CIDR原则:
image.png

地址解析协议—ARP协议

首先我们得了解一下IP地址与硬件地址的概念

  • IP地址网络层使用的地址,它是分层次等级的。
  • 硬件地址数据链路层使用的地址(如MAC地址),它是平面式的。
  • 网络层及网络层之上使用IP地址,IP地址放在IP数据报的首部,而MAC地址放在MAC帧的首部。
  • 通过数据封装,把IP数据报分组封装为MAC帧后,数据链路层看不见数据报分组中的IP地址

ARP协议引入:

无论网络层使用什么协议,在实际网络的链路上传送数据帧时,最终必须使用硬件地址。所以需要一种方法来完成 IP地址到MAC地址的映射,这就是地址解析协议(Address ResolutionProtocol, ARP)。 每台主机都设有-一个ARP高速缓存,用来存放本局域网上各主机和路由器的IP地址到MAC地址的映射表,称ARP表。使用ARP来动态维护此ARP表。
image.png
工作过程:
image.png

动态主机配置协议—DHCP协议

动态主机配置协议(Dynamic Host Configuration Protocol, DHCP)常用于给主机动态地分配IP地址,它提供了即插即用联网的机制,这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与。
DHCP是应用层协议,它是基于UDP的。
DHCP的工作原理如下:

  • 使用客户/服务器方式
  • 需要IP地址的主机在启动时就向DHCP服务器广播发送发现报文,这时该主机就成为DHCP客户。本地网络上所有主机都能收到此广播报文,但只有DHCP服务器才回答此广播报文。
  • DHCP服务器先在其数据库中查找该计算机的配置信息。若找到,则返回找到的信息。
  • 若找不到,则从服务器的IP地址池中取一个地址分配给该计算机。DHCP服务器的回答报文称为提供报文。
    image.png

网际控制报文协议— ICMP

为了提高IP数据报交付成功的机会,在网络层使用了网际控制报文协议(Internet Control Message Protocol, ICMP)来让主机或路由器报告差错和异常情况。
image.png
ICMP 报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。ICMP是IP层协议。
image.png
ICMP报文的种类有两种,即ICMP差错报告报文ICMP询问报文

ICMP差错报告报文

image.png

不发送ICMP差错报文的情况
image.png

ICMP询问报文

image.png
ICMP的应用

  • ICMP的两个常见应用是分组网间探测PING(用来测试两台主机之间的连通性)和Traceroute(UNIX中的名字,在Windows中是tracert,可以用来跟踪分组经过的路由)。
  • 其中PING使用了ICMP回送请求回答报文
  • Traceroute (Tracert) 使用了ICMP时间超过报文
    **注意: ** PING工作在应用层,它直接使用网络层的ICMP,而未使用传输层的TCP或UDP。Traceroute/Tracert工作在网络层。

————————————————
版权声明:本文为CSDN博主「BitHachi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43914604/article/details/105138313