tcp/ip详解卷一(笔记2:UDP及相关的协议)

版权声明:转载 请标注 出处 https://blog.csdn.net/youyou1543724847/article/details/84204613

11.UDP

11.1 关于ip分片

在ip首部中,下面这些字段用于分片过程。对应发送端发送的每份ip数据报来说,其标识字段都包含一个唯一的值。该值在数据报分片时被复制到每个分片中。标志字段用其中一个bit来表示“更多的片”。除了最后一片外,其他的每片组成的数据报的片都把该bit置为1.片偏移字段就是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值都要改成该片的长度值。

另外,标志字段中有一个bit称为“不分片”位。如果将这一bit置为1,ip将不对数据报进行分片。相反,会把该数据报丢弃,并发送一个icmp差错报文(需要分片,但是设置了不分片)

在分片时,传输层首部信息只出现在第一个分片中。把一份ip数据报分片后,只有达到目的地后才进行组装。重新组装在目的端中ip层完成。

当第一个数据片出现后,ip层必须启动一个定时器。这里的第一个表示给定的数据报的第一个达到的数据报片,而不是数据报片(即片偏移为0)。正常的定时器设置为30或60秒。如果定时器超时而该数据报的所有数据报片未能全部达到,那么将这些数据报片丢弃。如果不这么做,那些永远不会到的数据报片会慢慢引起接收端缓存满。

11.2 udp限制本地、远端ip地址

11.2.1 限制本地ip地址

当服务器创建端点时,它可以把其中一个主机本地ip地址包括广播地址指定为端点的本地ip地址。只有当目的的ip地址与指定的地址相匹配时,进入udp的数据报才能被送到这个端点。

11.2.2 限制远端ip地址

在netstat输出中,如果远端ip地址、端口号为*.*,则表示该端点将接受来自任何ip和任何端口的udp数据报。大多数系统允许UDP端口对远端地址进行限制。

12.广播与多播

广播与多播仅应用与UDP (TCP要求两端建立双向连接,即端到端的连接)

主机对信道传输来的帧过滤过程
在这里插入图片描述

  1. 接口卡: 网卡查看信道传送的数据,确定是否接收。接收后就发往设备驱动程序中。通常情况下,网卡仅接收目的地址为网卡地址或是广播地址的帧。另外,网卡在混杂模式下,网卡能接收每个帧的一个复制,例如tcpdump;

  2. 设备驱动程序对收到的帧进行过滤。帧中必须指定要使用的协议(iP,ARP等)。如果是多播,检查当前主机是否属于该多播组;

  3. 如果帧表明要使用的协议为IP协议。则IP层继续处理。IP检查目的地址与源地址等其他检查,如果正常就交给下一层(TCP,UDP);

  4. 每次UDP收到数据后,根据端口号进行数据过滤。如果当前没有目标进程使用该目的端口号,就丢弃该数据报,并产生一个ICMP不可达报文。另外,校验出错也会丢弃。

12.1 广播

广播主要是对多个目的地址发送数据包。这些目的地址具有共性:处于同相同的网络号或子网中(处理受限的广播外)。

广播分为:受限的广播、指向网络的广播、指向子网的广播、指向所有子网的广播。

12.1.1受限的广播

受限的广播指 广播地址为255.255.255.255。该广播主要用于主机配置过程,在主机配置过程中,主机不知道自己的网络掩码,也没有IP。

注意:

  1. 在任何情况下,路由器都不转发目的地址为255.255.255.255的受限广播地址包(该包被限制在本子网内)
  2. 如果一个主机是多接口的,具有多个IP地址。则该主机在广播时,想对主机中所有接口广播时,首先需要确定主机中支持广播的所有接口,然后向每个接口发送一个数据包复制。

12.1.2指向网络的广播

这里的网络是指标准的A,B,C类IP地址中网络号,广播地址中的主机号全为1.

例如A类网络广播地址为:netid.255.255.255

在这里插入图片描述

路由器必须转发指向网络的广播。但是它也必须有一个不进行转发的选择。

12.1.3指向子网的广播

标准的ABC类地址通过子网掩码划分子网。指向子网的广播指该包是在本某子网内广播。在解析目标IP地址时,需要了解子网掩码。

例如:路由器收到目的ip为128.1.2.255的数据包,如果B类网络128.1的子网掩码为255.255.255.0时,该目的地址就是子网的广播。如果子网掩码为255.255.254,则该地址就不是子网的广播地址。(这需要路由器转发时,查看iP地址匹配的掩码,进行解析。)

12.1.4指向所有子网的广播

感觉该广播的规模是介于“指向子网的广播”与“指向网络的广播”的一种广播,不知道应用场景。

指向所有子网的广播同"指向子网的广播"一样,也需要直到子网掩码。指向所有子网的广播的目的IP地址中子网号与主机号全为1。

12.1.5 广播IP地址与Mac地址对应

通过设定IP地址与掩码,可以指定那些IP主机接收该数据报。但是在主机处理数据帧时,首先是校对Mac地址是否匹配。则主机怎么区分该包是否需要接收呢?网卡支持接收广播数据包,这如何实现?

首先看看Mac地址的结构。

网络设备的MAC地址是全球唯一的。MAC地址长度为48比特,通常用十六进制表示。MAC地址包含两部分:前24比特是组织唯一标识符(OUI,OrganizationallyUniqueIdentifier),由IEEE统一分配给设备制造商。
在这里插入图片描述

为的网络产品的MAC地址前24比特是0x00e0fc。后24位序列号是厂商分配给每个产品的唯一数值,由各个厂商自行分配

局域网上的帧可以通过三种方式发送:

  1. 第一种是单播,指从单一的源端发送到单一的目的端。每个主机接口由一个MAC地址唯一标识,MAC地址的OUI中,第一字节第8个比特表示地址类型。对于主机MAC地址,这个比特固定为0,表示目的MAC地址为此MAC地址的帧都是发送到某个唯一的目的端。在冲突域中,所有主机都能收到源主机发送的单播帧,但是其他主机发现目的地址与本地MAC地址不一致后会丢弃收到的帧,只有真正的目的主机才会接收并处理收到的帧。
  2. 广播:广播帧的目的MAC地址为十六进制的FFFFFFFFFFFF,所有收到该广播帧的主机都要接收并处理这个帧。
  3. 组播:第一字节第8个比特表示地址类型。对于主机MAC地址,这个比特固定为1。

当在IP层广播时,填入的Mac地址是FFFFFFFFFFFF。结合路由器()路由器控制转发到那个子网中),达到广播的目的。

12.2 多播

这里主要是多IP多播。
IP多播提供两类服务:

  1. 向多个目的地址提供数据(多个目的地址没有共性,不一定属于同一个网络);
  2. 客户对服务器请求。例如无盘工作组发送多播给一批服务器,来完成自身的引导。

多播的核心思想、特点:

  • 目的主机的IP地址没有特点。使用多播组的概念来描述多播的目的机器;
  • 任何机器都可以随时加入某个多播组;任何加入多播组的机器可以随时离开; 任何机器都可以随时加入某个多播组;
  • 存在一些知名多播组,如224.0.0.1表示子网内的所有系统组,224.0.1.1表示网络时间协议NTP。

网卡仅接收目的地址为自己或是广播的数据包。则如果需要网卡能够处理该帧,还需要定义Mac地址与IP地址的关系(否则,网卡就会抛出非自身、非广播的帧了)。

多播组IP组与Mac地址的映射关系如下:
在这里插入图片描述

注意:多播组IP地址中有5位没有转化成对应的Mac地址,即IP转Mac地址是多对一的映射。32个多播组被映射为一个Mac地址。
另外,还有一个问题就是:对于某个目的地址为多播组时,路由器该怎么处理该包?要将该包转发到那个网络中呢?它如何直到那些主机加入了该多播组呢?这就是需要用到IGMP(Internet 组管理协议)

13.Internet 组管理协议-IGMP

在多播时,涉及多个网络必须通过路由器进行转发。IGMP主要用于支持主机和路由器进行多播。主要作用:让一个物理网络上的所有系统直到主机当前属于那个多播组。多播路由器需要知道这些信息以便知道多播数据包转发到那个端口。IGMP协议也处于IP层。

在这里插入图片描述

13.1 IGMP报告和查询

多播路由器使用IGMP报文来记录与该路由器相连网络 中的组成员的变化情况。
IGMP规则如下:

  1. 当第一个进程加入一个组时,主机就发送一个IGMP报文。如果一个主机的多个进程加入同一个组,只发送一个IGMP报告;
  2. 进程离开一个组时,主机不发送IGMP报文。当主机知道在确定的组中已不再有任何组成后,不发送IGMP报文,在随后收到IGMP报文后,不再发送报告报文。
  • 例如:如果主机A有三个进程加入某个IP多播组,开始发送一个IGMP报文。这时路由器发来了一个IGMP报文了,主机会回复报文,告诉路由器自己加入的IP多播组。然后三个进程逐渐的离开该IP多播组。这是主机不管。这时路由器发来了一个IGMP报文了,主机会忽略该报文。例如:如果主机A有三个进程加入某个IP多播组,开始发送一个IGMP报文。这时路由器发来了一个IGMP报文了,主机会回复报文,告诉路由器自己加入的IP多播组。然后三个进程逐渐的离开该IP多播组。这是主机不管。这时路由器发来了一个IGMP报文了,主机会忽略该报文。
  1. 多播路由器定时发送IGMP查询报文来了解是否还有任何主机属于多播组。多播路由器必须向每个接口发送一个IGMP查询;
  2. 主机通过发送IGMP报告来响应IGMP查询;
  3. 多播路由器对每个网口保持一个表,记录接口上至少还有一个主机的多播组。路由器不关系某个网络有那些主机属于某一个多播组,只在乎是否有主机属于某个多播组(boolean类型)

在具体实现上的优化:

  • 当主机的第一个进程加入一个多播组时,由于不保证报文是否被可靠接收。可在一定间隔时间后重新发送一个IGMP报文;
  • 由于路由器不关系某个网络有那些主机属于某一个多播组,只在乎是否有主机属于某个多播组。当路由器发送IGMP查询报文时,某个主机发现其他主机回复了、且回复的报文中包含了自己加入的广播组,则自己就不回复了。(在回复报文中,目的地址就是组地址)

14.DNS

DNS是一种用于TCP/IP 应用程序的分布式数据库。DNS的名字空间和Unix文件系统相似,也具有层次结构。其中一个独立管理的DNS子树被成为一个区域(Zone)。一旦一个区域的授权机构被委派后,由它负责向该区域提供多个名字服务器。一个名字服务器负责一个或多个区域。一个区域的管理者必须为该区域提供一个主名字服务器和至少一个辅助名字服务器(back up)

当一个新主机加入一个区域时,区域管理者将适当的信息(至少包括名字和ip地址)加入主名字服务器上的一个磁盘文件中,然后通知主名字服务器重新加载调入配置文件。

当一个名字服务器某个请求的数据时(如名字服务器收到请求,查询HostXX的IP,该名字服务器不知道),它不知道怎么和其他名字服务器通信,但是他必须直到怎么和根名字服务器通信。根名字服务器知道所有下属的二级域中的授权的名字服务地址与名字。

14.1 DNS报文格式

在这里插入图片描述

其中16bit的标志字段具体分为若干个子字段,具体如下:
在这里插入图片描述

其中:

  1. RD字段表示“期望递归”,这个标识表示请求的名字服务器必须处理这个请求,返回结果,而不是下一节名字服务器。如果该字段为0,即没有设置该标注,如果请求的名字服务器没有对应的授权数据,则会返回能解答的其他名字服务列表(该属于迭代查询)
  2. 注意:在DNS查询报文中,根据域名查询IP地址使用的类型为A的DNS查询报文;根据IP地址查询域名,使用的是类型为PTR的DNS查询报文;

14.2 DNS 使用TCP还是UDP

DNS服务器使用的端口是53,支持TCP和UDP。这两种模式的使用场景:

  1. 当名字解析器发出一个查询时,如果TC(删减标志)位被设置,则意味着响应的长度超过了512字节,但是仅返回了512字节。遇到这种情况时,名字解析器通常会使用TCP重发请求,该中模式运行响应超过512字节(TCP支持分段);
  2. 另外,当服务名字服务器启动时,会从主名字服务器获取大量数据,这时使用TCP请求。

15 TFTP:简单文件传输协议

最初打算用于引导无盘系统(如X终端),为了保持简单与短小,TFTP基于UDP。

TFTP报文格式如下:

在这里插入图片描述

说明:

  1. tftp报文的头两个字节表示操作码,对于读/写请求,文件名字段说明客户要读写的(服务器上的)文件,这个字段为0字节作为结束;模式字段是一个ASCII码串netascii或octet。其中模式字段netascii表示:数据是以成行的ascii码组成,以cr/lf作为行结束符;模式字段octet表示文件为8bit的字节流;
  2. 每个数据分组包含一个块编号字段,它用作确认分组使用;

协议运作过程:

  1. 在开始工作时,TFTP协议客户与服务器交换信息,客户发送一个读请求或是写请求给服务器;(在用于引导时,正常情况下,是发送一个读请求);这里以读文件为例,客户发送读请求(请求里包含要读的文件名);
  2. 如果这个文件能被这个客户读取,tftp服务器返回一个块编号为1的数据分组;
  3. 客户端收到该块编号为1的数据分组后,会向服务器发送一个块编号为1的ack(注意这里返回的ack编号和server发送的数据编号是一致的);
  4. tftp收到 编号为1的ack包后,发送编号为2的数据分组;
  5. 客户端收到该块编号为2的数据分组后,会向服务器发送一个块编号为2的ack;
  6. 如此往复,最后,服务器发送最后一个数据包,该数据包内容不足512字节的数据;
  7. 客户端收到该数据分组后,由于长度不足512,就知道文件传输完了。

在写文件模式下,client发送写请求,包含写的文件名,如果该文件允许写,则server发送编号为0的ACK包。然后client开始发送数据,发送编号为1的数据包。

该种类型的数据传输协议称为停止等待协议

注意:tftp不提供用户名和口令。tftp协议这一特征被许多解密高手用于获取unix口令文件的复制,然后用来猜测用户口令。为了防止这里类型的访问,目前大多数tftp服务器提供了一个选项用来限制只能访问特定的文件。

16 BooTP:引导程序协议

bootp请求和响应封装在upd数据报中。用于系统在不知道自身IP地址的情况下,进行引导获取IP地址。

bootp数据格式:
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/youyou1543724847/article/details/84204613
今日推荐