TCP/IP协议簇

TCP/IP协议簇

  1. 网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。它规定了通信时信息必须采用的格式和这些格式所代表的意义。网络中存在着许多协议,接收方和发送方使用的协议必须一致,否则一方将无法识别另一方发出的信息。

  2. TCP/IP协议是Internet网络的基础协议族。OSI协议层次结构就是现在常说的OSI参考模型(Open System Interconnection Reference Model)。它是国际标准化组织(ISO)提出的一个标准框架,定义了不同计算机互连的标准,目的是使世界范围内的各种计算机互连起来,构成一个网络。OSI框架标准定义了网络互联的7层框架:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。TCP/IP协议层次结构也就是现在常说的TCP/IP参考模型。它是ARPANET和其后继的因特网使用的参考模型。基于TCP/IP的参考模型,可以将协议分成4个层次,从上到下分别为应用层、传输层、网际层和网络访问层。

网络访问层

  1. 物理层的作用是提供传送数据的通路和可靠的环境。对于计算机来说,物理层对应的就是网络适配器。根据网络适配器的存在方式,可以分为两类。第一类是物理网络适配器,如有线网卡、无线网卡;第二类是虚拟网络适配器,如宽带拨号连接、VPN连接等。

  2. 数据链路层介于物理层与网络层之间,用来为网络层提供数据传送服务。它定义了数据传输的起始位置,并且通过一些规则来控制这些数据的传输,以保证数据传输的正确性。由于数据链路层独立完成以上两个任务并分为两个子层。

    1. 介质访问控制(Media Access Control,MAC)提供与网络适配器连接的接口。实际上,网络适配器驱动程序通常被称为MAC驱动,而网卡在工厂固化的硬件地址通常被称为MAC地址。
    2. 逻辑链路控制(Logical Link Control,LLC)对经过子网传递的帧进行错误检查,并且管理子网上通信设备之间的链路。
  3. 网络体系定义了网络构成,还规定了通信方式,主要包括以下4个方面:访问方法、数据帧格式、布线类型、布线规则。

  4. 由于网络使用的场景和数据传输所使用的终端设备不同,在物理层中识别的网络接口设备也会不同。网络体系主要分为4大类型:IEEE 802.3(以太网)、IEEE 802.11(无线网络)、IEEE 802.16(WiMAX)、点到点协议(PPP)。

  5. 硬件的MAC地址是厂家按照一定的规则,进行设置所产生的。它采用十六进制数表示共6个字节(48位)。前24位称为组织唯一标识符(Organizationally Unique Identifier,OUI),是由IEEE的注册管理机构给不同厂家分配的代码(区分厂家);后24位是由厂家自己分配的(不重复),称为扩展标识符。用户可以通过去http://mac.51240.com/查前24位的厂家信息。

  6. 计算机网络的拓扑结构是引用拓扑学中研究与大小、形状无关的点、线关系的方法。它把网络中的计算机和通信设备抽象为一个点,把传输介质抽象为一条线,而由点和线组成的几何图形就是计算机网络的拓扑结构。

  7. 以太网是现有局域网最常用的通信协议标准,以太网结构主要分为总线型和星型两种。以太网采用了多种连接介质。如双绞线多用于从主机到集线器或交换机的连接,而光纤则主要用于交换机间的级联和交换机到路由器间的点到点链路上。同轴缆作为早期的主要连接介质,现在已经逐渐被淘汰。

    1. 以太网采用附加冲突检测的载波帧听多路访问(CSMA/CD)机制,以太网中所有节点都可以看到在网络中发送的信息(广播网络)。通过使用CSMA/CD监视传输介质的状态,在传输之前等待线路空闲时发送数据。

    2. 计算机尝试发送数据时会监听信道是否空闲,如果空闲就传输传输并监听,如果监听发现发生冲突就执行退避算法并停止发送,等待一个随机的时间间隔后,再次尝试发送。当冲突发生时,涉及冲突的计算机会返回监听信道状态。

    3. 网络访问层的软件必须把数据转换成能够通过网络适配器硬件进行传输的格式。根据以太网帧数据段的要求,将数据分为(64B~1518B)数据块并打成以太网帧(不包含前导码)。有些系统支持更大的帧,最大可以支持9000字节。每一帧都包含数据及以太网网络适配器处理帧所需要的其他信息。将数据帧传递给物理层并转换为比特流,再通过传输介质发送出去。以太网其他网络适配器接收到帧并检查目的地址是否匹配,匹配就接收并向上层传递。

    4. 以太帧起始部分由前同步码和帧开始定界符组成。后面紧跟着一个以太网报头,以MAC地址说明目的地址和源地址。帧的中部是该帧负载的包含其他协议报头的数据包。以太帧由一个32位冗余校验码结尾,用于检验数据传输是否出现损坏。

      部分占用描述
      前同步码7字节用来接收端适配器接收MAC帧时迅速调整时钟频率。1和0交替。
      帧开始定界符1字节前6位1和0交替,后2位连续为1表示接收端适配器准备接收数据。
      目的地址6字节目标物理地址(MAC地址),检测目标与接收者是否一致。
      源地址6字节源物理地址(MAC地址),证明发送者。
      类型上层协议的类型,指定数据的协议类型。
      数据46~1500字节也称为效载荷,表示交付给上层的数据。不足46字节时自动填充无效数据到最小长度。最大值也叫最大传输单元(MTU)。
      帧检验序列FCS4字节检测该帧是否出现差错。发送方计算帧的循环冗余码校验(CRC)值并写入。接收后重新计算并比较,如果不一致则重新发送。

网际层

  1. 网际层提供独立于硬件的逻辑寻址,从而让数据能够在具有不同物理结构的子网之间传递。这种传递基于IP协议提供的IP地址实现。

  2. IP地址(Internet Protocol Address)是互联网协议特有的一种地址,具有特定地址格式。为网络中的所有互联设备分配一个逻辑地址,以此来屏蔽物理地址的差异。

    1. 在局域网网段中,可以使用MAC地址在网络访问层进行通信。如果跨网段通信MAC就不可以,因为MAC地址不能跨路由接口运行。这是由于内置在网卡里的固定MAC地址不能在地址空间上引入逻辑结构,使其无法具备真正地址功能。要进行数据传输,必须使用一种逻辑化、层次化的寻址方案对网络进行组织。这就是IP地址。
    2. 在网际层中,利用IP地址将数据传输到目的地。为了能够使数据正确地发送到目标主机上,网络上的IP地址必须有一定的规则来识别主机的位置。每个IP地址包括网络ID和主机ID两个标识码(ID),同一个物理网络上的所有主机都使用同一个网络ID。网络ID用于识别主机所在的网络;主机ID用于识别该网络中的主机。如此操作只为便于寻址。
    3. 网络的主机数量取决与IP地址(32位)如何分配,需要定义一定的管理分配。
    4. 一些IP地址具有特殊含义,不会分配给互联网的主机。
      1. A类地址:私有地址范围为10.0.0.0~10.255.255.255、保留地址范围为127.0.0.0~127.255.255.255。
      2. B类地址:私有地址范围为172.16.0.0~172.31.255.255、保留地址为169.254.X.X。
      3. C类地址:私有地址范围为192.168.0.0~192.168.255.255。
  3. 解决大型网络快速寻找主机,使用子网划分来实现。子网划分是将IP地址的主机ID部分划分为子网ID和主机ID。子网掩码则是用来指明地址中多少位用于子网ID,保留多少位用于实际的主机ID。

  4. 无类域间路由(Classless Inter-Domain Routing,CIDR)可以将路由集中起来,在路由表中更灵活地定义地址。不区分类地址,而是使用CIDR前缀的值指定地址中作为网络ID的位数。这个前缀可以位于地址空间的任何位置,让管理者能够以更灵活的方式定义子网,以简便的形式指定地址中网络ID部分和主机ID部分。 解决IP地址分类后,会造成IP地址的部分浪费。CIDR标记使用一个斜线(/)分隔符,后面跟一个十进制数值表示地址中网络部分所占的位数。

  5. IP协议提供了一种分层的、与硬件无关的寻址系统,它可以在复杂的路由式网络中传递数据所需的服务。IP协议可以将多个交换网络连接起来,在源地址和目的地址之间传送数据包。同时,它还提供数据重新组装功能,以适应不同网络对数据包大小的要求。

    1. 同网段,目标IP地址被ARP协议解析为MAC地址,然后根据MAC地址,源主机直接把数据包发给目标主机;
    2. 不同网段,数据包发送过程如下:网关的IP地址被ARP协议解析为MAC地址。根据该MAC地址,源主机将数据包发送到网关。网关根据数据包中的网段ID寻找目标网络。如果找到,将数据包发送到目标网段;如果没找到,将数据包发送到上一级网关。数据包经过网关被发送到正确的网段中。目标IP地址被ARP协议解析为MAC地址。根据该MAC地址,数据包被发送给目标地址的主机。
  6. 在TCP/IP协议中,使用IP协议传输数据的包被称为IP数据包。每个数据包都包含IP协议规定的内容。IP协议规定的这些内容被称为IP数据报文(IP Datagram)或者IP数据报。IP数据报文由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

    部分占用描述
    版本(version)4位表示IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4。
    首部长度(网际报头长度IHL)4位这个字段所表示数的单位是32位字长(1个32位字长是4字节)。因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是,长度有时可能不够用,之所以限制长度为60字节,是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。
    区分服务(tos)8位这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务(Differentiated Services,DS)。只有在使用区分服务时,这个字段才起作用。
    总长度(totlen)16位首部和数据之和,单位为字节。数据报的最大长度为2^16-1=65535字节。
    标识(identification)16位用来标识数据报,IP协议在存储器中维持一个计数器。每产生一个数据报,计数器就加1,并将此值赋给标识字段。当数据报的长度超过网络的MTU,而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。具有相同的标识字段值的分片报文会被重组成原来的数据报。
    标志(flag)3位第一位未使用,其值为0。第二位称为DF(不分片),表示是否允许分片。取值为0时,表示允许分片;取值为1时,表示不允许分片。第三位称为MF(更多分片),表示是否还有分片正在传输,设置为0时,表示没有更多分片需要发送,或数据报没有分片。
    片偏移(offsetfrag)13位当报文被分片后,该字段标记该分片在原报文中的相对位置。片偏移以8个字节为偏移单位。所以,除了最后一个分片,其他分片的偏移值都是8字节(64位)的整数倍。
    生存时间(TTL)8位表示数据报在网络中的寿命。该字段由发出数据报的源主机设置。其目的是防止无法交付的数据报无限制地在网络中传输,从而消耗网络资源。路由器在转发数据报之前,先把TTL值减1。若TTL值减少到0,则丢弃这个数据报,不再转发。因此,TTL指明数据报在网络中最多可经过多少个路由器。TTL的最大数值为255。若把TTL的初始值设为1,则表示这个数据报只能在本局域网中传送。
    协议8位表示该数据报文所携带的数据所使用的协议类型。该字段可以方便目的主机的IP层知道按照什么协议来处理数据部分。不同的协议有专门不同的协议号。例如,TCP的协议号为6,UDP的协议号为17,ICMP的协议号为1。
    首部检验和(checksum)16位用于校验数据报的首部。数据报每经过一个路由器,首部的字段都可能发生变化(如TTL),所以需要重新校验。而数据部分不发生变化,所以不用重新生成校验值。
    源地址32位表示数据报的源IP地址。
    目的地址32位表示数据报的目的IP地址。该字段用于校验发送是否正确。
    可选字段该字段用于一些可选的报头设置,主要用于测试、调试和安全的目的。这些选项包括严格源路由(数据报必须经过指定的路由)、网际时间戳(经过每个路由器时的时间戳记录)和安全限制。
    填充由于可选字段中的长度不是固定的,使用若干个0填充该字段,可以保证整个报头的长度是32位的整数倍。
    数据部分表示传输层的数据,如保存TCP、UDP、ICMP或IGMP的数据。数据部分的长度不固定。
  7. IP协议在传输数据包时,经常会进行分片传输。例如,当一个设备准备传输一个IP数据包时,它将首先获取这个数据包的大小,然后获取发送数据包所使用的网络接口的最大传输单元值(MTU)。如果数据包的大小大于MTU,则该数据包将被分片。将一个数据包分片包括下面几步:设备将数据包分为若干个可成功进行传输的数据包;每个IP数据包的首部的总长度域会被设置为每个分片的片段长度;更多分片标志将会在数据流的所有数据包中设置为1,除了最后一个数据包;IP数据包头中分片部分的分片偏移将会被设置;数据包被发送出去。

  8. 地址解析协议(Address Resolution Protocol,ARP)是根据IP地址获取物理地址的一个TCP/IP协议。它通过IP地址向MAC地址的转换,解决网际层和网络访问层的衔接问题。

    1. ARP工作流程分为两个阶段,主机A以广播形式向网络中所有主机发送ARP请求(请求),主机B接收到请求,发现自己就是主机A要找的主机,返回响应。响应包中包含自己的MAC地址(响应)。

    2. 为了避免重复发送ARP请求,每台主机都有一个ARP高速缓存。当主机得到ARP响应后,将目标主机的IP地址和物理地址存入本机ARP缓存中,并保留一定时间。只要在这个时间范围内,下次请求MAC地址时,直接查询ARP缓存,而无须再发送ARP请求。

    3. ARP协议包主要分为ARP请求包和ARP响应包。对应报文中的某些字段值也有所不同。ARP请求包报文的操作类型(op)字段的值为request(1),目标MAC地址字段的值为广播地址;ARP响应包报文中操作类型(op)字段的值为reply(2),目标MAC地址字段的值为目标主机的硬件地址。报文总长度为28字节。

      部分占用描述
      硬件类型指明了发送方想知道的硬件接口类型,以太网的值为1
      协议类型表示要映射的协议地址类型。它的值为0x0800,表示IP地址
      硬件地址长度和协议长度硬件地址和协议的长度,以字节为单位。以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4
      操作类型用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4
      发送方MAC地址6字节发送方设备的硬件地址
      发送方IP地址4字节发送方设备的IP地址
      目标MAC地址6字节接收方设备的硬件地址
      目标IP地址4字节接收方设备的IP地址
    4. 免费ARP(Gratuitous ARP)包是一种特殊的ARP请求,它并非期待得到IP对应的MAC地址,而是当主机启动的时候,发送一个Gratuitous ARP请求,即请求自己的IP地址的MAC地址。所以免费ARP请求报文的目标地址是自己。免费ARP有一下作用:起到宣告作用,以广播方式发出不需要回应,只需让其他设备知道自己;发送免费ARP请求报文后还可以检测网络中是否有IP与自己冲突的主机;也可用于更新其他主机的ARP缓存表。

  9. 控制报文协议(Internet Control Message Protocol,ICMP)是TCP/IP协议族的一个子协议。ICMP协议用于在IP主机和路由器之间传递控制消息,描述网络是否通畅、主机是否可达、路由器是否可用等网络状态。由于IP协议简单,数据传输天然存在不可靠、无连接等特点,为了解决数据传输出现的问题,人们引入了ICMP协议。

    1. 数据包在发送到目标主机的过程中,通常会经过一个或多个路由器。而数据包在通过这些路由进行传输时,可能会遇到各种问题,导致数据包无法发送到目标主机上。为了了解数据包在传输的过程中在哪个环节出现了问题,就需要用到ICMP协议。它可以跟踪消息,把问题反馈给源主机。
    2. ICMP报文一般为8个字节,包括类型(1)、代码(1)、校验(2)和扩展内容字段(4)。
    3. 路由跟踪功能是用来识别一个设备到另一个设备的网络路径。在一个简单的网络上,这个网络路径可能只经过一个路由器,甚至一个都不经过。但是在复杂的网络中,数据包可能要经过数十个路由器才会到达最终目的地。在通信过程中,可以通过路由跟踪功能判断数据包传输的路径。
    4. ICMP时间戳请求允许系统向另一个系统查询当前的时间,但不包含日期。返回的建议值是自午夜零点开始计算的时间(UTC)。

传输层

  1. 传输层(Transport Layer)是唯一负责总体的数据传输和数据控制传输层的一层协议。传输层提供端到端的交换数据机制,它不仅对会话层、表示层和应用层这高三层提供可靠的传输服务,还对网络层提供可靠的目地站点信息。
  2. 网际层提供了主机之间的逻辑通道,主机有多个进程同时在使用网络连接,为了区分数据包所属的进程,就需要使用到传输层。传输层提供了应用进程之间的端到端连接,其作用:为网络应用程序提供接口;为端到端连接提供流量控制、差错控制、服务质量等管理服务;提供多路复用、多路分解机制。
  3. 针对不同情况下的数据质量保证,传输层提供了两种数据传输协议类型。面向连接通信,建立一条通信线路,然后进行通信;无连接是指通信双方不需要事先建立通信线路,而是把每个带有目的地址的包(报文分组)发送到线路上,由系统选定路线进行传输,不需要目标方进行回复。
  4. 在数据链路层中,通过MAC地址来寻找局域网中的主机;在网际层中,通过IP地址来寻找网络中互连的主机或路由器。在传输层中,需要通过端口进行寻址,来识别同一计算机中同时通信的不同应用程序。
  5. 应用层通过传输层进行数据通信时,TCP和UDP会遇到需要同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口,区分不同应用程序进程间的网络通信和连接。
  6. 在网络上主机与主机之间的通信实质上是主机上运行的应用进程之间的通信。在进行通信时,往往同时运行多个应用程序。为了能够让一个计算机同时支持多个网络程序,并且同时保持与多台计算机进行连接,就需要使用多路复用,从源主机的不同套接字中收集数据块,并为每个数据块封装首部信息,从而生成报文段,然后将报文段传递到网络层中;多路分解,将传输层报文段中的数据交付到正确的套接字。

TCP协议

  1. 传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP协议中,通过三次握手建立连接。通信结束后,还需要断开连接。如果在发送数据包时,没有正确被发送到目的地时,将会重新发送数据包。

  2. TCP协议使用的是面向连接的方法进行通信的,其作用如下:

    1. 面向流的处理:TCP以流的方式处理数据。换句话说,TCP可以一个字节一个字节地接收数据,而不是一次接收一个预订格式的数据块。TCP把接收到的数据组成长度不等的段,再传递到网际层。
    2. 重新排序:如果数据以错误的顺序到达目的地,TCP模块能够对数据重新排序,来恢复原始数据。
    3. 流量控制:TCP能够确保数据传输不会超过目的计算机接收数据的能力。
    4. 优先级与安全:为TCP连接设置可选的优先级和安全级别。
    5. 适当的关闭:以确保所有的数据被发送或接收以后,再进行关闭连接。
  3. TCP协议的数据包进行传输采用的是服务器端和客户端模式。发送TCP数据请求方为客户端,另一方则为服务器端。客户端要与服务器端进行通信,服务器端必须开启监听的端口,客户端才能通过端口连接到服务器,然后进行通信。

  4. TCP报文是TCP层传输的数据单元,也称为报文段。

    部分占用描述
    源端口字段(Source Port)16位源计算机上的应用程序的端口号
    目标端口字段(Destination Port)16位目标计算机的应用程序端口号
    序列号字段(Sequence Number)32位它表示本报文段所发送数据的第一个字节的编号。在TCP连接中,所传送的字节流的每一个字节都会按顺序编号。当SYN标记不为1时,这是当前数据分段第一个字母的序列号;如果SYN的值是1时,这个字段的值就是初始序列值(ISN),用于对序列号进行同步。这时,第一个字节的序列号比这个字段的值大1,也就是ISN加1。
    确认号字段(Acknowledgment Number,ACK Number)32位它表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。其值是接收计算机即将接收到的下一个序列号,也就是下一个接收到的字节的序列号加1。
    TCP首部长度字段(Header Length)4位数据偏移是指数据段中的“数据”部分起始处距离TCP数据段起始处的字节偏移量。其实这里的“数据偏移”也是在确定TCP数据段头部分的长度,告诉接收端的应用程序,数据从何处开始。
    保留字段(Reserved)4位为TCP将来的发展预留空间,目前必须全部为0。
    标志位字段CWR(Congestion Window Reduce)拥塞窗口减少标志,用来表明它接收到了设置ECE标志的TCP包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率
    标志位字段ECE(ECN Echo)用来在TCP三次握手时表明一个TCP端是具备ECN功能的。在数据传输过程中,它也用来表明接收到的TCP包的IP头部的ECN被设置为11,即网络线路拥堵。
    标志位字段URG(Urgent)表示本报文段中发送的数据是否包含紧急数据。URG=1时表示有紧急数据。当URG=1时,后面的紧急指针字段才有效。
    标志位字段ACK表示前面的确认号字段是否有效。ACK=1时表示有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1
    标志位字段PSH(Push)告诉对方收到该报文段后是否立即把数据推送给上层。如果值为1,表示应当立即把数据提交给上层,而不是缓存起来
    标志位字段RST表示是否重置连接。如果RST=1,说明TCP连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接
    标志位字段SYN在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才为1。
    标志位字段FIN标记数据是否发送完毕。如果FIN=1,表示数据已经发送完成,可以释放连接。
    窗口大小字段(Window Size)16位它表示从Ack Number开始还可以接收多少字节的数据量,也表示当前接收端的接收窗口还有多少剩余空间。该字段可以用于TCP的流量控制。
    TCP校验和字段(TCP Checksum)16位它用于确认传输的数据是否有损坏。发送端基于数据内容校验生成一个数值,接收端根据接收的数据校验生成一个值。两个值必须相同,才能证明数据是有效的。如果两个值不同,则丢掉这个数据包。Checksum是根据伪头+TCP头+TCP数据三部分进行计算的。
    紧急指针字段(Urgent Pointer)16位仅当前面的URG控制位为1时才有意义。它指出本数据段中为紧急数据的字节数。当所有紧急数据处理完后,TCP就会告诉应用程序恢复到正常操作。即使当前窗口大小为0,也是可以发送紧急数据的,因为紧急数据无须缓存。
    可选项字段(Option)长度不定,但长度必须是32bits的整数倍
  5. TCP协议操作可以分为三个阶段。在进入数据传输阶段之前,必须在多步握手过程中正确建立连接。数据传输完成后,连接终止关闭已建立的连接并释放所有分配的资源。TCP连接由操作系统通过编程接口管理,该接口表示通信的本地端点,即套接字(Socket)。在TCP连接的生命周期中,本地端点经历了一系列状态变化,具体如下:

    1. LISTEN服务器:表示等待来自任何远程TCP和端口的连接请求。
    2. SYN-SENT客户端:表示在发送连接请求之后等待匹配的连接请求。
    3. SYN-RECEIVED服务器:表示在接收和发送连接请求之后,等待连接请求确认。
    4. ESTABLISHED服务器和客户端:代表服务端与客户端已建立连接,数据传输状态下,接收的数据可以传递给用户。
    5. FIN-WAIT-1服务器和客户端:表示等待来自远程TCP的连接终止请求,或者确认之前发送的连接终止请求。
    6. FIN-WAIT-2服务器和客户端:表示等待来自远程TCP的连接终止请求。
    7. CLOSE-WAIT服务器和客户端:表示等待来自本地用户的连接终止请求。
    8. CLOSING服务器和客户端:表示等待来自远程TCP的连接终止请求确认。
    9. LAST-ACK服务器和客户端:表示等待之前发送到远程TCP的连接终止请求的确认。
    10. TIME-WAIT服务器或客户端:表示等待足够的时间传递以确保远程TCP收到其连接终止请求的确认。根据RFC793的规定,连接可以在TIME-WAIT中最长保持4分钟。
    11. CLOSED服务器和客户端:表示根本不连接的状态。
  6. TCP是面向连接的协议,所以每次发出的请求都需要对方进行确认。TCP客户端与TCP服务器在通信之前需要完成三次握手才能建立连接。

    1. 建立连接时,客户端向服务器发送SYN报文(SEQ=x,SYN=1),并进入SYN_SENT状态,等待服务器确认。
    2. 实际上是分两部分来完成的,即SYN+ACK(请求和确认)报文。服务器收到了客户端的请求,向客户端回复一个确认信息(ACK=x+1)。服务器再向客户端发送一个SYN包(SEQ=y)建立连接的请求,此时服务器进入SYN_RECV状态。
    3. 是客户端收到服务器的回复(SYN+ACK报文)。此时,客户端也要向服务器发送确认包(ACK)。此包发送完毕客户端和服务器进入ESTABLISHED状态。
  7. 客户端与服务器之间的通信是一个数据传输过程。通信的消息将以数据包形式进行传输。为了更有效地进行通信,TCP协议在数据进行数据传输时,使用滑动窗口机制来同时发送多个数据包。当数据包丢失时,TCP协议利用数据重发功能重新发送数据包。因接收端接收数据包的能力不同,TCP流控制会根据接收端的能力发送适当数量的数据包。

  8. 数据从主机传送到另一个主机往往要经过路由器、网关等设备。这些设备都要对经过的数据进行处理。由于这些设备处理数据有一定的限制,不能处理超过额定字节的数据,所以发送的时候需要确定发送数据包的最大字节数。这个最大字节数被称为最大消息长度(Maximum Segment Size,MSS)。当要发送的数据超过该值,就需要将数据分为多个包,依次发送。该操作被称为数据分片。

  9. MSS是TCP数据包每次能够传输的最大数据量。通常,最大值为1460字节。如果发送的数据包大小大于MSS值,数据包将会被分片传输。其中,第1次和第2次握手包的TCP首部包含MSS选项,互相通知对方网络接口能够适应的MSS的大小,然后双方会使用较小的MSS值进行传输。

  10. 在进行数据传输时,如果传输的数据比较大,就需要拆分为多个数据包进行发送。TCP协议需要对数据进行确认后,才可以发送下一个数据包。

    1. 发送端每发送一个数据包,都需要得到接收端的确认应答以后,才可以发送下一个数据包。这样一来,就会在等待确认应答包环节浪费时间。为了避免这种情况,TCP引入了窗口概念。窗口大小指的是不需要等待确认应答包而可以继续发送数据包的最大值。
    2. 发送端发送第一个数据包(1-1000),没有等待对应的确认应答包,就继续发送第二个数据包(1001-2000)和第三个包(2001-3000)。当收到第3个数据包的确认应答包时,会连续发送3个数据包(3001-4000,4001-5000,5001-6000)。当收到第6个数据包的确认应答包时,又会发送3个数据包(6001-7000,7001-8000,8001-9000)。以这种方式发送,就可以省去多个数据包(第1、2、4、5、7、8个)的确认应答包时间,从而避免了网络的吞吐量的降低。
    3. 窗口大小指的是可以发送数据包的最大数量。在实际使用中,它可以分为两部分。第一部分表示数据包已经发送,但未得到确认应答包;第二部分表示允许发送,但未发送的数据包。在进行数据包发送时,当发送了最大数量的数据包(窗口大小数据包),有时不会同时收到这些数据包的确认应答包,而是收到部分确认应答包。那么,此时窗口就通过滑动的方式,向后移动,确保下一次发送仍然可以发送窗口大小的数据包。这样的发送方式被称为滑动窗口机制。设置窗口大小为3。
    4. 每1000个字节表示一个数据包。发送端同时发送了3个数据包(2001-5000),接收端响应的确认应答包为“下一个发送4001”,表示接收端成功响应了前两个数据包,没有响应最后一个数据包。此时,最后一个数据包要保留在窗口中。由于窗口大小为3,发送端除了最后一个包以外,还可以继续发送下两个数据包(5001-6000和6001-7000)。窗口滑动到7001处。
  11. 在进行数据包传输时,难免会出现数据丢失情况。这种情况一般分为两种。第一种,如果未使用滑动窗口机制,发送的数据包没有收到确认应答包,那么数据都会被重发;如果使用了滑动窗口机制,即使确认应答包丢失,也不会导致数据包重发。第二种,发送的数据包丢失,将导致数据包重发。

    1. 确认应答包丢失:这种情况指的是前面发送的数据包没有收到对应的确认应答。当收到后面数据包的确认应答包,表示前面的数据包已经成功被接收端接收了,发送端不需要重新发送前面的数据包了。
      1. 发送端第1次发送数据包:这里设置的窗口大小为3,可以最大发送3个数据包。发送端同时发送3个数据包1-1000、1001-2000和2001-3000。
      2. 接收端返回确认应答包:接收端接收到这些数据,并给出确认应答包。数据包1-1000和数据包2001-3000的确认应答包没有丢失,但是数据包1001-2000的确认应答包丢失了。
      3. 发送端第2次发送数据包:发送端收到接收端发来的确认应答包,虽然没有收到数据包1001-2000的确认应答包,但是收到了数据包2001-3000的确认应答包。判断第一次发送的3个数据包都成功到达了接收端。再次发送3个数据包3001-4000、4001-5000和5001-6000。
      4. 接收端返回确认应答包:接收端接收到这些数据,并给出确认应答包。数据包3001-4000和数据包4001-5000的确认应答包丢失了,但是数据包5001-6000没有丢失。
      5. 发送端第3次发送数据包:发送端收到接收端发来的确认应答包,查看到数据包5001-6000收到了确认应答包。判断第2次发送的3个数据包都成功到达了接收端。再次发送3个数据包6001-7000、7001-8000和8001-9000。
    2. 发送数据包丢失:这种情况指的是发送端发送的部分数据包没有达到接收端。那么,如果在接收端收到的数据包,不是本应该要接收的数据包,那么就会给发送端返回消息,告诉发送端自己应该接收的数据包。如果发送端连续收到3次这样的数据包,就认为该数据包成功发送到接收端,这时就开始重发该数据包。
      1. 发送端发送数据包:这里窗口大小为4,发送端发送4个数据包,分别为1-1000、1001-2000、2001-3000和3001-4000。
      2. 接收端返回确认应答包:接收端接收到这些数据,并给出确认应答包。接收端收到了数据包1-1000,返回了确认应答包;收到了数据包1001-2000,返回了确认应答包;但是数据包2001-3000,在发送过程中丢失了,没有成功到达接收端。数据包3001-4000没有丢失,成功到达了接收端,但是该数据包不是接收端应该接收的数据包,数据包2001-3000才是真正应该接收的数据包。因此收到数据包3001-4000以后,接收端第一次返回下一个应该发送2001的数据包的确认应答包。
      3. 发送端发送数据包:发送端仍然继续向接收端发送4个数据包,分别为4001-5000、5001-6000、6001-7000和7001-8000。
      4. 接收端返回确认应答包:接收端接收到这些数据,并给出确认应答包。当接收端收到数据包4001-5000时,发现不是自己应该接收的数据包2001-3000,第二次返回下一个应该发送2001的数据包的确认应答包。当接收端收到数据包5001-6000时,仍然发现不是自己应该接收的数据包2001-3000,第三次返回下一个应该发送2001的数据包的确认应答包。以此类推直到接收完所有数据包,接收端都返回下一个应该发送2001的数据包的确认应答包。
      5. 发送端重发数据包:发送端连续3次收到接收端发来的下一个应该发送2001的数据包的确认应答包,认为数据包2001-3000丢失了,就进行重发该数据包。
      6. 接收端收到重发数据包:接收端收到重发数据包以后,查看这次是自己应该接收的数据包2001-3000,并返回确认应答包,告诉发送端,下一个该接收8001的数据包了。
      7. 发送端发送数据包:发送端收到确认应答包后,继续发送窗口大小为4的数据包,分别为8001-9000、9001-10000、10001-11000和11001-12000。
  12. 在使用滑动窗口机制进行数据传输时,发送方根据实际情况发送数据包,接收端接收数据包。但是,接收端处理数据包的能力是不同的。

    1. 如果窗口过小,发送端发送少量的数据包,接收端很快就处理了,并且还能处理更多的数据包。这样,当传输比较大的数据时需要不停地等待发送方,造成很大的延迟。
    2. 如果窗口过大,发送端发送大量的数据包,而接收端处理不了这么多的数据包,这样,就会堵塞链路。如果丢弃这些本应该接收的数据包,又会触发重发机制。
    3. 为了避免这种现象的发生,TCP提供了流控制。所谓的流控制就是使用不同的窗口大小发送数据包。发送端第一次以窗口大小(该窗口大小是根据链路带宽的大小来决定的)发送数据包,接收端接收这些数据包,并返回确认应答包,告诉发送端自己下次希望收到的数据包是多少(新的窗口大小),发送端收到确认应答包以后,将以该窗口大小进行发送数据包。
  13. 为了方便讲解,将图6.21以发送端发送数据包进行分隔,将其分为3部分进行讲解。

    1. 第一部分:发送端根据当前链路带宽大小决定发送数据包的窗口大小。这里,窗口大小为3,表示可以发送3个数据包。因此发送端发送了3个数据包,分别为1-1000、1001-2000和2001-3000。接收端接收这些数据包,但是只能处理2个数据包,第3个数据包2001-3000没有被处理。因此返回确认应答包,设置窗口大小为2,告诉发送端自己现在只能处理2个数据包,下一次请发送2个数据包。
    2. 第二部分:发送端接收到确认应答包,查看到接收端返回窗口大小为2,知道接收端只处理了2个数据包。发过去的第3个数据包2001-3000没有被处理。这说明此时接收端只能处理2个数据包,第3个数据包还需要重新发送。因此发送端发送2个数据包2001-3000和3001-4000。接收端收到这两个数据包并进行了处理。此时,还是只能处理2个窗口,继续向发送端发送确认应答包,设置窗口为2,告诉发送端,下一个应该接收4001的数据包。
    3. 第三部分:发送端接收到确认应答包,查看到接收端返回窗口大小为2。说明接收端接收了上次发送的2个数据包。此时仍然可以处理2个数据包,继续发送数据包4001-5000和5001-6000。
  14. 如果在接收端返回的确认应答包中,窗口设置为0,则表示现在不能接收任何数据。这时,发送端将不会再发送数据包,只有等待接收端发送窗口更新通知才可以继续发送数据包。如果这个更新通知在传输中丢失了,那么就可能导致无法继续通信。为了避免这样的情况发生,发送端会时不时地发送窗口探测包,该包仅有1个字节,用来获取最新的窗口大小的信息。

    1. 发送端发送数据。发送端以窗口大小为2,发送了2个数据包,分别为4001-5000和5001-6000。接收端接收到这些数据以后,缓冲区满了,无法再处理数据,于是向发送端返回确认应答包,告诉它下一个接收6001的数据,但是现在处理不了数据,先暂停发送数据,设置窗口大小为0。
    2. 发送端暂停发送数据。发送端收到确认应答包,查看到下一次发送的是6001的数据,但窗口大小为0,得知接收端此时无法处理数据。此时,不进行发送数据,进入等待状态。
    3. 接收端发送窗口大小更新包。当接收端处理完发送端之前发来的数据包以后,将会给发送端发送一个窗口大小更新包,告诉它,此时可以发送的数据包的数量。这里设置窗口大小为3,表示此时可以处理3个数据包,但是该数据包丢失了,没有发送到发送端。
    4. 发送端发送窗口探测包。由于窗口大小更新包丢失,发送端的等待时间超过了重发超时时间。此时,发送端向接收端发送一个窗口探测包,大小为1字节,这里是6001。
    5. 接收端再次发送窗口大小更新包。接收端收到发送端发来的探测包,再次发送窗口大小更新包,窗口大小为3。
    6. 发送端发送数据。发送端接收到窗口大小更新包,查看到应该发的是6001的数据包,窗口大小为3,可以发送3个数据包。因此发送了数据包,分别为6001-7000、7001-8000和8001-9000。
  15. 当客户端与服务器不再进行通信时,都会以4次挥手的方式结束连接。

    1. 客户端向服务器端发送断开TCP连接请求的[FIN,ACK]报文,在报文中随机生成一个序列号SEQ=x,表示要断开TCP连接。
    2. 当服务器端收到客户端发来的断开TCP连接的请求后,回复发送ACK报文,表示已经收到断开请求。回复时,随机生成一个序列号SEQ=y。由于回复的是客户端发来的请求,所以在客户端请求序列号SEQ=x的基础上加1,得到ACK=x+1。
    3. 服务器端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开。服务器端会先确认断开前,所有传输到客户端的数据是否已经传输完毕。确认数据传输完毕后才进行断开,向客户端发送[FIN,ACK]报文,设置字段值为1。再次随机生成一个序列号SEQ=z。由于还是对客户端发来的TCP断开请求序列号SEQ=x进行回复,因此ACK依然为x+1。
    4. 客户端收到服务器发来的TCP断开连接数据包后将进行回复,表示收到断开TCP连接数据包。向服务器发送ACK报文,生成一个序列号SEQ=x+1。由于回复的是服务器,所以ACK字段的值在服务器发来断开TCP连接请求序列号SEQ=z的基础上加1,得到ACK=z+1。

UDP协议

  1. 用户数据报协议(User Datagram Protocol,UDP)是一种传输层协议。在TCP/IP网络中,它与TCP协议一样用于处理数据包,是一种无连接的协议。

  2. TCP协议在进行数据传输时,需要建立连接,并且每次传输的数据都需要进行确认。当不再进行传输数据时,还需要断开连接。这样做虽然安全,但是效率较低。而UDP协议正好避免了这些过程,它是一种没有复杂控制,提供面向无连接的通信服务协议。UDP协议具备以下特点:

    1. 没有各种连接:在传输数据前不需要建立连接,也避免了后续的断开连接。
    2. 不重新排序:对到达顺序混乱的数据包不进行重新排序。
    3. 没有确认:发送数据包无须等待对方确认。因此,使用UDP协议可以随时发送数据,但无法保证数据能否成功被目标主机接收。
  3. 每个UDP报文分为UDP报头和UDP数据区两部分。报头由4个16位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。

    部分占用描述
    源端口16位这个字段占据UDP报文头的前16位,通常包含发送数据报的应用程序所使用的UDP端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会把自己的端口号写入该字段中。如果不写入端口号,则把这个字段设置为0。这样,接收端的应用程序就不能发送响应了。
    目的端口16位接收端计算机上UDP软件使用的端口
    长度16位表示UDP数据报长度,包含UDP报文头和UDP数据长度。因为UDP报文头长度是8个字节,所以这个值最小为8。
    校验值16位可以检验数据在传输过程中是否被损坏。

DHCP协议

  1. 动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)是基于UDP协议工作的网络配置协议。该协议主要用于集中管理和分配IP地址,帮助网络内的主机获取IP地址、网关和DNS服务器地址。DHCP服务是基于该协议的服务。

  2. 计算机为了在TCP/IP网络中正常工作,需要获取相应的IP地址。获取IP地址的过程被称为地址分配。计算机获取IP地址的方式有3种,即静态分配、动态分配和零配置。

    1. 静态分配也称为手工分配。网络管理员在计算机中直接设置所使用的IP地址。在Windows系统中,用户可以在“Internet协议版本4(TCP/IPv4)属性”对话框中手动配置静态地址。勾选“使用下面的IP地址(S)”复选框,然后输入所要使用的IP地址、子网掩码和默认网关。这些信息必须与自己所在的网络信息一致。在“使用下面的DNS服务器地址(E)”文本框中输入首选DNS服务器地址,一般为网关地址。
    2. 动态分配是指计算机向DHCP服务器申请IP地址,获取后使用该地址。这时,计算机作为DHCP客户机。在这个过程中,DHCP客户机向DHCP服务器租用IP地址,DHCP服务器只是暂时分配给客户机一个IP地址。只要租约到期,这个地址就会还给DHCP服务器,以供其他客户机使用。如果DHCP客户机仍需要一个IP地址来完成工作,则可以再申请另外一个IP地址。所以,计算机获取的IP地址每次都可能变化,属于动态分配。在Windows系统中,用户可以在“Internet协议版本4(TCP/IPv4)属性”对话框中进行动态分配地址。这时,只要勾选“自动获得IP地址(0)”和“自动获得DNS服务器地址(B)”复选框,计算机就会尝试向DHCP服务器请求IP地址了。
    3. 零配置,在动态分配方式中,如果DHCP服务器不在线或出现故障等情况时,客户机就无法获取地址。这时,有些系统将会通过零配置技术为自己分配一个私有的地址,范围为169.254.0.0~169.254.255.255。
  3. DHCP服务是用来分配IP地址的,所以DHCP服务器必须使用静态分配方式设置IP地址。而DHCP客户端可以从DHCP服务器上获取使用的IP地址。DHCP服务器使用的是UDP 67端口,DHCP客户端使用的是UDP 68端口。DHCP工作方式的4个阶段,即发现阶段、提供阶段、选择阶段和确认阶段。

    1. 发现阶段(DHCP Discover):DHCP客户端向所有DHCP服务器的UDP 67端口发送广播数据包以获取IP地址租约,这个数据包被称为DHCP Discover消息。任何收到这个包的DHCP服务器都可以响应这个请求。整个发现阶段的工作方式。其中,DHCP客户端向DHCP服务器A和B都发送了DHCP Discover广播包。
    2. 提供阶段(DHCP Offer):DHCP服务器收到DHCP Discover广播包后会检查自己的配置,并发起DHCP Offer广播消息进行响应,为DHCP客户端提供可用的IP地址。该响应包以广播的形式发送到DHCP客户端的UDP 68端口上。整个提供阶段的工作方式。其中,DHCP服务器A和B都会向DHCP客户端提供自己管理的地址。
    3. 选择阶段(DHCP Request):DHCP客户端收到地址信息后,会选择第一个到达的租约地址信息。然后发起DHCP Request广播消息,告诉所有DHCP服务器,自己已经做出选择,接受了第一个DHCP服务器的地址。整个选择阶段的工作方式。其中,DHCP客户端向DHCP服务器A和B都发送了DHCP Request消息广播包,告诉自己选择了DHCP服务器B的地址租约。
    4. 确认阶段(DHCP ACK):DHCP服务器A和B都收到客户端发来的DHCP Request消息广播包。DHCP服务器B查看信息后,发现客户端选择了自己的地址租约,将返回DHCP ACK广播消息进行最后的确认。DHCP服务器A查看信息以后,发现客户端没有选择自己的地址,将不返回信息。整个确认阶段的工作方式。其中,服务器B向客户端返回了地址租用的DHCP ACK包,对客户端的请求进行确认。DHCP服务器A没有返回信息,因其地址没有被租用。
    5. IP续期:客户端从服务器租用IP地址会有一个固定的租约期。除了租约期限外,还有两个时间值T1和T2。其中,T1定义为租约期限的一半,而T2定义为租约期限的7/8。假设,租约期为8天。当到达T1定义的时间(4天)期限时,客户端会向提供租约的原始服务器发送DHCP Request包,对租约进行更新。如果服务器接受此请求,则回复DHCP ACK消息,包含更新后的租约期限;如果不接受租约更新请求,就不会发送DHCP ACK包。此后,DHCP客户端会定时发送DHCP Request包。如果一直都没有得到确认,则继续使用此IP地址,直到T2定义的时间(7天)限制。此时,客户端会广播发送DHCP Request包,对租约进行更新。如果租期到达时,客户端既不能更新自己的租期,也无法从其他的DHCP服务器获得新的租期,客户端必须停止使用这个IP地址,从而停止常规的TCP/IP网络操作。
  4. DHCP协议提供了多种类型的报文,但是基本格式是相同的。不同类型的报文只是报文中的某些字段值不同。

    部分描述
    op报文的操作类型。分为请求报文和响应报文。客户端发送给服务器的包为请求报文,值为1;服务器发送给客户端的包为响应报文,值为2。
    htypeDHCP客户端的MAC地址类型。MAC地址类型其实是指明网络类型,htype值为1时表示为最常见的以太网MAC地址类型。
    hlen硬件地址长度。以太网MAC地址长度为6个字节,即hlen值为6。
    hops跳数,DHCP报文经过的中继数量。每经过一个路由器,该字段就会增加1。如果没有经过路由器,则值为0(同一网内)。
    xid事务ID。客户端发起一次请求时选择的随机数,用来标识一次地址请求过程。在一次请求中所有报文的xid都是一样的。
    secsDHCP客户端从获取到IP地址或者续约过程开始到现在所过去的时间,以秒为单位。在没有获得IP地址前,该字段始终为0。
    flagsBOOTP标志位。只使用第0比特位,是广播应答标识位,用来标识DHCP服务器应答报文是采用单播还是广播发送。其中,0表示采用单播发送方式,1表示采用广播发送方式。其余位尚未使用。
    ciaddrDHCP客户端的IP地址。仅在DHCP服务器发送的ACK报文中显示,在其他报文中均显示为0。这是因为在得到DHCP服务器确认前,DHCP客户端还没有分配到IP地址。
    yiaddrDHCP服务器分配给客户端的IP地址。仅在DHCP服务器发送的Offer和ACK报文中显示,其他报文中显示为0。
    siaddr为DHCP客户端分配IP地址等信息的其他DHCP服务器IP地址。仅在DHCP Offer、DHCP ACK报文中显示,其他报文中显示为0。
    giaddr转发代理(网关)IP地址,DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址。如果没有经过DHCP中继,则显示为0。
    chaddrDHCP客户端的MAC地址。在每个报文中都会显示对应DHCP客户端的MAC地址。
    sname为客户端分配IP地址的服务器名称(DNS域名格式)。只在DHCP Offer和DHCP ACK报文中显示发送报文的DHCP服务器名称,其他报文显示为0。
    fileDHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息。仅在DHCP Offer报文中显示,其他报文中显示为空。
    options可选选项,格式为“代码+长度+数据”。
  5. 该数据包是客户端向服务器发送的DHCP Discover数据包。由于当前客户端还没有IP地址,所以源IP地址为0.0.0.0;客户端是向网络中所有服务器进行发送,使用的是广播包,所以目标IP地址为255.255.255.255。在Bootstrap Protocol(Discover)部分中显示了该数据包报文的每个字段。

    Bootstrap Protocol (Discover)
        Message type: Boot Request (1)                         		# 报文的操作类型,这是一个请求包,所以该选项的值为1
        Hardware type: Ethernet (0x01)                         		# 硬件类型为Ethernet
        Hardware address length: 6                             		# 硬件地址长度为6
        Hops: 0                                                		# 经过DHCP中继数为0
        Transaction ID: 0x597c6b82                             		# 事务ID
        Seconds elapsed: 0                                     		# 客户端启动时间
        Bootp flags: 0x0000 (Unicast)                          		# BOOTP标识字段
        Client IP address: 0.0.0.0                             		# 客户端IP地址
        Your (client) IP address: 0.0.0.0                      		# 服务器分配给自己的IP地址
        Next server IP address: 0.0.0.0                        		# 下一个服务器的IP地址
        Relay agent IP address: 0.0.0.0								# DHCP中继器的IP地址
        Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a) 	# 客户端的MAC地址
        Client hardware address padding: 00000000000000000000   	# 客户端硬件地址填充
        Server host name not given                              	# 服务器主机名
        Boot file name not given                                	# 启动文件名
        Magic cookie: DHCP                                      	# 与BOOTP兼容
        Option: (53) DHCP Message Type (Discover)               	# DHCP消息类型为53
        Length: 1
        DHCP: Discover (1)                                      	# 发现包
        Option: (61) Client identifier                          	# 客户端标识符
        Length: 7
        Hardware type: Ethernet (0x01)                          	# 硬件类型为Ethernet
        Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)     # 客户端MAC地址
        Option: (50) Requested IP Address                       	# 请求IP地址
            Length: 4
            Requested IP Address: 192.168.0.108                 	# 请求的IP地址
        Option: (12) Host Name                                  	# 客户端主机名
            Length: 15
            Host Name: WIN-RKPKQFBLG6C                          	# 主机名
        Option: (60) Vendor class identifier                    	# 供应商类标识符
            Length: 8
            Vendor class identifier: MSFT 5.0                   	# 供应商标识符为MSFT 5.0
        Option: (55) Parameter Request List                     	# 参数请求列表
            Length: 12
            Parameter Request List Item: (1) Subnet Mask       		# 子网掩码
            Parameter Request List Item: (15) Domain Name       	# 域名
            Parameter Request List Item: (3) Router             	# 路由
            Parameter Request List Item: (6) Domain Name Server 	# 域名服务
            Parameter Request List Item: (44) NetBIOS over TCP/IP Name Server   # NetBIOS名称服务
            Parameter Request List Item: (46) NetBIOS over TCP/IP Node Type     # NetBIOS节点类型
            Parameter Request List Item: (47) NetBIOS over TCP/IP Scope         # NetBIOS作用范围
            Parameter Request List Item: (31) Perform Router Discover           # 完成路由发现
            Parameter Request List Item: (33) Static Route       	# 态路由
            Parameter Request List Item: (121) Classless Static Route           # 无类静态路由
            Parameter Request List Item: (249) Private/Classless Static Route
            (Microsoft)                                          	# 私有静态路由
            Parameter Request List Item: (43) Vendor-Specific Information       # 供应商特定信息
        Option: (255) End
            Option End: 255
        Padding: 000000000000000000000000
    
  6. 该数据包是DHCP服务器收到客户端DHCP Discover广播包后返回的DHCP Offer包。报文字段信息如下:

    Bootstrap Protocol (Offer)
        Message type: Boot Reply (2)                       			# 报文的操作类型,这是一个响应包,所以该选项的值为2
        Hardware type: Ethernet (0x01)
        Hardware address length: 6
        Hops: 0
        Transaction ID: 0x597c6b82                         			# 事务ID
        Seconds elapsed: 0
        Bootp flags: 0x0000 (Unicast)
        Client IP address: 0.0.0.0
        Your (client) IP address: 192.168.0.108            			# 服务器分配给客户端的IP地址
        Next server IP address: 0.0.0.0
        Relay agent IP address: 0.0.0.0
        Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
        Client hardware address padding: 00000000000000000000
        Server host name not given
        Boot file name not given
        Magic cookie: DHCP
        Option: (53) DHCP Message Type (Offer)
            Length: 1
            DHCP: Offer (2)
        Option: (54) DHCP Server Identifier
            Length: 4
            DHCP Server Identifier: 192.168.0.1             		# DNS服务器标识地址为192.168.0.1
        Option: (51) IP Address Lease Time
            Length: 4
            IP Address Lease Time: (7200s) 2 hours
        Option: (1) Subnet Mask                             		# 服务器分配给客户端的子网掩码
            Length: 4
            Subnet Mask: 255.255.255.0                      		# 子网掩码为255.255.255.0
        Option: (3) Router
            Length: 4
            Router: 192.168.0.1
        Option: (6) Domain Name Server
            Length: 4
            Domain Name Server: 192.168.0.1
        Option: (255) End
            Option End: 255
        Padding: 000000000000000000000000000000000000000000000000...
    
  7. DHCP Request报文数据包是DHCP客户端向网络中所有DHCP服务器主机发出的DHCP Request消息。由于此时客户端还没有真正拥有IP地址,因此源IP地址仍然为0.0.0.0,该数据包是用来通知所有服务器的,以广播形式发出,因此目标IP地址为255.255.255.255。报文字段信息如下:

    Bootstrap Protocol (Request)
        Message type: Boot Request (1)                              # 报文的操作类型,这是一个请求包,所以该选项的值为1
        Hardware type: Ethernet (0x01)
        Hardware address length: 6
        Hops: 0
        Transaction ID: 0x597c6b82                                  # 事务ID
        Seconds elapsed: 0
        Bootp flags: 0x0000 (Unicast)
        Client IP address: 0.0.0.0                                  # 客户端IP地址
        Your (client) IP address: 0.0.0.0
        Next server IP address: 0.0.0.0
        Relay agent IP address: 0.0.0.0
        Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
        Client hardware address padding: 00000000000000000000
        Server host name not given
        Boot file name not given
        Magic cookie: DHCP
        Option: (53) DHCP Message Type (Request)
            Length: 1
            DHCP: Request (3)
        Option: (61) Client identifier
        Length: 7
        Hardware type: Ethernet (0x01)
        Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
        Option: (50) Requested IP Address
        Length: 4
        Requested IP Address: 192.168.0.108                         # 客户端选择租用的IP地址为192.168.0.108# 省略部分信息
    
  8. DHCP ACK数据包是DHCP服务器给客户端发送的确认数据包。报文字段信息如下:

    Bootstrap Protocol (ACK)
        Message type: Boot Reply (2)                            	# 报文的操作类型,这是一个响应包,所以该选项的值为2
        Hardware type: Ethernet (0x01)
        Hardware address length: 6
        Hops: 0
        Transaction ID: 0x597c6b82                              	# 事务ID
        Seconds elapsed: 0
        Bootp flags: 0x0000 (Unicast)
        Client IP address: 0.0.0.0
        Your (client) IP address: 192.168.0.108                 	# 客户端可以使用的IP地址为192.168.0.108
        Next server IP address: 0.0.0.0
        Relay agent IP address: 0.0.0.0
        Client MAC address: Vmware_db:3f:0a (00:0c:29:db:3f:0a)
        Client hardware address padding: 00000000000000000000
        Server host name not given
        Boot file name not given
        Magic cookie: DHCP
        Option: (53) DHCP Message Type (ACK)
            Length: 1
            DHCP: ACK (5)
        Option: (54) DHCP Server Identifier
            Length: 4
            DHCP Server Identifier: 192.168.0.1
        Option: (51) IP Address Lease Time
            Length: 4
            IP Address Lease Time: (7200s) 2 hours
        Option: (1) Subnet Mask		                                # 客户端可以使用的子网掩码
            Length: 4
            Subnet Mask: 255.255.255.0                        		# 子网掩码为255.255.255.0
        Option: (3) Router
            Length: 4
            Router: 192.168.0.1
        Option: (6) Domain Name Server
            Length: 4
            Domain Name Server: 192.168.0.1
        Option: (255) End
            Option End: 255
        Padding: 000000000000000000000000000000000000000000000000...
    

DNS协议

  1. 域名系统(Domain Name System,DNS)是将域名转化为IP地址的网络协议。当用户在浏览器中输入域名后,浏览器会向DNS服务器发送DNS请求,获取指定域名的IP地址。DNS服务器收到请求包后,会发送响应包,返回对应的IP地址。浏览器根据响应包中的IP地址,访问对应的网站。

  2. 域名(Domain Name)是用来表示Internet上某个计算机或计算机组的名称,用于在数据传输时标识计算机的地理位置。

  3. 在TCP/IP网络中,计算机要进行通信首先需要从DHCP服务器上获取IP地址,然后基于IP地址进行通信。由于IP地址是由一串数字序列组成,所以难以记忆。并且,计算机的IP地址往往不是固定的,是经常变化的。因此,直接使用IP地址进行通信有很多不便之处。为了避免这些不便,可以为每台计算机赋予唯一的名称,即域名。计算机之间可以使用域名进行通信。一个完整的域名由2个或2个以上的部分组成,各部分之间用英文的句号.来分隔,每个部分的长度限制是63个字符,域名总长度则不能超过253个字符。

  4. 域名系统采用层次结构按地理域或机构域进行分层,用小数点将各个层次隔开,从右到左依次为最高域名段、次高域名段等,最左的一个字段为主域名(主机名)。所以,域名可以按照级别和类型进行分类。

  5. 在DNS服务器上,一个域名及其下级域名组成一个区域。相关的DNS信息构成一个数据库文件。所以每个区域数据库文件都是由资源记录构成的,一个资源记录就是一行文本,提供了一组有用的DNS配置信息。

  6. 域名解析就是查询域名对应的IP地址。

    1. 客户端通过浏览器访问域名为www.baidu.com的网站,发起查询该域名的IP地址的DNS请求。该请求发送到了本地DNS服务器上。本地DNS服务器会首先查询它的缓存记录,如果缓存中有就直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
    2. 本地DNS服务器向根服务器发送DNS请求,根服务器经过查询,没有记录该域名及IP地址的对应关系。但是会告诉本地DNS服务器,可以到域名服务器上继续查询,并给出域名服务器的地址(.com服务器)。
    3. 本地DNS服务器向.com服务器发送DNS请求,.com服务器收到请求后,不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,该域名可以在baidu.com域名服务器上进行解析获取IP地址,并告诉baidu.com域名服务器的地址。
    4. 本地DNS服务器向baidu.com域名服务器发送DNS请求,baidu.com服务器收到请求后,在自己的缓存表中发现了该域名和IP地址的对应关系,并将IP地址返回给本地DNS服务器。
    5. 本地DNS服务器将获取到与域名对应的IP地址返回给客户端,并且将域名和IP地址的对应关系保存在缓存中,以备下次别的用户查询时使用。
  7. DNS分为查询请求和查询响应,请求和响应的报文结构基本相同。其中,事务ID、标志、问题计数、回答资源记录数、权威名称服务器计数、附加资源记录数这6个字段是DNS的报文首部,共12个字节。整个DNS格式主要分为3部分内容,即基础结构部分、问题部分、资源记录部分。

    1. 基础结构部分:DNS报文的基础结构部分指的是报文首部。

      部分字段描述
      事务IDDNS报文的ID标识。对于请求报文和其对应的应答报文,该字段的值是相同的。通过它可以区分DNS应答报文是对哪个请求进行响应的
      标志DNS报文中的标志字段。
      问题计数DNS查询请求的数目。
      回答资源记录数DNS响应的数目
      权威名称服务器计数权威名称服务器的数目。
      附加资源记录数额外的记录数目(权威名称服务器对应IP地址的数目)。
      标志字段QR(Response)查询请求/响应的标志信息。查询请求时,值为0;响应时,值为1。
      标志字段Opcode操作码。其中,0表示标准查询;1表示反向查询;2表示服务器状态请求。
      标志字段AA(Authoritative)授权应答,该字段在响应报文中有效。值为1时,表示名称服务器是权威服务器;值为0时,表示不是权威服务器。
      标志字段TC(Truncated)表示是否被截断。值为1时,表示响应已超过512字节并已被截断,只返回前512个字节。
      标志字段RD(Recursion Desired)期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。
      标志字段RA(Recursion Available)可用递归。该字段只出现在响应报文中。当值为1时,表示服务器支持递归查询。
      标志字段Z保留字段,在所有的请求和应答报文中,它的值必须为0
      标志字段rcode(Reply code)返回码字段,表示响应的差错状态。当值为0时,表示没有错误;当值为1时,表示报文格式错误(Format error),服务器不能理解请求的报文;当值为2时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;当值为3时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;当值为4时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;当值为5时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。
    2. 问题部分:问题部分指的是报文格式中查询问题区域(Queries)部分。该部分是用来显示DNS查询请求的问题,通常只有一个问题。该部分包含正在进行的查询信息,包含查询名(被查询主机名字)、查询类型、查询类。

      部分描述
      查询名一般为要查询的域名,有时也会是IP地址,用于反向查询
      查询类型DNS查询请求的资源类型。通常查询类型为A类型,表示由域名获取对应的IP地址
      查询类地址类型,通常为互联网地址,值为1
    3. 资源记录部分:资源记录部分是指DNS报文格式中的最后三个字段,包括回答问题区域字段、权威名称服务器区域字段、附加信息区域字段。这三个字段均采用一种称为资源记录的格式。

      部分描述
      域名DNS请求的域名。
      类型资源记录的类型,与问题部分中的查询类型值是一样的。
      地址类型,与问题部分中的查询类值是一样的。
      生存时间以秒为单位,表示资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。它同时也可以表明该资源记录的稳定程度,稳定的信息会被分配一个很大的值。
      资源数据长度资源数据的长度。
      资源数据表示按查询段要求返回的相关资源记录的数据。

Telnet协议

  1. Telnet协议是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上远程管理主机的能力。使用者在自己的电脑上使用Telnet程序连接到服务器。然后,在Telnet程序中输入命令,这些命令将会在服务器上运行,就像直接在服务器的控制台上输入一样。

  2. 为了方便对其他主机进行控制操作,远程登录成为Internet上最广泛的应用之一。Telnet提供远程登录功能。用户在本地主机上运行Telnet客户端,就可登录到远端的Telnet服务器。用户在本地输入的命令将由服务器运行,服务器把结果返回到本地。所以,Telnet的主要用途就是像操作本地计算机一样,操作远程计算机。

  3. Telnet协议工作有规范的流程,大致包括连接、执行命令和断开连接3个部分。Telnet客户端通过TCP协议的三次握手与Telnet服务器建立连接。建立连接后,需要通过用户名和密码才能远程登录到服务器。成功登录后客户端向服务器发送要执行的命令。服务器收到客户端发来的执行命令,开始执行命令,并将结果返回给客户端。客户端不再需要远程执行命令,将向服务器发送TCP断开数据包,用于撤销连接。

  4. 协商阶段是客户端和服务器之间相互请求对方,对通信过程的消息选项进行确认,明确后续消息的传送方式。协商期间,通信的过程如下:客户端向服务器发送的选项协商数据包、客户端再次发送的选项协商数据包、服务器向客户端发送的选项协商数据包、服务器再次发送选项协商数据包,并发送数据信息。

  5. Telnet认证阶段主要是服务器端对客户端的身份进行确认。客户端输入登录的用户名,对应的数据包、服务器进行回显,对应的数据包、客户端继续输入登录用户名的第2个字符、当客户端输入完所有的用户名字符以后,按回车键换行,表示用户名输入完毕、用户名输入完成后,服务器向客户端发送要求输入密码的数据包、与输入用户名一样,客户端输入密码时,每输入的一个字符都被马上发送给服务器,并得到服务器的确认,但服务器不会回显密码、客户端完成密码的输入,并按回车键后,将向服务器发送行结束数据包、服务器对完成密码输入的数据包将进行回显、密码成功输入以后,客户端将成功登录服务器。服务器将为客户端提供输入执行命令的会话模式。

  6. 命令交互阶段主要完成客户端的命令输入和服务器端的执行和回显。客户端要查询服务器的网络配置信息,需要输入命令/sbin/ifconfig。和前面一样,每输入一个字符,都会得到服务器的回显和客户端的确认。完成命令的输入以后,服务器将把命令的执行结果返回给客户端。服务器成功将命令的执行结果返回给客户端以后,再次返回会话模式,等待客户端下一个命令。如果客户端将不再执行命令,就可以断开连接了。这时,客户端将向服务器发送断开连接的TCP数据包。

  7. 行模式是指每输入一行信息并按回车键换行时,再将这行信息发送给服务器。在该模式下,服务器不会进行回显。客户端连接服务器的Telnet协议包。客户端向服务器发送的选项协商数据包、客户端再次发送的选项协商数据包、服务器向客户端发送的选项协商数据包、服务器再次发送的选项协商数据包、选项协商完成以后,服务器向客户端显示欢迎和要求用户名登录的信息、客户端输入登录的用户名数据包、客户端完成输入用户名以后,服务器不会进行回显,而是向客户端发送要求输入密码的信息、客户端输入密码,对应的数据包、成功输入用户名和密码后,客户端将登录服务器。服务器首先向客户端显示说明信息、服务器向客户端发送完说明信息后,将为客户端提供会话模式。客户端就可以在该模式下输入要执行的命令、客户端输入要执行的命令,这里输入查询服务器网络配置信息的命令、客户端完成输入的命令后,服务器向客户端返回命令的执行结果、服务器成功向客户端返回命令的执行结果后,再次进入会话模式,等待客户端下一个命令、如果客户端将不再执行命令,将向服务器请求断开连接。对应的数据包。

SNMP协议

  1. 简单网络管理协议(Simple Network Management Protocol,SNMP)是由互联网工程任务组定义的一套网络管理协议。该协议是基于简单网关监视协议(Simple Gateway Monitor Protocol,SGMP)制定的。SNMP可以使网络管理员通过一台工作站完成对计算机、路由器和其他网络设备的远程管理和监视。

  2. 利用SNMP协议可以更好地管理和监控网络。管理工作站可以远程管理所有支持该协议的网络设备,如监视网络状态、修改网络设备配置、接收网络事件警告等。

    1. SNMP v1:是SNMP协议的最初版本,在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案。
    2. SNMP v2:是1992年发布的SNMP的第二个版本。它修订了第一版,并且在性能、安全、机密性和管理者之间通信等方面进行了大量改进。
    3. SNMP v3:是目前最新的版本。它是2004年制定的,协议编号为RFC3411-RFC3418(STD0062)。它为提升协议的安全性,增加了认证和密文传输功能。
  3. Telnet协议可以用于连接远程计算机,并进行管理与控制,如远程执行命令。这种情况下,执行的命令有一定的局限性,如只能执行远程主机上支持的命令。由于网络设备越来越多,网络规模越来越大,管理这些设备也越来越重要。远程管理网络的需求日益迫切,SNMP应运而生。SNMP协议能够帮助网络管理员提高网络管理效率,及时发现和解决网络问题,对网络增长做好规划。网络管理员还可以通过SNMP协议,接收网络节点的通知消息和警告事件报告等,从而获知网络出现的问题。

  4. SNMP的架构由3部分组成,分别为社区,同一个管理框架下的网络管理站和所有节点的集合;网络管理站,一个管理控制台,也称为网络管理系统(Network Management System,NMS)。它是一台带有必要SNMP管理软件的普通计算机,主要用来管理与监控网络上的设备;节点,网络上的设备(被管理的设备)。

  5. SNMP可以用来发现、查询和监视网络中其他设备的状态信息。管理员通过NMS获取网关监控数据的工作流程,其中涉及了一些SNMP协议的关键信息。

    1. MIB(管理信息库),任何一个被管理的设备都表示成一个对象,并称为被管理的对象。而MIB就是被管理对象的集合。它定义了被管理对象的一系列属性,如对象的名称、对象的访问权限和对象的数据类型等。每个设备都有自己的MIB。MIB是一种树状数据库,MIB管理的对象,就是树的端节点,每个节点都有唯一位置和唯一名字。
    2. SNMP代理,是一种嵌入在被管理设备中的网络管理软件模块,主要用来控制本地机器的管理信息。它还负责将管理信息转换成SNMP兼容的格式,传递给NMS。当管理员查询被管理设备中的对象的相关值时,首先通过网络管理站NMS中的MIB找到相关对象;网络管理站NMS向SNMP代理申请MIB中定义对象的相关值;SNMP代理在自己的MIB库中进行查找;SNMP代理将找到的对象相关值返回给网络管理站NMS。
  6. SNMP采用特殊的客户机/服务器模式进行通信。这里的客户端指的是网络管理站NMS,服务器指的是SNMP代理。实际上它们的通信方式是网络管理站NMS与SNMP代理之间的通信。网络管理站NMS向SNMP代理发出请求,询问一个MIB定义的信息的参数值。SNMP代理收到请求后,返回关于MIB定义信息的各种查询。

  7. SNMP协议用来管理管理站NMS与SNMP代理之间的信息交互。因此,它提供了多种操作类型。

    类型描述
    get-request网络管理站NMS从SNMP代理处提取一个或多个参数值。
    get-response返回一个或多个参数的值。
    get-next-request网络管理站NMS从SNMP代理处提取一个或多个参数的下一个参数值。
    set-request网络管理站NMS设置SNMP代理处MIB的相关参数值。
    trapSNMP代理主动向网络管理站NMS发送报文消息。
    informRequestSNMP代理主动向网络管理站NMS发送报文消息,NMS进行响应。
  8. 管理信息库MIB指明了网络元素所维持的变量,即能够被管理进程查询和设置的信息。MIB给出了网络中所有可能的被管理对象集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树形结构。在管理信息库MIB中,管理对象下面会被分为若干个组。其中,mib下的分组有system组、interfaces组和at组等。

  9. 管理信息库MIB用于收集和储存管理信息(管理对象的状态和统计信息),并且能够使NMS通过SNMP代理查询对象信息或进行设置。而MIS用于定义通过SNMP协议可访问对象的规则,它定义在MIB中使用的数据类型。常用的数据类型及含义如下:

    类型描述
    Integer整数类型,有多种形式。有些整型变量没有范围限制,有些整型变量定义为特定的数值。例如,IP的转发标志只有允许转发或者不允许转发。有些整型变量定义包含特定的范围,如UDP和TCP的端口号从0~65535)。
    OCTER STRING0或多个8bit字节,每个字节值在0~255之间。
    Display String0或多个8bit字节,但是每个字节必须是ASCII码。在MIB-II中,所有该类型的变量不能超过255个字符,但可以为0个字符。
    OBJECT IDENTIFIER对象标识符
    NULL表示相关的变量没有值。例如,在get或get-next操作中,变量的值就是NULL。因为这些值还没有获取。
    IpAddress以网络序表示的IP地址。因为它是一个32位的值,所以定义为4个字节。
    PhysAddressOCTER STRING类型,代表物理地址。例如,以太网物理地址为6个字节。
    Counter以网络序表示的IP地址。它是一个32位的值,被定义为4个字节。
    Gauge非负整数,取值范围为0~4294976295(或增或减)。达到最大值后锁定,直到复位。例如,MIB中的tcpCurrEstab就是这种类型,它代表目前在ESTABLISHED或CLOSE_WAIT状态的TCP连接数。
    TimeTicks时间计数器,以0.01秒为单位递增,但是不同的变量可以有不同的递增幅度。所以在定义这种类型变量时,必须指定递增幅度。
    SEQUENCE用于列表。这一数据类型与大多数程序设计语言中的structure类似。一个SEQUENCE包括0个或多个元素,每一个元素可以是另一个ASN.1数据类型。
  10. SNMP协议中提供了多种操作类型,但是它们的报文格式主要分为两种格式。

    1. 第一种报文格式:在SNMP协议中,操作类型get-request、get-response、get-next-request、set-request或informRequest的报文格式基本是相同的。

      部分描述
      版本版本字段,写入版本字段的是版本号减1。例如,SNMP(即SNMPV1)应写入0。
      共同体字符串形式,作为网络管理站NMS和SNMP代理之间的明文口令,默认为public。
      PDU类型SNMP协议的操作类型。值为0,表示get-request操作;值为1,表示get-next-request操作;值为2,表示get-response操作;值为3,表示set-request操作;值为7,表示informRequest操作。
      请求标识管理站NMS设置的一个整数值。SNMP代理在发送get-response报文时也要返回此请求标识符。
      差错状态整数,由SNMP代理进行标注,指明有错误发生。可用的值及含义。
      差错索引当出现noSuchName、badValue或readOnly的错误时,由代理进程在回答时设置的一个整数。该数值指明引起错误的变量在变量列表中的偏移位置。
      名称MIB管理信息库中的OID。
      OID对应的值。
    2. 第二种报文格式:在SNMP协议中,trap操作类型的报文格式基本是相同的。

      部分描述
      版本版本字段。
      共同体作为管理进程和代理进程之间的明文口令,默认为public。
      PDU类型SNMP协议的操作类型。这里值为4。
      企业填入trap报文的网络设备的OID。该OID必须在1.3.6.1.4.1的节点上。
      SNMP代理地址SNMP代理的IP地址。
      trap类型trap类型可用的类型及含义。
      特定代码指明代理自定义的时间。
      时间戳指明从代理进程初始化到trap报告的事件发生所经历的时间,单位为10ms。例如,时间戳为1908表明在代理初始化后19080ms发生了该事件。
      名称MIB管理信息库中的OID。
      OID对应的值。

WHOIS协议

  1. WHOIS是用来查询域名或IP所有者信息的传输协议。它可以用来查询域名是否已经被注册,以及注册者的详细信息。WHOIS协议只是规定查询的方式,具体功能还是需要对应的程序来完成。这类程序被称为WHOIS服务。
  2. WHOIS服务是由注册商和注册局来提供,主要记录了支持的所有域名的信息。它是一个基于“查询/响应”的TCP事务服务,并向客户端提供对应的查询服务。
  3. WHOIS服务器通常由域名注册商和分销商搭建。在域名注册的时候,注册人通常将信息提交给域名注册商或其分销商。因此,用户可以从域名注册商和分销商的WHOIS服务器获取域名的相关注册信息。
  4. 由于注册申请的域名、IP地址用途及作用和种类不同,使用的WHOIS服务器也不同。常用的Internet管理机构的WHOIS服务器whois.XXX.cn
  5. 部分互联网机构只提供域名代理公司信息,不提供域名注册人信息。所以,用户需要到注册代理公司搭建的WHOIS服务器进行查询。这时需要查询域名所属的代理公司WHOIS服务器。netwox工具提供了编号197的模块,可以获取域名的基本注册信息,并猜测其WHOIS服务器。

FTP协议

  1. 文件传输协议(File Transfer Protocol,FTP)是一种提供网络之间共享文件的协议。它可以在计算机之间可靠、高效地传送文件。在传输时,传输双方的操作系统、磁盘文件系统类型可以不同。

  2. FTP协议允许TCP/IP网络上的两台计算机之间进行文件传输。而FTP服务是基于FTP协议的文件传输服务。工作时,一台计算机上运行FTP客户端应用程序,另一台计算机上需要运行FTP服务器端程序。只有拥有了FTP服务,客户端才能进行文件传输。

  3. 上述的文件传输,指的是客户端和FTP服务器端之间的文件传输,如文件上传和下载。要实现文件传输还需要满足两个条件,如下:服务器端必须开启一个TCP端口(默认为21端口),用来监听来自客户端的请求。客户端连接FTP服务器端,需要使用TCP方式。这样可以保证客户端和服务器之间的会话是可靠的。

  4. 客户端与FTP服务器端之间传输一个文件是一次完整的FTP会话。该会话包含有两个连接,分别为控制连接和数据连接。其作用如下:控制连接,客户端向FTP服务器的21端口发送连接,服务器接受连接,建立一条命令通道。FTP的命令和应答就是通过控制连接来传输的,这个连接会存在于整个FTP会话过程中。该连接主要负责将命令从客户端传给服务器,并将服务器的应答返回给客户端。所以,该连接不用于发送数据,只用于传输命令;数据连接,每当一个文件在客户端与服务器之间进行传输时,就会创建数据连接。该连接主要用来进行文件传输。

  5. 在使用FTP进行文件传输时,针对不同的文件类型,FTP提供了两种文件传输模式,分别为ASCII和二进制。这两种模式支持的文件如下:ASCII,用于传输简单的文本文件,为默认类型;二进制, 用于传输程序文件、字处理文档、可执行文件或图片。

  6. FTP与大多数Internet服务一样,使用的也是“客户端/服务器”模式。用户通过一个支持FTP协议的客户机程序,连接在远程主机上的FTP服务器程序。通过在客户端向服务器端发送FTP命令,服务器执行该命令,并将执行结果返回给客户端。由于“控制连接”的因素,客户端发送的FTP命令,服务器都会有对应的应答。FTP进行文件传输的基本工作流程。主要分为4个阶段,即建立连接阶段、身份认证阶段、命令交互阶段和断开连接阶段。

    1. 建立连接阶段:该阶段是FTP客户端通过TCP三次握手与FTP服务器端进行建立连接。客户端向FTP服务器发出建立连接请求,FTP服务器对请求进行应答。如果FTP服务器上的21端口是启用的,可以接受来自其他主机的请求,给出应答220,表示服务就绪,即告诉客户端需要的FTP服务已经准备好了。返回应答以后,FTP服务器需要客户端进行身份认证,向客户端发送身份认证请求。
    2. 身份认证阶段:身份认证是指客户端需要向FTP服务提供登录所需的用户名和密码。FTP服务器对客户端输入的用户名和密码都会给出相应的应答。如果客户端输入的用户名和密码正确,将成功登录FTP服务器,此时进入FTP会话。
    3. 命令交互阶段:在FTP会话中,用户可以执行FTP命令进行文件传输,如查看目录信息、上传或下载文件等。客户端输入要执行的FTP命令后,服务器同样会给出应答。如果输入的执命令正确,服务器会将命令的执行结果返回给客户端。执行结果返回完成后,服务器继续给出应答。
    4. 断开连接阶段:当客户端不再与FTP服务器进行文件传输时,需要断开连接。客户端向FTP服务器发送断开连接请求,服务器收到断开连接后给出相应的应答。

TFTP服务

  1. 简单文件传输协议(Trivial File Transfer Protocol,TFTP)是TCP/IP协议族中一种简单的文件传输协议,用来在客户端与服务器之间进行文件传输。

  2. TFTP基于UDP协议进行文件传输。与FTP协议不同的是,TFTP传输文件时不需要用户进行登录。它只能从文件服务器上下载或上传文件,不能列出目录。

  3. TFTP协议模式类似于客户端发送请求,服务器进行响应。由于TFTP是基于UDP协议的,而UDP数据包本身就不是很安全,即发送端发送的数据是否能成功到达接收端是不能确定的。因此,为了能够让发送端知道接收端已经接收到了发送端发来的数据包,接收端对接收到的每一个数据包都进行确认。

  4. TFTP客户端与服务器进行信息交互的过程中有5种报文类型。每种报文类型及含义如下:

    类型描述
    Read Request(RRQ)请求读取报文,表示客户端向TFTP服务器发送读取请求,希望从TFTP服务器上读取文件,即下载文件。
    Write Request(WRQ)请求写入报文,表示客户端向TFTP服务器发送写入请求,希望向TFTP服务器写入文件,即上传文件。
    Data(DATA)传输数据包报文,表示客户端与TFTP服务器之间进行文件的数据传输。
    Acknowledgment(ACK)确认报文,表示对请求读取、请求写入和传输数据包进行确认。
    Error(ERROR)差错报文,在文件传输过程中,如果出现读取和写入错误,将会产生这种数据包。
  5. 下载文件是指客户端从TFTP服务器上下载文件。本节讲解客户端如何从TFTP服务器进行文件下载,以及下载所涉及的各类型的数据包。客户端会向TFTP服务器发送请求读取(RRQ)数据包,指明要从服务器上读取的文件。如果TFTP服务器接收了该请求,将打开连接,向客户端发送请求获取的文件数据。发送的数据包是以定长512字节进行传输。如果文件数据大于512字节,将分成多个数据包进行传输。由于每个数据包都需要得到确认,所以发送的每个数据包都包含数据编号,并且从1开始进行排序。当发送的数据包小于512字节,则表示这是最后一个数据包,传输即将结束。

    1. 客户端向TFTP服务器发送读取请求(RRQ)。
    2. TFTP服务器将文件数据返回给客户端,这里是第1个数据包(DATA包),数据编号为1,大小为512字节。
    3. 客户端对发来的数据,即编号为1的DATA包进行确认。
    4. 服务器收到客户端的确认以后,继续发送第2个DATA包,数据编号为2,大小为512字节。
    5. 客户端对发来的数据,即编号为2的DATA包进行确认,向服务器发送数据编号为2的ACK包。
    6. 服务器收到客户端的确认以后,继续发送第3个DATA包,数据编号为3。此时,该数据包是文件的最后数据信息,大小小于512字节。
    7. 客户端收到服务器发来的DATA包,查看数据编号为3,并且大小小于512字节,就认为服务器已经将文件的数据信息全部发送给了自己(客户端),表示下载完成。客户端对最后的DATA数据包进行确认,向服务器发送数据编号为3的ACK包。
  6. 工作流程中涉及3种类型的数据包,即RRQ,DATA和ACK。下面介绍这三种类型数据包的报文格式。

    1. RRQ请求报文格式:RRQ类型的请求包是读取服务器上指定文件的信息。因此,该类型数据包的报文中包含了文件名字段。文件信息数据进行传输时需要指定传输模式,因此报文中还包含了模式字段。

      字段描述
      操作码表示TFTP报文类型,这里为Read Request,值为1。
      文件名位于TFTP服务器上的文件名称。
      0表示文件字段要以0字节作为结束。
      模式表示数据格式。如果为netascii时,表示主机必须将数据转换为ASCII格式;如果为octet时,表示使用8bit的字节流传输。
      0这里表示模式字段要以0字节作为结束。
    2. DATA报文格式:DATA报文是用来传输数据的,因此报文中包含了“数据”字段。由于传输的数据包往往是多个,需要添加对应的编号,因此报文中包含了“数据编号”字段。

      字段描述
      操作码表示TFTP报文类型,这里为Data Packet,值为3。
      数据编码数据包对应的编号,从1开始进行排序。
      数据传输的文件数据及大小。
    3. ACK报文格式:ACK是对每个DATA包的确认,由于每个DATA包的数据编号不同,因此该报文中包含数据编号字段。

      字段描述
      操作码表示TFTP报文类型,这里为Acknowledgement,值为4。
      数据编号用来对应DATA包中的“数据编号”字段。
  7. 上传文件指的是客户端将本地上的文件上传到TFTP服务器上。下面介绍客户端如何进行文件上传,以及上传时所涉及的各类型数据包。客户端会向TFTP服务器发送请求写入(WRQ)数据包,指明要写入的文件。如果TFTP服务器允许该文件的写入,就返回一个ACK确认包,该包的编号为0。客户端收到服务器的确认包以后,就开始向服务器写入文件。文件数据以定长512字节进行传输,与RRQ包的传输方式一样,传输的每一个文件数据包都会得到服务器返回的确认包,并且数据包的数据编号也是从1开始。

    1. 客户端向TFTP服务器发送写入请求(WRQ)。
    2. 服务器收到客户端的WRQ请求后,同意该请求,返回ACK确认包。这里的确认包的数据编号为0。
    3. 客户端收到请求的确认包以后,得知服务器已经同意文件上传。客户端开始进行文件上传,向服务器发送文件信息数据。首先发送第1个DATA包,大小为512字节,此时包的数据编号为1,因为步骤(2)中已经使用了数据编号0。
    4. 服务器收到客户端发来的数据编号为1的DATA包,并进行确认,向客户端发送数据编号为1的ACK包。
    5. 客户端收到第1个DATA包返回的ACK包后,继续向服务器发送第2个DATA包,大小为512字节,此时的数据编号为2。
    6. 服务器对第2个DATA包进行确认,向客户端发送数据编号为2的ACK包。
    7. 客户端收到第2个DATA包返回的ACK包后,继续向服务器发送第3个DATA包,大小小于512字节,此时的数据编号为3。
    8. 服务器收到发来第3个的DATA包,发现包大小小于512字节,就认为客户端已经将文件的数据信息全部发送给了自己(服务器),表示上传完成。服务器对最后的DATA数据包进行确认,向客户端发送数据编号为3的ACK包。

工具

# 安装工具的地址:https://sourceforge.net/projects/ntwox/
neywox ID options
	0															# 退出netwox工具
	3															# 搜索工具,用来搜索与指定信息相关的模块
	4															# 显示指定模块的帮助信息
	5															# 在命令行中输入指定模块的参数选项并运行
	6															# 从键盘输入指定模块的参数选项并运行
	a															# 显示信息
	b															# 显示网络协议下相关的模块
	c															# 显示应用程序协议下相关的模块
	d															# 显示与嗅探数据包相关的模块
	e															# 显示与创建和发送数据包相关的模块
	f															# 显示与进行数据包记录相关的模块
	g															# 显示与客户端相关的模块
	h															# 显示与服务器相关的模块
	i															# 显示与检测主机连通性相关的模块
	j															# 显示与路由跟踪相关的模块
	k															# 显示与扫描计算机和端口相关的模块
	l															# 显示与审计相关的模块
	m															# 显示与暴力破解相关的模块
	n															# 显示与远程管理相关的模块
	o															# 显示其他模块

neywox 1 -i														# 获取IP地址信息

# 网络访问层
netwox 169														# 显示计算机上的网络适配器信息
netwox 5 -i 192.168.59.133										# 显示局域网中指定主机的MAC地址信息
netwox 5 -i 192.168.59.0/24										# 显示局域网中所有主机的MAC地址
netwox 5 -i 192.168.59.0/24 -u									# 显示未发现主机的MAC地址的信息
netwox 4 -e 00:0C:29:CA:E4:66									# 显示该主机相关信息 
netwox 4 -e 00:0C:29:CA:E4:66 --ip								# 显示信息时只想显示IP地址信息
netwox 4 -e 00:0C:29:CA:E4:66 --host							# 显示信息时只想显示主机名信息
netwox 4 -e 00:0C:29:CA:E4:66 --title							# 显示信息时只想显示标题信息
netwox 32														# 查看以太网数据帧
netwox 32 -a 00:0c:29:c4:8a:de -b 01:02:03:04:05:06				# 构建以太帧,设置源MAC地址为00:0c,目标MAC地址为01:02
netwox 75														# 实施以太帧洪水攻击
netwox 1														# 显示网络配置信息
netwox 2														# 显示网络调试信息

# 网际层
netwox 3 -a 192.168.59.0/24										# 探测局域网中所有主机的信息
netwox 3 -a www.163.com											# 探测域名的所有主机信息
netwox 213 -i 192.168.1.32/27									# 列出包含的所有主机
netwox 24 -i 192.168.1.32/27									# 计算IP地址的掩码
netwox 38														# 构造IP数据包
netwox 38 -l 192.168.59.132 -m 192.168.12.101					# 指定源IP地址为59.132,目标IP地址为12.101
netwox 34														# 用于指定IP数据报的以太层字段信息
netwox 34 -a 00:0C:29:C4:8A:DE -b 00:0C:29:D0:21:23				# 指定以太网的源MAC地址和目标MAC地址
netwox 74 -i 192.168.59.135										# 向目标主机发送大量的IP分片实施洪水攻击

## ARP
arp -a															# 查看当前主机缓存信息
ping 192.168.59.135												# 在当前主机上与主机192.168.59.135进行通信
netwox 33														# 查看netwox所在主机默认的ARP包的相关信息
netwox 33 -i 192.168.12.102										# 构造ARP请求包,请求目标主机192.168.12.102
netwox 33 -g 192.168.59.132 -i 192.168.59.132					# 构造免费的ARP数据包,设置源IP地址和目标IP地址
ifconfig														# 查看netwox所在主机的IP地址
netwox 55 -i 192.168.59.135										# 验证目标主机是否启用arp
netwox 71 -i 192.168.59.133,192.168.59.134						# 扫描多个主机
netwox 56 -i 192.168.59.135 -I 192.168.59.160 -E A1:B2:C3:D4:E5:F6	
																# 伪造虚假地址,设置IP地址为192.168.59.160,MAC地址为A1:B2:C3:D4:E5:F6,验证目标主机192.168.59.135是否启用
netwox 72 -i 192.168.59.133,192.168.59.134,192.168.59.135 -E 00:0c:29:ca:e4:99 -I 192.168.59.125
																# 设置扫描主机的假IP地址为59.125,MAC地址为00:0c,验证多个目标主机是否启用
arping 192.168.59.136											# 在模拟之前,验证局域网中是否存在主机59.136。在主机B上使用arping命令ping该主机
netwox 73 -i 192.168.59.136 -e A1:B2:C3:D4:E5:F6				# 在主机A上伪造ARP响应,创建虚拟主机59.136,设置其MAC地址为A1:B2
netwox 80 -i 192.168.59.136 -e 00:01:01:21:22:23				# 创建虚拟主机59.136,并向该主机发送ARP响应包,设置MAC地址为00:01

## ICMP
ping 192.168.59.135												# 使用ping命令探测目标主机
netwox 65 -i 192.168.59.135										# 构造ICMP扫描
netwox 66 -i 192.168.59.135 -E 00:0c:29:ca:e4:99 -I 192.168.59.140		
																# 伪造IP地址为59.140,MAC地址为00:0c
netwox 49 -i 192.168.59.135										# 持续向目标主机发送ICMP请求
netwox 50 -i 192.168.59.135 -E aa:bb:cc:11:22:33 -I 192.168.59.150 -e 00:0c:29:ca:e4:66
																# 伪造实施主机的IP地址为192.168.59.150,MAC地址为aa:bb:cc:11:22:33,指定目标主机的MAC地址为00:0c:29:ca:e4:66,目标主机IP地址为192.168.59.135
netwox 41														# 查看基于IPv4的ICMP数据包的默认值
netwox 41 -l 192.168.59.160 -m 192.168.59.135					# 伪造源IP地址为192.168.59.160
netwox 37														# 查看ICMP包的Ehternet默认值
netwox 37 -a 11:22:33:aa:bb:cc -m 192.168.59.135 -b 00:0c:29:ca:e4:66 -o 8
																# 伪造源MAC地址为11:22:33:AA:BB:CC,指定目标IP地址为192.168.59.135,MAC地址为00:0C:29:CA:E4:66
traceroute www.qq.com											# 进行路由跟踪
netwox 57 -i 125.39.52.26										# 进行路由跟踪
netwox 58 -I 192.168.12.130 -E 00:01:02:12:13:14 -i 125.39.52.26 -e ec:17:2f:46:70:ba
																# 在主机192.168.12.106上,伪造ICMP请求包对目标125.39.52.26进行路由跟踪
netwox 81 -i 192.168.59.135										# 发送ICMP时间戳请求
netwox 83 -i 192.168.59.135										# 伪造请求超时ICMP数据包
netwox 82 -i 192.168.59.135										# 伪造目标不可达ICMP数据包
netwox 84 -i 192.168.59.135										# 伪造参数错误ICMP数据包
netwox 85 -i 192.168.59.135										# 伪造源站抑制ICMP数据包
netwox 86 -g 192.168.59.131 -c 1 -i 192.168.59.136				# 伪造重定向ICMP数据包

# 传输层
## TCP
# 建立TCP服务器端和TCP客户端
netwox 89 -P 80													# 在主机A上建立TCP服务器端,监听端口为80
netwox 87 -i 192.168.59.131 -p 80								# 在主机B上建立TCP客户端,连接TCP服务器端
netwox 87 -i 192.168.59.131 -p 80								# 当在客户端输入信息后,将被发送到服务器端
netwox 89 -P 80													# 在服务器端将会收到到客户端的信息
netwox 87 -i 192.168.59.131 -p 80								# 在服务器端输入Hello,客户端也会监听到服务器端输入的内容
# 建立远程操作的TCP服务器端和TCP客户端
netwox 93 -P 7615												# 在主机A上建立TCP远程管理服务器,并设置监听的端口为7615
ifconfig														# 查看远程管理服务器的配置信息
netwox 94 -i 192.168.59.131 -p 7615 -c "/bin/sh -c ifconfig"	# 在主机B上建立TCP客户端,并连接服务器端,然后执行命令ifconfig
# 建立TCP远程客户端(下载文件)
netwox 93 -P 7615												# 在主机A上建立TCP远程管理服务器,并设置监听的端口为7615
netwox 95 -i 192.168.59.131 -p 7615 -f "user.txt"				# 在主机B上建立TCP客户端,并连接TCP服务器,获取user.txt文件的信息
netwox 95 -i 192.168.59.131 -p 7615 -f "user.txt" -F fileuser.txt	
																# 如果用户想要保存文件内容,可以指定保存的位置
# 建立TCP远程客户端(上传文件)
netwox 93 -P 7615												# 在主机A上建立TCP远程管理服务器,并设置监听的端口为7615
netwox 96 -i 192.168.59.131 -p 7615 -f password.txt -F pass.txt	# 在主机B上建立TCP远程管理客户端,并连接服务器,将password.txt文件上传到服务器上
# 构造3次握手包
netwox 42 -x -s 192.168.59.131 -d 192.168.59.135 -S 443 -D 8080 -n 2			
																# 在主机A上构造第1次握手包,连接主机B的8080端口
netwox 42 -x -s 192.168.59.135 -d 192.168.59.131 -S 8081 -D 443 -n 3				
																# 为了干扰判断,这时就可以在主机B上构造第2次握手包了
netwox 42 -x -s 192.168.59.131 -d 192.168.59.135 -S 443 -D 8080 -n 4		
																# 在主机A上构造第3次握手包

# 构造TCP Ping包实施扫描
netwox 51 -i 192.168.59.135										# 判断目标主机192.168.59.135是否启用
netwox 51 -i 192.168.59.135 -p 5352								# 如果目标主机开放的不是80端口,就需要指定其他端口号。例如,基于5352端口,判断目标主机是否开启
netwox 52 -i 192.168.59.135 -p 81 -E ab:bc:cd:12:23:34 -I 192.168.59.150 -e 00:0c:29:ca:e4:66
																# 在主机192.168.59.131上伪造TCP Ping包,尝试访问目标主机的81端口
															
# TCP协议应用——扫描TCP端口
netwox 67 -i 192.168.59.156 -p 20-25							# 在主机192.168.59.133上进行实施TCP端口扫描,探测目标主机192.168.59.156的端口开放情况判断端口20~25的开放情况
netwox 67 -i 192.168.59.156 -p 81								# 判断端口81的开放情况
netwox 68 -i 192.168.59.156 -p 20-25 -E 11:22:33:44:55:66 -I 192.168.59.136
																# 在主机192.168.59.133上构造TCP扫描包,探测目标主机192.168.59.156的端口开放情况。伪造IP地址为192.168.59.136,MAC地址为11:22:33:44:55:66,判断端口20~25的开放情况
netstat -l														# 已知主机A的IP地址为192.168.59.135,主机B的IP地址为192.168.59.131。在主机192.168.59.135上实施防御扫描。查看主机A当前监听的端口
netwox 79 -i 192.168.59.135 -p 1-5226,5230-65535				# 干扰主机B,使主机B认为除了上述3个端口以外,其他端口都是开放状态
netwox 67 -i 192.168.59.135 -p 21,25,53,80,443					# 目标主机B对主机A进行扫描,例如,对端口21、25、53、80、443进行扫描
iptables -P INPUT DROP											# 为了能够使netwox工具起到干扰作用,需要在目标主机上内核防火墙中进行配置,丢弃接收的数据包
iptables -P INPUT ACCEPT										# 如果继续接收进入的数据包
# 探测防火墙
netwox 76 -i 192.168.59.133 -p 2355								# 向目标主机端口2355发送TCP[SYN]包,探测是否有防火墙
netwox 76 -i 192.168.59.133 -p 49213							# 对目标主机进行洪水攻击
# 跟踪路由
netwox 59 -i 125.39.52.26										# 构造TCP包进行路由跟踪
netwox 60 -i 125.39.52.26 -E aa:bb:cc:dd:11:22 -I 192.168.12.140 -e ec:17:2f:46:70:ba
																# 伪造源IP地址为192.168.12.140,MAC地址为aa:bb:cc:dd:11:22
# 检测网络性能
netwox 155 -P 5228												# 将主机A设置为TCP服务器端,监听的端口为5228
netwox 156 -p 5228 -i 192.168.59.135							# 将主机B设置为TCP客户端,并连接TCP服务器端
# 干扰连接
netwox 89 -P 80													# 在主机A上建立TCP服务器端,并发送消息ni hao
netwox 87 -i 192.168.59.156 -p 80								# 在主机B上建立TCP客户端,并回复消息hao
netwox 78 -i 192.168.59.156										# 在主机C上使用netwox重置TCP会话,指定服务器端IP地址
netwox 89 -P 80													# 当在TCP服务器端再次向TCP客户端发送消息时,则TCP会话中断
netwox 77 -i 192.168.59.135 -p 5228								# 检查目标主机是否存在TCP序列号预测漏洞

## UDP
# 分析UDP数据包
netwox 90 -P 80													# 在主机A上建立UDP服务器,设置监听端口为80
netwox 88 -i 192.168.59.135 -p 80								# 在主机B上建立UDP客户端,连接UDP服务器端80端口
netwox 88 -i 192.168.59.135 -p 80								# 与UDP服务器端进行通信,在客户端输入hi
netwox 90 -P 80													# 在服务端可以看到客户端发来的消息如下
netwox 90 -P 80													# 当服务器向客户端发送消息时,使用的也是UDP协议。例如,在服务器端回复客户端,输入hello
# 构造UDP包
netwox 39														# 直接运行并查看基于IPv4的UDP包
netwox 39 -l 192.168.59.160 -m 192.168.59.135 -o 443 -p 8080	# 基于IPv4伪造UDP数据包,伪造源IP地址为192.168.59.160,源端口为443。向目标主机192.168.59.135的8080端口发送UDP数据包
netwox 35														# 不使用选项直接运行查看基于Ethernet和IPv4的UDP包
netwox 35 -a 00:11:22:aa:bb:cc -b 00:0c:29:ca:e4:66 -m 192.168.59.135 -o 443 -p 8080
																# 基于Ethernet和IPv4伪造UDP包。伪造MAC地址为00:11:22:aa:bb:cc,源端口为443。向目标主机192.168.59.135(其MAC地址为00:0c:29:ca:e4:66)的8080端口发送UDP数据包
# 扫描主机和端口
netwox 53 -i 192.168.59.135 -p 68								# 判断目标主机是否启用,68端口是否开放
netwox 54 -i 192.168.59.135 -p 68 -E 1a:2b:3c:a1:b2:c3 -I 192.168.59.170 -e 00:0c:29:ca:e4:66
																# 在进行发送UDP Ping包对目标主机进行扫描时,为了避免被发现可以进行伪造UDP Ping包。设置假的源IP地址和MAC地址。例如,伪造源IP地址为192.168.59.170,源MAC地址为1a:2b:3c:a1:b2:c3
netwox 69 -i 192.168.59.135 -p 20-25							# 判断端口20-25的开放情况
netwox 70 -i 192.168.59.135 -p 75-80 -E 10:20:30:40:50:60 -I 192.168.59.150
																# 在批量扫描端口时,为了避免被发现,可以进行伪造UDP包,如设置假的源IP地址和MAC地址。例如,伪造源IP地址为192.168.59.150,源MAC地址为10:20:30:40:50:60
# 路由跟踪
netwox 61 -i 125.39.52.26										# 构造UDP包进行路由跟踪
netwox 62 -i 125.39.52.26 -E aa:bb:cc:dd:11:22 -I 192.168.12.150 -e ec:17:2f:46:70:ba
																# 在进行路由跟踪时为了防止被发现,可以伪造源IP地址和MAC地址。设置源IP地址为192.168.12.150,MAC地址为aa:bb:cc:dd:11:22,进行路由跟踪
# 网络性能测试
netwox 157 -p 8080												# 将主机A设置为UDP服务器端,监听的端口为8080
netwox 158 -p 8080 -i 192.168.59.135							# 将主机B设置为UDP客户端,并连接UDP服务器端

## DHCP
# 获取IP地址
netwox 171														# 模拟DHCP客户端从DHCP服务器获取IP地址
netwox 171 -e 01:02:03:a1:a2:a3									# 从DHCP服务器上获取IP地址时,为了隐藏真实的MAC地址,可以伪造虚假MAC地址。例如,设置假MAC地址为01:02:03:A1:A2:A3
# 获取DHCP服务器信息
netwox 179														# 获取DHCP服务器详细的网络配置信息
netwox 179 -i 192.168.59.150 -e b1:b2:b3:0a:1a:3a				# 为了验证该命令发送的数据包,下面通过抓包进行查看,如图8.14所示。在获取DHCP服务器信息时,为了避免被发现,可以伪造IP地址和MAC地址。例如,设置IP地址为192.168.59.150,MAC地址为b1:b2:b3:0a:1a:3a

## DNS
# 实施DNS查询请求
netwox 102 -i 192.168.59.2 -n baidu.com -y a					# 已知一个DNS查询服务器的IP地址为192.168.59.2,通过该DNS服务器查询域名baidu.com的IP地址信息
netwox 162.248.241.94											# 已知拥有BIND软件的DNS服务器的IP地址为162.248.241.94,获取该服务器的版本信息
# 伪造DNS服务器
netwox 104 -h baidu.com -H 110.111.112.113 -a 123.baidu.com -A 56.67.78.89
																# 伪造域名baidu.com的DNS服务器,伪造该域名对应的IP地址为110.111.112.113,该域名的权威名称服务器为123.baidu.com,对应的IP地址为56.67.78.89
netwox 102 -i 192.168.59.133 -n baidu.com -y a					# 请求域名baidu.com对应的IP地址
# 伪造DNS响应
arpspoof -i eth0 -t 192.168.59.135 192.168.59.2					# 已知主机A的IP地址为192.168.59.133,主机B的IP地址为192.168.59.135。下面介绍主机A对主机B实施ARP攻击,在主机A上监听主机B的DNS请求,并伪造DNS响应。主机A对主机B实施ARP攻击
netwox 105 -h www.baidu.com -H 101.102.103.104 -a 123.baidu.com -A 55.66.77.88
																# 在主机A上监听主机B的DNS请求包,并伪造DNS响应,使其返回指定的DNS响应。例如,设置DNS响应包域名[www.baidu.con](http://www.baidu.con) 对应的IP地址为101.102.103.104,权威名称服务器123.baidu.com对应的IP地址为55.66.77.88
																
## Telnet
telnet <hostname>
	1opn														# 建立到远程主机的Telnet连接,子命令后跟主机名称或IP地址。
    close														# 关闭现有的Telnet连接。
    display														# 查看Telnet客户端的当前设置。
    mode														# 设置文件传输模式。其中,ASCII的文件传输模式适用于传输文本文件,而二进制的文件传输模式适用于其他类型的文件,如可执行文件、图片。
    send														# 向远程计算机发送特殊的Telnet协议指令序列,如终止指令序列、中断指令序列或文件结束指令序列。
    set															# 对Telnet客户端进行设置。
    status														# 显示状态信息。
    environ														# 设置环境变量。环境变量可以被操作系统用来提供特定的用户或计算机信息。
    logout														# 注销远程用户并关闭连接。
    quit														# 退出Telnet程序。
    unset														# 取消对Telnet客户端的设置。
    toggle														# 切换操作参数。
    z															# 暂停Telnet登录。
    ?															# 显示帮助信息。
netwox 170 -l sm -w 123											# 在主机A上建立Telnet服务,设置Telnet服务的用户名为sm,密码为123
netwox 99 -i 192.168.59.135										# 在主机B上建立Telnet客户端,并连接服务器
netwox 100 -i 192.168.59.135 -l sm -w 123 /sbin/ifconfig		# 已知Telnet服务器的IP地址为192.168.59.135,Telnet服务器的登录用户名为sm,密码为123。远程登录该Telnet服务器并执行命令查看服务器的网络配置信息
netwox 101 -i 192.168.59.135 -L sm -w /password.txt				# 进行密码暴力破解

## SNMP
# 构建SNMP Get请求
netwox -q OID -i IP												# Get请求表示网络管理站NMS要从SNMP代理处获取被管理设备上的一个或多个参数值。netwox工具中编号为159的模块可以实现SNMP Get请求功能,它可以向SNMP服务设备发送Get请求,获取指定参数的值,-q选项用来指定对象标识符,表示要获取该标识符对应的值;-i选项用来指定SNMP服务地址。
netwox 159 -q ".1.3.6.1.2.1.1.1.0" -i 199.58.200.68				# 获取系统基本信息
# 构建SNMP Walk请求
netwox -q OID -i IP												# Walk请求与Get请求类似,实际上是一个Get-next-request请求。区别在于,Walk请求是获取对象标识符在系统树中所处位置的下一个对象标识符,并请求参数值。netwox工具中编号为160的模块实现了SNMP Walk请求功能,它可以向SNMP服务设备发送Walk请求,获取指定对象标识符的下一个对象标识符。其中,-q选项用来指定对象标识符,表示要获取该标识符的下一个对象标识符;-i选项用来指定SNMP服务地址。
# 构建SNMP Trap请求
netwox 161 -i IP -r OID -a IP -s Traptype -z timestamp -n OID -t OIDtype -V oidvalue
																# 构建SNMPv1版本的Trap请求netwox工具编号为161的模块实现了SNMPv1版本的Trap请求功能其中,-i选项用来指定远程主机服务(网络管理站NMS)的地址;-r选项用来指定报文的网络设备的OID(报文中的企业字段);-a选项用来指定SNMP代理的IP地址;-s选项用来指定Trap类型;-z选项用来指定时间戳;-n选项用来指定要告诉网络管理站NMS,发生事情的OID;-t选项用来指定OID类型;-V选项用来指定OID对应的值。
netwox 161 -i "182.16.184.190" -r ".1.3.6.1.4.1.3.1" –a "192.168.59.133" -s "3" -z "0" -n ".1.3.6.1.2.1.1.1.0" -t "s" -V "APC Web/SNMP Management Card"	
																# 构建SNMP Get请求,设置企业对象OID为.1.3.6.1.4.1,通知网络管理站NMS,OID.1.3.6.1.2.1.1.1.0对应的值为APC Web/SNMP Management Card。
netwox 162 -i IP -r OID -z timestamp -n OID -t OIDtype -V oidvalue	
																# 构建SNMPv2版本的Trap请求netwox工具中编号为162的模块实现了SNMPv2版本的Trap请求功能其中,-i选项用来指定网络管理站NMS的地址;-r选项用来指定报文中企业字段的OID;-z选项用来指定时间戳;-n选项用来告诉网络管理站NMS,发生事情的OID;-t选项用来指定OID类型;-V选项用来指定OID对应的值。
netwox 162 -i "182.16.184.190" -r ".1.3.6.1.4.1.3.1" -z "0" -n ".1.3.6.1.2.1.1.1.0" -t "s" -V "APC Web/SNMP Management Card"
																# 构建SNMPv2版本的Trap请求
# 构建SNMP Inform请求
netwox 163 -i 198.13.107.218 -r ".1.3.6.1.4.1" -z "0" –n ".1.3.6.1.2.1.1.1.0" -t "s" -V "SNMP Management"
																# 构建Inform请求,指定OID.1.3.6.1.2.1.1.1.0对应的值为SNMP Management
# 构建SNMP Set请求
netwox 164 -i IP -n OID -t OIDtype -V oidvalue					# 通过发送Get请求或Walk请求获取远程设备指定参数的值,实际上是获取远程设备中管理信息库MIB指定OID的值。为了方便对远程设备上MIB中的OID值进行管理,用户可以通过Set命令,改变设备的配置或控制设备的运转状态。netwox工具提供了编号为164的模块,用于构建SNMP Set请求,设置远程设备中MIB中的OID的值。其中,-i选项指定远程设备的IP地址,-n选项指定要设置的MIB中OID的值,-t选项指定OID类型;-V选项指定OID对应的值。
netwox 164 -i "182.16.184.190" -n ".1.3.6.1.2.1.1.1.0" –t "s" -V "Linux snmp 2.6.39 #1 SMP PREEMPT"
																# 已知远程设备的IP地址为182.16.184.190,在主机192.168.59.133上构建SNMP Set请求,设置远程主机MIB中OID.1.3.6.1.2.1.1.1.0的值为Linux snmp 2.6.39#1 SMP PREEMPT。构建SNMP Set请求
		
## WHOIS
netwox 197 -q kali.org											# 获取域名kali.org的WHOIS信息,并猜测代理服务商的WHOIS服务器
netwox 196 -i "whois.no-ip.com" -q "kali.org"					# 已知域名kali.org注册商的WHOIS服务器为whois.no-ip.com,从该服务器上获取域名kali.org的WHOIS信息

## FTP
# 验证工作流程
ftp																# 已知FTP服务器的IP地址为192.168.59.135。使用一个主机作为FTP客户端与FTP服务器进行文件传输。这里查看FTP服务器上目录content中的信息
open 192.168.59.135                  							# 客户端请求建立连接
dir content                                         			# 客户端执行的命令
quit                                                            # 客户端指定的断开FTP子命令

# 基本使用
netwox 168 -l login -L password									# 在主机上构建一个FTP服务器
netwox 174 -i <IP> -F <file> -m <MD5> -u <login> -a <password>	# 下载文件及校验
netwox 111 -i <IP> --dir <file.txt> -u <login> -a <password>	# 列出FTP服务器上目录列表信息
netwox 112 -i <IP> -F <file1.txt> -f <file2.txt> -u <login> -a <password>	
																# 下载文件
netwox 113 -i <IP> -f <file1.txt> -F <file2.txt> -u <login> -a <password>
																# 上传文件
netwox 114 -i <IP> -F <file> -u <login> -a <password>			# FTP删除文件
netwox 114 -i <IP> -F <DIR1> -f <DIR2> -u <login> -a <password>	# 下载目录
netwox 116 -i <IP> -f <DIR1> -F <DIR2> -u <login> -a <password>	# 上传目录
netwox 117 -i <IP> -F <DIR> -u <login> -a <password>			# 递归删除目录
netwox 130 -i <IP> -l <user.file> -w <pass.file>				# 暴力破解FTP服务

## TFTP
netwox 167														# 它可以构建TFTP服务器,允许用户完成简单的文件传输任务
netwox 165 -i IP -F file1 -f file2								# 从TFTP服务器上下载指定的文件
netwox 176 -i IP -F file -s MD5									# 它可以从TFTP服务器上下载指定文件并检查文件的MD5值
netwox 166 -i IP -f file1 -F file2								# 可以将客户端的文件上传到TFTP服务器上

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值