zoukankan      html  css  js  c++  java
  • TCP-IP详解笔记3

    TCP-IP详解笔记3

    地址解析协议

    • IP协议的设计目标是为跨越不同类型物理网络的分组交换提供互操作。
      • 网络层软件使用的地址和底层网络硬件使用的地址之间进行转换。
    • 对于TCP/IP网络,地址解析协议(ARP)提供了一种在IPv4地址和各种网络技术使用的硬件地址之间的映射。
      • ARP仅能用于IPv4,IPv6使用邻居发现协议,它被合并于ICMPv6。
    • 网络层地址和链路层地址由不同部门分配的;
      • 硬件地址,主地址由设备制造商定义,并存储在设备的永久性内存中,它不会改变。
      • 网络接口的IP地址可能改变,是由用户或网络管理员分配,并且可以按需选择。
    • 地址解析是发现两个地址之间的映射关系的过程。
    • ARP提供从网络层地址到相关硬件地址的动态映射(自动执行并随时间变换)。
    • ARP(Address Resolution Protocol)的反向映射的协议称为RARP.

    直接交互和ARP

    • 直接交互发生在一个IP数据报被发送到一个IP地址,而该地址与发送方具有相同IP前缀的情况下。
    • ARP用于运行IPv4的多接入链路层网络,每个主机都有自己首选的硬件地址。
    • 点到点链路不使用ARP。
    • 当这些链路被建立后,在链路两端通知正在使用的地址,不涉及硬件地址,就不需要地址解析或ARP。

    ARP缓存

    • ARP高效运行的关键是维护每个主机和路由器上的ARP缓存(或表)。
      • 该缓存使用地址解析为每个接口维护从网络层地址到硬件地址的最新映射。
      • 当IPv4地址映射到硬件地址时,它对应与高速缓存中的一个条目,其正常到期时间是条目创建开始后的20分钟。
      • arp命令可以查看ARP缓存。
    • Linux系统中,每个映射是一个包含5个元素的条目: 主机名(对应一个IP地址),硬件地址类型,硬件地址,标志和本地网络接口。

    ARP帧格式

    • 以太网中转换一个IPv4地址时常用的ARP请求和应答分组的格式。
      • MAC(以太网)头部 ---- 14字节。
        • DST, SRT, 长度或类型。
      • 固定大小 ---- 8字节。
        • 硬件类型,协议类型,硬件大小,协议大小。
      • 可变大小 ---- 取决于协议,以太网/IPv4为20字节。
        • 发送方的硬件地址,发送方的协议地址,目的硬件地址,目的协议地址。
      • 填充 ---- 不按比例。
      • FCS --- 帧校验序列(Frame Check Sequence,FCS),采用32位CRC循环冗余校验对从"目标MAC地址"字段到"数据"字段的数据进行校验。

    代理ARP

    • 代理ARP使一个系统(通常是一台专门配置的路由器)可回答不同主机的ARP请求。
      • 代理ARP也被称为混杂ARP或ARP黑客。
      • 两个物理网络相互隐蔽自己,这种情况下,两个物理网络可使用相同的IP前缀,只要将中间的路由器配置为一个代理ARP,在一个网络中由代理响应对其他网络中主机的ARP请求。
        • 有些系统无法进行子网划分;
        • 有些系统使用比较旧的广播地址(全0的主机ID, 而不是当前的全1的主机ID)。
    • linux支持一种称为自动带路ARP的功能,它可通过文件/proc/sys/net/ipv4/conf/*/proxy_arp进行配置。

    免费ARP和地址冲突检测

    • ARP的另一个功能被称为免费ARP,它发生在一台主机发送ARP请求以寻找自己的地址时。
      • tcpdump -n --- 打印数字化的点分十进制地址而不是主机名。
    • 免费ARP需要达到两个目标:
      • 允许一台主机确定另一台主机是否配置相同的IPv4地址。
      • 如果发送免费ARP的主机已改变硬件地址,该帧导致任何接收广播并且缓存中该条目的其他主机,该条目的旧硬件地址更新为与该帧一致。
    • ARP服务器是内核的TCP/IP的一部分,但并不是所有的TCP/IP实现都提供RARP服务器。
    • ARP是TCP/IP实现中的一个基本协议,但它通常在应用程序或用户没有察觉的情况下运行。
    • ARP缓存是其运行的基础,可以使用arp命令查看和处理缓存,缓存中每个条目都有一个定时器,用于清除不完整的条目和完整的条目。
      • arp命令可以显示和修改缓存中的条目。

    Internet协议

    • IP并不维护任何关于后续数据报的状态信息,每个数据报都是独立的。
      • IP数据报都可以不按序列接收,每个数据报独立地进行路由。
    • IP是TCP/IP协议族中的核心协议,所有TCP、UDP、ICMP、IGMP数据都通过IP数据报传输。
      • IP提供了一种尽力而为、无连接的数据报交互服务。
      • 尽力而为的含义是不保证IP数据报能成功到达目的地;
        • IP提供一个简单的错误处理方法: 丢弃一些数据(通常是最后到达的数据报)。
        • 任何可靠性必须由上层(TCP)提供。
      • 无连接意味着IP不维护网络单元(即路由器)中数据报相关的任何连接状态信息,每个数据报独立于其他数据报来处理。
        • B可能在A之前到达。
    • IPv4数据报:
      IPv4的具体格式
      • IP头部字段:
        • 版本字段 --- 4位,IPv4为4, IPv6为6;
        • Internet头部长度(IHL)字段保存IPv4头部中32位字的数量,包括任何选项。
          • IPv6中不存在这个字段,其头部固定为40字节。
      • 一组RFC字段,前6位被称为区分服务字段(DS字段),后两位是显示拥塞通知(ECN)字段或指示位。
        • 这些字段被用于数据报转发时的特殊处理。
      • 总长度字段是ipv4数据报的总长度(以字节为单位),通过该字段和IHL字段,我们知道数据报的数据部分从哪里开始,以及它的长度。
        • 由于这个字段是一个16位的字段,所以IPv4数据报的最大长度为65536字节。
        • 由于一些携带IPv4数据报的底层协议不能(精确)表达自己封装的数据报大小,所以需要在头部中给出总长度字段。
        • 尽管可发送一个65535字节的IP数据报,但大多数链路层(以太网)不能携带这么大的网络,除非将它拆分成更小的片。
      • 当一个IPv4数据报被分为多个更小的分片时,每个分片自身仍是一个独立的IP数据报,总长度字段反映具体的分片长度。
        • IPv6头部不支持分片,其长度有负载长度字段获得,这个字段提供IPv6的数据报长度,不包含头部长度,但扩展头部包含在负载长度中。
      • 标识字段帮助标识有IPv4主机发送的数据报,为了避免将一个数据报分片和其他数据报分片混淆,发送主机通常在每次发送数据报时都将一个内部计时器加1,并将该计数器值复制到IPv4标识字段。
        • 这个字段对分片很重要,标志和分片偏移字段。
        • IPv6中,这个字段显示在分片扩展头部中。
      • 生存期(TTL)字段用于设置一个数据报可经过的路由器数量的上限。
        • 发送方可将其初始化为某一个值,一般为64。
        • 每台路由器在转发数据报是就将该值减1.
        • 当该字段值达到0时,该数据报被丢弃,并使用一个ICMP消息通知发送方。
        • 这可以防止由于出现不希望的路由环路而导致数据报在网络中永远循环。
      • IPv4头部中的协议字段包含一个数字: 表示数据报有效符合部分的数据类型。
        • 最常用的UDP是17, TCP是6.
        • 这提供了多路分解的功能,以便ip协议可用于携带多种协议类型的有效负荷.
        • 最初仅用于指定数据报封装的传输层协议,但现在用于识别其中封装协议是否为一种传输层协议。
          • IPv4-in-IPv4的值为4。
      • 头部校验和字段仅计算IPv4头部;
        • 这意味着IP协议不检查IPv4数据报有效载荷的正确性。
        • 为了确保IP数据报的有效载荷部分已正确传输,其他协议必须通过自己的数据完整性检验机制来检查重要数据。
        • ICMP/IGMP/UDP/TCP在自己头部中都有一个涵盖其头部和数据的校验和,也涵盖了他们认为重要的ip头部的某些部(一种违反了分层的形式)。
          • IPv6头部没有任何校验和字段。
        • Internet校验和。
      • 每个ip数据报包含发送者的源IP地址和接收者的目的IP地址,通常标识一台计算机的一个接口。
    • IPv6数据报:
      IPv6的具体格式

    Internet校验和

    • Internet校验和是一个16位的数字和,它能以相当高的概率确定接收的消息或其中部分内容是否与发送相匹配。
      • Internet校验和算法与常见的循环冗余校验(CRC)不同,CRC提供更强的保护功能。
    • 具体计算步骤:
      • 先把数据报的校验和字段值设置为0.
      • 然后对头部(整个头部被认为是一个16位字的序列)计算16位二进制反码和。
      • 反码和被存储在校验和字段中。
      • 二进制反码加法可通过循环进位加法实现。
    • Internet校验和是一个呗校验数据的16位反码和的砝码。
      • 没有错误校验和为0.
      • 当发现一个头部出错(计算的校验和不为0), IPv4将丢弃接收到的数据报,但是不会生成差错信息,更高层以某种方式监测丢失的数据报,并在必要时进行重新传输。
    • Internet校验和的数学性质:
      • 16位进制集合与其反码和运算共同形成一个阿贝尔群:
        • 闭包;
        • 结合性;
        • 存在一个恒等元素;
        • 交换性;
        • 存在可逆。

    DS字段和ECN字段(IPv6流量类别)

    • IPv4头部的第3和第4字段(IPv6头部的第2和第3字段)分别是区分服务(DS字段)和ECN字段。
      • 区分服务(Diff service)是一个框架和一组标准,用于支持Internet某种方式被标记,使它们的转发不同于其他数据报。
        • 这样做可以导致网络中排队延时的增加或减少,出现其他特殊效果。
        • DS中的数字称为区分服务代码点(DSCP), 预定义的具有特殊含义的位。
      • 头部的2位ECN位用于为数据报标记拥塞标识符。
        • 一台持续拥塞的具有ECN感知能力的路由器在转发分组时会设置这两位。
        • 发送方会降低发送速率。
    • D、T和R子字段表示数据报在延时、吞吐量和可靠性方面得到良好的处理。
      • 基于一个称为多优先级与抢占的方案(MLPP)。
    • 3位类别选择器提供了8个定义的代码点,他们对应与一个指定最小功能集的PHB.
    • 加速转发(EF)提供了非拥塞的网络服务,也就是说,EF流量应享受较低的延时、抖动和丢包率。
    • 路由表为一个网络指定一个路由器,而不必为每个主机指定一个路由器;
      • 在路由传输过程中,数据报的目的IP地址时钟不变,所有路由决策都是基于这个目的IP地址的。
      • 链路层的目的地址始终指的是下一站的链路地址。

    IP选择

    • IP路由选择 ---> 最长匹配原则 ---> 搜索路由表。
    • IP路由器接收到一个包含选项的数据报,通常需要对该数据报进行特殊处理。
      • 在某些情况下,IPv6可以处理扩展头部,但很多头部被设计为仅由终端主机处理。
      • 在有些路由器中,带选项或扩展的数据报不会像普通数据报那样被快速转发。
    • 路由警告选项提示可能由于在Internet上使用其他选项而有异常问题。
    • IPv6扩展头部:
      • IPv4提供的特殊功能,在IPv6头部之后增加扩展头部实现。
      • IPv6必须按接收的顺序处理扩展头部。
      • 扩展选项:
        • 逐跳选项;
        • 目的地选项;
        • 类型--长度--值集合(TLV).
      • 填充1和填充N,IPv6需要8字节对齐的偏移量对齐,较小的选项用0填充到长度为8字节。
      • IPv6超大有效载荷:IPv6超大有效载荷选项指定了一种有效载荷大于65535字节的IPv6数据报,称为超大报文。
      • 隧道封装限制:
        • 隧道是指将一个协议封装在另一个协议中,IP数据报可能被封装在另一个IP数据报的有效载荷部分。
        • 隧道可用于形成虚拟的覆盖网络。
        • 封装限制行动类似于IPv4的TTL和IPv6的跳数限制字段,只不过采用隧道封装层次代替转发跳步。
      • 路由警告:指出数据报包含需要路由器处理的信息。
      • 快速启动: 快速启动,仅用于专用网络。
      • CALIPSO: 支持通用体系结构式标签IPv6安全选项,提供一种为数据报做标记的方法,包括一个安全级别标识符和一些额外的信息。
      • 家乡地址:移动IP可能改变自己的网络接入点,同时不会断开自己的高层网络连接。
      • 路由头部: IPv6路由头部为发送方提供了一种IPv6数据报控制机制,以控制数据报通过网络的路径。
        • IPv6路由头部涵盖了来自IPv4的宽松源路由和记录路由选项。
        • IPv6路由头部在转发过程中不会处理,直至目的IP地址字段中包含的地址所在的点。
      • 分片头部:
        • 分片头部用于IPv6源节点向目的地发送一个大于路径MTU的数据报。
        • IPv6中,仅数据报的发送者可以执行分片操作。
        • IPv6分片标识符字段是32位,IPV4分片标识符是16位,更大的字段提供网络中容纳更多分片的能力。

    IP转发

    • IP转发对于一个主机来说,比较简单,如果目的地址是直接相连的主机或共享网络,IP数据报直接发送到目的地,不需要或不使用路由器。
      • 否则主机将数据报发送到一台路由器,该路由器将数据报交付到目的地。
    • 主机与路由器处理IP数据报的区别在于: 主机不转发那些不是它生成的数据报,但是路由器会转发不是自己生成的数据报。
    • IP层包括一些内存信息:称为路由表或转发表。
      • 每次转发一个数据报就会从路由表中查找信息。
      • ICMP消息可能发送回源节点,以表明发生了一个错误。
    • 转发表:
      • IP转发表通常需要几个关键信息:
        • 目的地:32位字段(IPv6为128位),用于与一个掩码操作结果相匹配。
        • 掩码: 32位字段(IPv6为128位),用作数据报目的IP地址按位与操作的掩码,其中的目的IP地址是要再转发表中查找的地址。
        • 下一跳: 它是下一个IP实体(路由器或主机)的32位IPv4地址或128位IPv6地址,数据报将转发到该地址。
          • 下一跳实体通常在一个网络中由执行转发查找的系统所共共享,这意味着他们共享同一网络前缀。
        • 接口: 包含一个由IP层使用的标识符,以确定将数据报发送到下一跳的网络接口。
      • IP转发逐跳进行,路由器和主机不包含到任何目的地的完整转发路径,IP转发只提供下一跳实体的IP地址。
      • 由一个或多个路由协议确保路由表正确,多种路由协议能做好这项工作: 包括RIP、OSPF、BGP和IS-IS。
    • 当一台主机或路由器中的IP层需要向下一跳的路由器或主机发送一个数据报时,它首先检查数据报中的目的IP地址(D).
      • 在转发表中使用该值D来执行最长前缀匹配算法。

    移动IP

    • 移动IP基于一台主机拥有一个家乡网络,但可以不时地访问其他网络的想法。
      • 针对IPv4的移动IP协议(MIPv4);
      • 针对IPv6的移动IP协议(MIPv6).
    • MIPv6的复杂性主要涉及信令消息,以及如何保证它们的安全。
    • 移动IP自身实际上是一种特殊的协议。
    • 基本模型: 双向隧道:
      • 一台可能移动的主机称为移动节点(MN),与它通信的主机称为通信节点(CN).
        • MN被赋予一个由家乡网络的网络前缀获得的IP地址,家乡地址(HoA);
        • 漫游到一个可访问的网络时,它被赋予了另一个地址,称为转交地址(CoA)。
      • 在基本模型中,当一个CN与MN通信时,该流量需要通过MN的家乡代理(HA)来路由。
        • HA是一种特殊类型的路由器,被部署在网络基础设施中。
        • MN的HoA和CoA之间的关联称为MN绑定。
      • 当MN(或移动网络的路由器)连接到网络中的一个新位置时,它接收自己的CoA,并向自己的HA发送一个绑定更新消息,这个HA使用一个绑定确认来响应。
        • MN和CA之间的流量通过MN的HA来路由,并使用一种双向的IPv6分组隧道,称为双向隧道。
    • 路由优化:
      • 为了改善MIPv6中出现的低效路由,可使用一种称为路由优化(RO)的方法。
      • RO操作分为两个部分:
        • 涉及注册绑定的建立和维护,MN必须向每个CN证明自己的真实身份,通过一个返回路由程序(RRP)来完成。
        • 涉及所有绑定建立后的数据交换方法。
          • RRP使用的移动消息是IPv6移动扩展头部的子类型:
            • 家乡测试初始化(HoTI);
            • 家乡测试(HoT);
            • 转交测试初始化(Coti);
            • 转交测试(CoT).
          • 这些消息向CN验证一个特定MN的家乡地址(HoTI和HoT消息)和转交地址(CoTI和CoT消息)可达性。

    IP数据报的主机处理

    • 确定一个单播数据报是否匹配一台主机的IP地址并被处理,它取决于接收系统的主机模式,以及它是否为最相关的多宿主主机。
      • 强主机模式:只有当目的IP地址字段中包含的IP地址与数据报到达的接口配置的IP地址匹配时,才同意将数据报交付本地协议栈。
        • 主机模式也适用于发送行为: 当接口胚子的地址与发送数据报的源IP地址字段匹配时,这台采用强主机模式的主机才可从这个特定的接口发送数据报。
      • 弱主机模式:一个数据报携带的目的地址与它到达的任何接口的任何本地地址匹配,无论它到达那个网络接口,他都会被接收的协议栈处理。
    • 地址选择:
      • 当一台主机发送一个IP数据报时,它必须将自己的IP地址写入数据报的源IP地址字段,在他已知多个地址的情况下,数据报的目的地址确定一台特定的目的主机。
      • 数据报的源IP地址和目的IP地址字段中使用的IP地址,是通过一组称为源地址选择程序和目的地址选择程序获得的。
      • 地址选择失败可能导致非对称路邮局、不必要的过滤或丢弃分组。
      • 默认地址选择通过一个策略表来控制,它存在于每台主机中。
        • 它是一个最长匹配前缀查找表,类似于IP路由使用的转发表。
      • 源地址选择算法:
        • 源地址选择算法定义了一个源地址的候选集合CS(D), 它基于一个特定的目的地址D。
      • 目的地址选择算法:
        • 指定了一种类似于源地址选择的方式。
    • 与IP相关的攻击:
      • 主要基于选项操作,或利用专用代码中的错误(分片重组)。
      • 当前Internet中的路由器会忽略或剥离IP选项,并在基本分组的处理中修复错误。
      • 如果没有身份认证或加密,IP欺骗攻击是有可能发生的。
        • 一些早期的攻击涉及对源IP地址的伪造。
      • IPv6和移动IP相对较新,攻击者可以对IPv6分组进行处理,产生攻击。
      • 如果仅简单地过滤所有包含IPv6扩展头部和选项的分组,浙江会严重限制其使用,特别是,禁止头部将影响移动IPv6的正常运行。
    • IPv4和IPv6头部不能直接兼容,并且只共享了4位的版本字段。
    • IP转发描述了IP数据报通过单一和多跳网络的传输方式。
      • 除了特殊情况,IP转发在逐跳的基础上进行。
      • 数据报的目的IP地址经过每跳时都不改变,但是链路层封装和链路层目的地址在每跳时会改变。
      • 主机和路由器器使用转发表和最长前缀匹配算法,以确定匹配得最好的转发条目,以及沿着一条转发路径的下一跳。
    • 移动IP在移动节点的家乡地址和转交地址之间建立安全绑定。
      • 这些绑定可用于与移动节点通信,即使它不在家乡内部。
    • 主机模式涉及主机如何选择通信使用的地址,目前已经有一些地址选择算法(针对源地址和目的地址),这些算法倾向于选择范围有限、永久性的地址。
  • 相关阅读:
    时间单位转化
    快速排序算法
    用virtualenv建立Python独立开发环境
    Shell正则表达式之grep、sed、awk实操笔记
    Objective-C 30分钟入门教程
    base64加密后字符串长度
    error: synthesized property 'name' must either be named the same as a compatible instance variable or must explicitly name an instance variable问题解决
    Ubuntu系统下通过Clang编译器编写Objective-C
    MongoDB 聚合Group(二)
    MongoDB聚合(单一用途的聚合方法)
  • 原文地址:https://www.cnblogs.com/longjiang-uestc/p/10661630.html
Copyright © 2011-2022 走看看