精华内容
下载资源
问答
  • 网络协议分析

    千次阅读 2021-01-02 17:48:51
    (3)协议不可达:与TCP或更高层协议有关 (4)端口不可达:与TCP/UDP协议端口有关 QoS流量标记网络层有哪几种?链路层有哪几种 1)网络层 IP优先级 DSCP 2)链路层 CoS(ISL,802.1Q) MPLS EXP bits Frame Reley ...
    • PPP帧中协议字段的取值及含义
      LCP:C021
      PAP:C023
      CHAP:C223
      IPCP:8021

    • LCP功能与报文对应关系、对应代码
      Configure-Ack:选项可识别可接受,2
      Configure-request:发起链路建立和配置,1
      Configure-Nak:选项可识别不可接受,3
      Configure-Reject:选项不可识别不接受,4

    • 幻数Magic Number的作用
      防止环路,报文幻数总是相同则出现回路

    • 两个链路终止报文
      Terminate-request:发起终止链路
      Terminate-ack:终止响应

    • 三个链路维护报文
      Code-Reject:无法识别报文“类型”字段
      Procotol-reject:无法识别报文“协议”字段
      Echo-request、Echo-reply:用于链路质量和性能测试

    • 认证协议PAP、CHAP
      PAP,发送Authticate-request(1)报文认证,认证成功返回Authenticate-ACK(2),否则返回Authenticate-nak(3)。两次握手,明文传输,不能抵抗重放、窃听攻击
      CHAP,发送Challenge(1)报文认证,返回报文response(2),认证成功返回success(3),否则返回failure(4)。三次握手,密文传输,挑战机制,可抵御重放、窃听攻击

    • PPPoE协议发起阶段流程
      发起,提供,请求,确认
      1)发起,即客户端通过广播请求以获取可用的AC
      2)提供,在收到请求后,若AC可以提供服务,则返回该报文
      3)请求,如果客户端收到来自多个AC的应答,则必须从中选择一个并向该AC发出请求
      4)确认,收到请求的AC向客户端返回确认,从而建立ppp连接及会话

    • IP地址分类、网络地址、定向广播地址、有限广播地址、回送地址、私有地址
      A:1.0.0.0-126.255.255.255
      B:127.0.0.01-191.255.255.255
      C:192.0.0.0-223.255.255.255
      D:224.0.0.0-239.255.255.255
      网络地址:主机号全为0
      定向广播地址:主机号全为1
      有限广播地址:255.255.255.255
      回送地址:首字节为127的地址
      私有地址:10.0.0.0-10.255.255.255、172.16.0.0-172.31.255.255、192.168.0.0、192.168.255.255

    • 大端点机和小端点机
      大端点机:低地址存高字节
      小端点机:低地址存低字节

    • 为什么要进行地址转换
      必须根据IP地址找到物理地址才能进行实际的数据传送

    • 如何进行地址转换
      直接映射 or 动态绑定

    • ARP的基本思想
      广播请求,单播回应

    • 以太网帧格式,类型字段常用值(ARP、IP)
      ARP:0806h、IP:0800h

    • ARP报文格式
      物理网络类型:物理网络的类型(以太网用1标识)
      协议类型:上层协议的类型(IP网络用0800h标识)
      物理地址长度和协议地址长度:物理地址和上层地址的长度(以太网物理地址长度为6,IP地址长度为4)
      操作字段:指明请求还是响应:1标识请求,2表示响应

    • RARP用途
      物理地址到IP地址的映射,无盘工作站

    • arp命令参数及含义
      -a:列出arp缓存中所有条目
      -a inet_addr:列出与inet_addr对应的条目
      -d inet_addr:删除与inet_addr对应的条目
      -s inet_addr eth_addr:在ARP缓存中添加一个条目

    *ARP几种攻击方式及其特点
    1)仿冒网关:攻击者发送伪造的网关ARP报文,欺骗同网段内的其它主机
    2)欺骗网关:攻击者伪造虚假的ARP报文,欺骗网关
    3)欺骗终端用户:攻击者伪造虚假的ARP报文,欺骗相同网段内的其他主机。
    4)ARP泛洪攻击:攻击者伪造大量不同ARP报文在同网段内进行广播,导致网关ARP表项被占满,合法用户的ARP表项无法正常学习,导致合法用户无法正常访问外网

    • ARP攻击防御的三个控制点及其方法
      1)网关防御
      合法ARP绑定,防御网关被欺骗
      ARP数量限制,防御ARP泛洪攻击
      2)客户端防御
      绑定网关信息
      3) 接入设备防御
      网关IP/MAC绑定,过滤掉仿冒网关的报文
      合法用户IP/MAC绑定,过滤掉终端仿冒报文
      ARP限速

    • 简单说明 ARP 欺骗的过程。
      欺骗者向主机 A 发送一个伪造的 ARP 响应,告诉主机 A 主机 B 的 IP 地址和MAC 地址,于是主机 A 将这个对应关系写入自己的 ARP 缓存表中,以后当主机 A向主机 B 发数据时都会将数据发给欺骗者,同样的告诉主机 B 主机 A 的 IP 地址和 MAC 地址,主机 B 也会将数据发送给欺骗者,至此欺骗者就控制了 A 和 B 之间的流量,他可以选择被动的检测流量获取密码和其他涉密信息,也可以伪造数据,改变 A 和 B 的通信内容。

    • IP数据包中所携带的数据对应的协议字段值
      UDP:17
      IGMP:2
      ICMP:1
      TCP:6

    • IP层特点和主要功能
      IP层特点
      1)提供了一种无连接的投递机制
      2)不保证数据包传输的可靠性
      3)提供了尽最大努力的投递机制
      4)点到点
      IP层的主要功能
      (1) 无连接数据报的投递(数据结构,静态特性)
      (2) 数据报寻径(选路,操作特性)
      (3) 差错与报文控制(管理特性)

    • IP首部格式各字段含义和作用
      版本:用于标识IP协议的版本
      首部长度
      服务类型·:规定数据报的处理方式
      标识:用于数据包分片与重组
      标志和片偏移量:对分片和重组进行控制
      寿命:TTL,允许数据报经过的路由器个数
      首部校验和:保证数据包首部在传输过程中的完整性

    • IP分片
      标识:信源机产生,每个数据报唯一,标识同一数据报的各个分片
      DF (Do not Fragment):不分片位,DF=1,强制不允许分片
      MF (More Fragment):片未完位,MF=0,是最后一片,MF=1,不是最后一片
      片偏移:标识分片在原来数据报文中的位置,解决了分片的顺序

    • IP选项(记录路由、严格源路由、宽松源路由、时间戳)
      记录路由选项:当源主机希望得知到达目的主机所经过的路由器时,可以使用记录路由选项
      源路由选项:信源机规定的数据报必须经过的路径,用于测试某特定路径,绕开某危险网络等。
      严格源路由指定了一条完备路径,宽松源路由则指明了路径要点
      时间戳选项:用于记录路由器收到数据报的时间,分析网络系统吞吐率、拥塞、负载、时延等
      代码值
      记录路由:7
      时间戳:68
      严格源路由:137
      宽松源路由:131

    • ping命令常用参数
      ping –r:记录路由
      ping –s:时间戳
      ping –j:宽松源路由
      ping –k:严格源路由

    • 源路由攻击以及几种分片攻击的原理
      源路由攻击
      原理:截获数据包后,改变包中的路由选项,把数据包路由到可控的路由器上
      分片攻击
      (1) Tiny Fragment:发送极小分片,让TCP报头的端口号包含在第二个分片中,绕过防火墙或者IDS过滤系统。(nmap -f)
      (2) Ping of Death:发送长度超过65535的IP报(封装了ICMP Echo Request包),目标主机重组分片时会造成事先分配的65535字节缓冲区溢出,系统通常会崩溃或者挂起。
      (3) teardrop:第二个IP分片偏移量小于第一个分片结束的位置,出现重叠。

    • ICMP报文类型有哪几种
      (1)请求与应答报文
      (2)差错报告报文
      (3)控制报文

    • 回送请求与应答、目的不可达、超时、参数问题、路由重定向类型值
      回送请求:8
      回送应答:0
      获取子网掩码:17
      获取时间戳:13
      路由重定向:5
      超时报告:11
      参数出错:12
      目的不可达:3

    • windows中tracert和linux中traceroute工作原理
      ICMP超时报文 + IP首部的TTL
      (1) 发送IP数据报,TTL = 1,则到达第一个路由器后TTL = 0,该路由器向源端发送ICMP超时报文,该报文封装在IP数据报中,源端收到该报文后提取IP首部的IP地址字段,则记录了第一个路由器。
      (2) 发送IP数据报,TTL = 2,记录第二个路由器。

    • 目的不可达有哪几种
      (1)网络不可达:选路失败
      (2)主机不可达:投递失败
      (3)协议不可达:与TCP或更高层协议有关
      (4)端口不可达:与TCP/UDP协议端口有关

    • 根据抓获的报文,简单描述路由重定向过程。
      路由重定向表示将你原来在转发列表中发向一台路由的路径改成另外一条路径,也就相当于让你的数据走另外一条路到服务器。当一个路由出现问题的时候,会自动重定向到另外一个路由上去,保证你的数据畅通。

    • 降低时延的方法有哪些?
      升级带宽(最好但需要花费更多资金)
      优先转发重要数据
      重新分配重要数据的优先级
      二层帧压缩
      IP数据包头部压缩

    • TCP慢启动和拥塞避免过程。
      慢启动:新连接开始或拥塞解除后,都仅以一个报文作为拥塞窗口cwnd的初始值,此后,每收到一个确认,cwnd增加一个MSS
      拥塞避免:窗口的所有报文段都被确认后,才将cwnd增加一个MSS,这样,拥塞窗口swnd按线性规律缓慢增长,比慢启动算法的拥塞窗口增长速率缓慢的多

    • 分析TCP协议建立连接为什么使用3次握手,而不使用2次握手。

    • TCP几种端口扫描过程
      ① 全连接扫描
      扫描主机用三次握手与目的机指定端口建立正规连接。
      ② 半开扫描(SYN扫描)
      (1)发SYN报文到目的主机的目标端口
      (2)若目标返回SYN+ACK,则端口开放,否则回RST
      (3)若端口开放,则发送RST给目标,从而终止连接
      ③ Fin扫描
      (1)发送FIN报文到目标主机的目标端口
      (2)若返回RST,则端口关闭,否则端口打开

    • 网络质量存在哪些问题?
      缺少带宽
      端到端时延
      延时抖动
      数据包丢失

    • 要实现可靠的数据流传输服务,必须解决哪几个问题?
      1.可靠性:
      ①防丢失:确认与重传;
      ②防重复:报文段序号;
      2.传输效率、流量控制:滑动窗口机制;
      3.拥塞控制:加速递减与慢启动技术;
      4.建立连接:三次握手协议;
      5.关闭连接:改进的三次握手协议。

    • 可靠传输服务有哪些特点?
      ① 面向数据流;
      ② 虚电路连接;
      ③ 有缓冲的传输;
      ④ 无结构的数据流;
      ⑤ 全双工连接。

    • TCP拥塞控制技术有哪几种?及拥塞控制过程
      ① 拥塞窗口cwnd
      ② 加速递减技术
      ③ 慢启动技术

    • 滑动窗口
      允许发送方不必等确认到来就可继续发送下面的分组,但规定一个上限。若多个分组的确认未到时,则暂停发送。
      (1)数据流的各字节被编上序号。
      (2) TCP的滑动窗口按字节操作而不是按报文段或分组操作。
      (3) TCP窗口大小为字节数。最大为65535字节。
      (4)通信双方都设有发送和接收缓冲区(相当于发送窗口和接收窗口)。默认大小各系统有差异,如4096、8192、16384等。发送缓冲区大小为默认窗口大小。
      (5) TCP连接两端各有两个窗口(发送窗口和接收窗口)

    • 糊涂窗口综合症
      接收方的小窗口通告造成发送方发送一系列小的报文段,严重浪费网络带宽。

    • IP优先级的用途
      普通:0
      表示语音数据:5
      表示EIGRP报文:6
      表示语音控制:3

    • QoS工作模式有哪几种
      进入端口
      IP优先级
      DSCP
      源IP和目的IP
      应用

    • QoS中标记技术有哪两种
      网络层
      IP优先级
      DSCP
      链路层
      CoS(ISL,802.1Q)
      MPLS EXP bits
      Frame Reley DE bit

    • RED有三种工作模式
      不丢弃
      随机丢弃
      全部丢弃

    • QoS流量标记网络层有哪几种?链路层有哪几种
      1)网络层
      IP优先级
      DSCP
      2)链路层
      CoS(ISL,802.1Q)
      MPLS EXP bits
      Frame Reley DE bit

    • 为什么要使用多播
      提高效率:控制网络流量,降低服务器和CPU负载
      性能优化:消除流量冗余
      分布式应用程序:使多点应用程序成为可能

    • PIM dense模式和sparse模式工作过程
      dense:当路由器收到从源S到群组的数据包时,首先在单播路由表中检查到达接口是否为向S发送单播数据包时的输出接口,如果是,路由器把该数据包从所有没收到剪枝消息的接口发送出去,否则数据包被丢弃并向数据包到达接口发送剪枝消息。如果所有的接口都被剪枝,则通过数据包到达接口发送剪枝消息。
      sparse:源节点把组播数据包封装在单播数据包中并发送给RP,源节点并不需要知道组成员的消息,只需获得RP地址。RP收到数据包后,取出其中的数据,向组播树的所有接口进行转发。

    • FTP的工作原理是什么?控制连接和数据连接的用途及区别是什么?
      Port
      FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
      Passive
      在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,通过三次握手建立通道,然后FTP服务器将通过这个端口进行数据的传送。
      控制连接从进程用于对应控制连接,用于传输命令,数据连接从进程对应数据连接,负责传输数据。

    • FTP数据结构有哪几种
      文件式结构:文件中没有内部结构,文件被看作是二进制流;
      记录结构:文件是由一系列记录组成的;
      页结构:文件是由不同的索引页组成的。

    • FTP常用命令(USER,PASS,ACCT,CWD,CDUP,QUIT,PORT,PASV)
      用户名(USER)
      口令(PASS)
      ACCOUNT (ACCT)
      改变工作目录(CWD)
      回到上一层目录(CDUP)
      重新初始化(REIN)
      退出登录(QUIT)
      数据端口(PORT)
      被动(PASV)

    • FTP传输模式有哪几种
      FTP应答值第一位代表的含义
      1yz 确定预备应答
      请求的操作正在被初始化;在进入下一个命令前等待另外的应答。这类响应用于说明命令被接受,在实现中如何同步监视有困难,用户进程现在可以关注数据连接了。服务器FTP进程对第个命令几乎都返回1yz响应。
      2yz 确定完成应答
      要求的操作已经完成,可以执行新命令。
      3yz 确定中间应答
      命令已接受,但要求的操作被停止,停止接收更新的信息。
      4yz 暂时拒绝完成应答
      未接受命令,要求的操作未执行,但错误是临时的,过一会儿可以再次发送消息。用户应该返回命令序列的开始。这个暂时可是不好确定,此命令的意思就是让用户进程再次尝试使用此命令。
      5yz 永远拒绝完成应答
      它与暂时拒绝完成应答的区别就在于错误条件是一时半会不会消失。

    展开全文
  • linux网络协议分析 linux网络协议分析 linux网络协议分析
  • 网络协议分析总结

    2020-12-07 20:46:25
    网络协议分析 ARP协议 协议格式 工作原理 TCP/IP协议簇的层次及OSI/RM模型的网络层次及各层的主要作用及各层的主要协议 TCP/IP协议簇的层次 物理层: 数据链路层 网络层 传输层 应用层 OSI七层参考模型 ISO/OSI参考...

    网络协议分析
    ARP协议
    协议格式
    工作原理
    TCP/IP协议簇的层次及OSI/RM模型的网络层次及各层的主要作用及各层的主要协议
    TCP/IP协议簇的层次
    物理层:
    数据链路层
    网络层
    传输层
    应用层
    OSI七层参考模型
    ISO/OSI参考模型与TCP/IP协议模型中各层的对应关系
    面向连接、无连接的最主要区别;哪些协议是面向连接的?哪些协议是无连接的?
    TCP协议首部各字段含义及作用
    TCP的特点及工作原理
    工作原理
    TCP的流量控制机制
    IP报文首部信息各字段及各字段的作用
    OSI参考模型中,各层的数据传输单元
    ICMP的两大应用Ping 和 tracert
    ping
    tracert
    UDP协议首部格式及各字段的位置及作用
    PPP协议包括哪两个协议
    IPv4特点
    TCP和UDP常用的熟知端口号及常见端口号及对应的协议
    网络分流器的分类
    交换式网络中捕获网络流量的基本方法
    1.端口镜像
    2.集线器接出
    3.分流器
    4.ARP缓存污染
    传输层可靠性的保障机制
    以太网帧的最大帧长最大传输单元
    三个私有地址块
    A类地址
    B类地址
    C类地址
    什么是网络协议及网络协议在“网络地图”中的作用
    什么是“网络地图”
    DHCP协议格式首部,用图表表示
    通过在Wireshark的Packet Details面板中对捕获的IP协议头数据包进行分析
    通过在Wireshark的Packet Details面板中对捕获的ICMP请求与响应数据包进行分析
    通过在Wireshark的Packet Details面板中对捕获的HTTP协议数据包进行分析
    通过在Wireshark的Packet Details面板中对捕获的DHCP协议各阶段数据包进行分析
    DHCP发现阶段
    DHCP提供阶段
    DHCP的选择阶段
    DHCP确认阶段
    通过在Wireshark的Packet Details面板中对捕获的DNS协议各阶段数据包进行分析
    ARP协议
    协议格式
    在这里插入图片描述

    工作原理
    ARP地址解析协议用于将计算机的网络IP地址转化为物理MAC地址,ARP协议的基本功能
    就是通过目标设备的IP地址。查询目标设备的MAC地址,以保证通信的顺利进行。
    在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的
    过程
    在这里插入图片描述

    TCP/IP协议簇的层次及OSI/RM模型的网络层次及各层的主要作用及各层的主要协议
    TCP/IP协议簇的层次
    物理层:
    为传输数据所需要的物理链路创建、维持、拆除,提供物理条件保证传输过程数据的安全性

    数据链路层
    主要提供链路控制(同步,异步,二进制,HDLC),差错控制(重发机制),流量控制(窗口机制)

    网络层
    提供阻塞控制,路由选择(静态路由,动态路由)等
    主要协议
    IP:IP协议提供不可靠、无连接的传送服务
    ARP:地址解析协议。基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核必须知道目的端的硬件地址才能发送数据。P2P的连接是不需要ARP的。
    RARP:反向地址转换协议。允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。局域网网关路由器中存有一个表以映射MAC和与其对应的 IP 地址。当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器。
    IGMP:组播协议包括组成员管理协议和组播路由协议。组成员管理协议用于管理组播组成员的加入和离开,组播路由协议负责在路由器之间交互信息来建立组播树。IGMP属于前者,是组播路由器用来维护组播组成员信息的协议,运行于主机和和组播路由器之间。IGMP 信息封装在IP报文中,其IP的协议号为2。
    ICMP:Internet控制报文协议。用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
    BGP :边界网关协议。处理像因特网大小的网络和不相关路由域间的多路连接。
    RIP:路由信息协议。是一种分布式的基于距离矢量的路由选择协议。

    传输层
    提供分割与重组数据,按端口号寻址,连接管理差错控制和流量控制,纠错的功能。传输层要向会话层提供通信服务的可靠性,避免报文的出错、丢失、延迟时间紊乱、重复、乱序等差错。
    协议
    TCP: 一种面向连接的、可靠的、基于字节流的传输层通信协议。
    UDP: 用户数据报协议,一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
    RTP: 实时传输协议,为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。
    SCTP: 一个面向连接的流控制传输协议,它可以在两个端点之间提供稳定、有序的数据传递服务。SCTP可以看做是TCP协议的改进,它继承了TCP较为完善的拥塞控制并改进TCP的一些不足:
    . SCTP是多宿主连接,而TCP是单地址连接。
    .一个TCP连接只能支持一个流,一个SCTP连接可以支持多个流。
    .SCTP有更好的安全性。

    应用层
    HTTP:超文本传输协议,基于TCP,是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。
    SMTP:简单邮件传输协议,是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
    SNMP:简单网络管理协议,由一组网络管理的标准组成,包含一个应用层协议、数据库模型和一组资源对象。
    FTP:文件传输协议,用于Internet上的控制文件的双向传输。同时也是一个应用程序。
    Telnet:是Internet远程登陆服务的标准协议和主要方式。为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。
    SSH:安全外壳协议,为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
    NFS:网络文件系统,是FreeBSD支持的文件系统中的一种,允许网络中的计算机之间通过TCP/IP网络共享资源。

    OSI七层参考模型
    物理层:在物理媒体上传输原始的数据比特流。

    数据链路层:将数据分成一个个数据帧,以数据帧为单位传输。有应有答,遇错重发。

    网络层:将数据分成一定长度的分组,将分组穿过通信子网,从信源选择路径后传到信宿。

    传输层:提供不具体网络的高效、经济、透明的端到端数据传输服务。

    会话层:进程间的对话也称为会话,会话层管理不同主机上各进程间的对话。

    表示层: 为应用层进程提供格式化的表示和转换数据服务。

    应用层:提供应用程序访问OSI环境的手段

    ISO/OSI参考模型与TCP/IP协议模型中各层的对应关系
    在这里插入图片描述

    在这里插入图片描述

    面向连接、无连接的最主要区别;哪些协议是面向连接的?哪些协议是无连接的?
    面向连接和无连接指的都是协议,两者的区别与承载数据的物理介质无关
    它们的本质区别在于,对无连接协议来说,每个分组的处理都独立于所有其他分组,而对面向连接的协议来说,协议实现则维护了与后继分组有关的状态信息。
    如TCP就是面向连接的协议而UDP则是无连接TCP中的IP协议又是无连接的

    TCP协议首部各字段含义及作用
    在这里插入图片描述在这里插入图片描述

    32位序号

    序号用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。序号是32bit的无符号数,序号到达2^32-1后又从0开始。

    32位确认序号

    确认序号包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加1。只有ACK标志为1时确认序号字段才有效。

    4位首部长度

    首部长度给出首部中32bit字的数目。需要这个值是因为任选字段的长度是可变的。

    例如首部长度4位比特是0011,则表示该TCP首部长度为3*8=24字节。

    6个标志比特

    URG紧急指针(urgentpointer)有效

    ACK确认序号有效。

    PSH接收方应该尽快将这个报文段交给应用层。

    RST重建连接。

    SYN同步序号用来发起一个连接。这个标志和下一个标志将在第18章介绍。

    FIN发端完成发送任务。

    16位窗口大小

    TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16bit字段,因而窗口大小最大为65535字节。在24.4节我们将看到新的窗口刻度选项,它允许这个值按比例变化以提供更大的窗口。

    16位检验和

    接收端根据此检验和再计算判断该TCP包是否正确(传输过程中是否出错)。

    TCP的特点及工作原理
    特点

    有连接
    可靠的
    面向字节流
    具有接受和发送缓冲区
    1
    2
    3
    4
    工作原理
    tcp的三次握手
    在第一步中,客户端向服务端提出连接请求。这时TCP SYN标志置位。客户端告诉服务端序列号区域合法,需要检查。客户端在TCP报头的序列号区中插入自己的ISN。服务端收到该TCP分段后,在第二步以自己的ISN回应(SYN标志置位),同时确认收到客户端的第一个TCP分段(ACK标志置位)。在第三步中,客户端确认收到服务端的ISN(ACK标志置位)。到此为止建立完整的TCP连接,开始全双工模式的数据传输过程。
    在这里插入图片描述

    TCP的流量控制机制
    接受端处理数据的速度是有限的,如果发送端法的太快,导致接受端的缓冲区被打满,这个时候若发送端继续向接受端发送数据,接受端这时已经没有能力接受这些数据了,继而引起丢包和丢包重传等一系列连锁反应。

    这时TCP就引入了一种机制:流量控制机制(流控制)-----根据接受端的处理能力,来决定发送端的发送速度。
    具体操作:

    接收端知己向发送端主机通知自己可以接收数据的大小,于是发送端会发送不超过这个限度的数据。该大小限度被称作窗口大小。
    在TCP首部,有个字段专门用来通知窗口大小。接收端主机将自己缓冲区可以接受的数据大小放入这个字段中通知发给发送端。这个字段值越大,说明网络的吞吐量越高。
    接受端的这个缓冲区一旦面临数据溢出时,窗口大小的值也会随之被设置为一个更小的值通知给发送端,从而控制数据发送量,也就是说,发送端主机会根据接收端主机的指示,对发送数据的量进行控制。这就形成了一个完整的TCP流控制
    在这里插入图片描述如图:当接收端收到从3001号开始的书记段后接收缓冲区变满,不得不暂停接收数据。之后,在收到发送窗口更新通知后通信才得以继续进行。如果这个窗口的更新通知在传送途中丢失,可能会导致无法继续通信。为避免此类问题的发生,发送端主机会时不时的发送一个叫做窗口探测的数据段,此数据仅含一个字节以获取最新的窗口大小信息。
    TCP首部40字节选项中还包含了一个窗口扩大因子M, 实际窗口大小是 窗口字段的值左移 M 位;

    IP报文首部信息各字段及各字段的作用
    1)目前的协议版本号是4,因此IP有时也称作IPv4

    2)首部长度指的是首部占32 bit字的数目,包括任何选项。由于它是一个4比特字段,因此首部最长为60个字节。

    3)服务类型(TOS)字段包括一个3bit的优先权子字段(现在已被忽略),4bit的TOS子字段和1bit未用位但必须置0。4bit的TO S分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4bit中只能置其中1bit。如果所有4bit均为0,那么就意味着是一般服务。
    下图列出了对不同应用建议的TO S值。

    4)总长度字段是指整个IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16比特,所以IP数据报最长可达65535字节,但是一般不会这么长。

    5)标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。

    6)3位标志和13位偏移字段用于分片过程。对于发送端发送的每份IP数据报来说,其标识字段都包含一个唯一值。该值在数据报分片时被复制到每个片中(我们现在已经看到这个字段的用途)。标志字段用其中一个比特来表示“更多的片”。除了最后一片外,其他每个组成数据报的片都要把该比特置1。片偏移字段指的是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。

    标识字段代表划分每个分组属于的同一个数据报,等待重新组装。

    偏于字段代表该分组位于总ip数据报偏移的长度(获取位置)

    分片:物理网络层一般要限制每次发送数据帧的最大长度。任何时候IP层接收到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口获得其MTU。IP把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。

    当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。

    IP数据报 是指IP层端到端的传输单元(在分片之前和重新组装之后),

    分组 是指在IP层和链路层之间传送的数据单元。一个分组可以是一个完整的IP数据报,也可以是IP数据报的一个分片。
    在这里插入图片描述

    7)TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。

    8)协议字段 表达了它如何被IP用来对数据报进行分用。根据它可以识别是哪个协议向IP传送数据。
    比如:

    ICMP:1
    IGMP:2
    TCP:6
    UDP:17
    EIGRP:88
    OSPF:89
    1
    2
    3
    4
    5
    6
    9)首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。

    10)每一份IP数据报都包含源IP地址和目的IP地址。

    11)最后一个字段是任选项,是数据报中的一个可变长的可选信息。目前,这些任选项定义如下:

    • 安全和处理限制(用于军事领域)

    • 记录路径(让每个路由器都记下它的IP地址)

    • 时间戳(让每个路由器都记下它的IP地址和时间)

    • 宽松的源站选路(为数据报指定一系列必须经过的IP地址)

    • 严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)。

    这些选项很少被使用,并非所有的主机和路由器都支持这些选项。

    选项字段一直都是以32 bit作为界限,在必要的时候插入值为0的填充字节。这样就保证IP首部始终是32 bit的整数倍(这是首部长度字段所要求的)。

    OSI参考模型中,各层的数据传输单元
    1、物理bai层 比特(bit)

    2、数据du链路层zhi: 帧(frame)

    3、网络层: 数据报(packet)

    4、运输层: 数据段(segment)

    5、会话层、表示层、应用层:一般就称呼为消息

    ICMP的两大应用Ping 和 tracert
    ping
    ICMP的一个典型应用是Ping。 Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。用户可以在Ping命令中指定丌同参数,如ICMP报文长度、 发送的ICMP报文个数、 等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP报文,迚行Ping测试。

    tracert
    ICMP的另一个典型应用是Tracert。Tracert基于报文头中的TTL值来逐跳跟踪报文的转发路径。 为了跟踪到达某特定目的地址的路径,源端首先将报文的TTL值设置为1。 该报文到达***个节点后,TTL超时,于是该节点向源端发送TTL超时消息,消息中携带时间戳。 然后源端将报文的TTL值设置为2,报文到达第二个节点后超时,该节点同样返回TTL超时消息,以此类推,直到报文到达目的地。 这样,源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往返时间。 Tracert是检测网络丢包及时延的有效手段,同时可以帮助管理员发现网络中的路由环路。

    UDP协议首部格式及各字段的位置及作用
    在这里插入图片描述 16为源端口号
    端口号,大家应该要了解,端口号是传输层中比较重要的概念。我们来结合UDP头部来解释一下。
    端口号:在传输层中,是负责知道消息发送到某台主机上的某个进程重要的标记,知道端口号,才知道发送给哪个进程,一个进程可以绑定多个端口号,但是一个端口号只能有一个进程(一般情况,fork),端口总共65536个端口号,为什么是这么多呢?还是因为UDP或者TCP头部中给端口号的字节数为两个字节,那么两个字节表示的最大范围就是2的16次方65536。在这些端口号中,其中0 ~ 1023是知名端口号,是专门为http、ftp、ssh等知名的应用层协议使用的端口号。1024 ~ 65535是自己可以使用的。但是严格的来说,端口号可以随意用,但是定义知名端口号主要是为了大家同一的标准,可以更为方便。
    列举一些常见的知名协议服务器使用的端口号:
    ssh 22
    ftp 21
    telnet 23
    http 80
    https 443
    SMTP 25
    源端口号就是发送方主机上的端口号,为什么要写上自己的端口号呢?只写个对方端口号也好啊!其实是在通信过程中,往往是双方都要发送消息,所以要写上自己的端口号,让对方能知道自己的发送的进程。
    16位目的端口号
    目的端口号,是标识着要发送给对方的那个进程。没什么可说的
    16位UDP长度
    这个比较重要,UDP的长度为分配了16个比特位,那么这样说,每次发送的最大长度为65536个字节,既64K,而这64K中包含了头部协议信息,在今天互联网飞速发展中,64K对我们来说是非常小的,那么我们在发送数据的时候,要是发送的数据超过64K,就得手动进行分包,进行发送。
    16位UDP校验和
    在数据的发送过程中有可能会收到电磁等外界因素适原有的信号发生变化,所以采用了校验和的方式来进行数据的校验,发生丢包不可怕,可怕的是传过来的是错误信息,这样要是在银行系统中,那么就很恐怖了。在16为校验中采用的CRC校验,想了解,自行百度

    PPP协议包括哪两个协议
    LCP 链路控制协议
    NCP 网络控制协议

    IPv4特点
    1)IPv4地址空间少于40亿个,实际可以使用的更少。

    (2)IPv4不区分网络终端主机和终端设备,每台电脑都可以作为主机和路由器。路由协议管理路由表记录,常用的路由协议有路由信息协议、开放最短路径协议、边界网关协议等。

    (3)IPv4独立于特定的网络硬件,可以运行在局域网、广域网、互联网中。网络地址分配方案唯一,设备有唯一的地址。

    (4)IPv4缺乏对安全性的支持,无法实现网络实名制。网络中节点配置很复杂,不能满足用户“即插即用”的需求

    TCP和UDP常用的熟知端口号及常见端口号及对应的协议
    20、21/FTP(文件传输协议)
    22/SSH(安全shell协议)
    23/Telent(远程登录协议,明文传递)
    53/DNS(域名系统)
    25/SMTP(简单邮件传输协议)
    110/POP3(邮局协议3代)
    79/tcp finger Finger
    69/udp TFTP Trivial File Transfer Protocol
    80/tcp HTTP 超文本传送协议 (WWW)
    88/tcp Kerberos Authenticating agent
    113/tcp ident old identification server system
    119/tcp NNTP used for usenet newsgroups
    220/tcp IMAP3协议
    443/tcp HTTPS协议
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    网络分流器的分类
    网络分流器的类型主要有四种,一种是千兆的网络分流器,还有一种是10G的网络分流器,一种40G的网络分流器,最后一种就是100G的网络分流器

    交换式网络中捕获网络流量的基本方法
    1.端口镜像
    端口镜像是交换式网络中捕获一个目标设备所有网络通信的最简单的方法,翻译成白话文就是端口镜像就是在一个局域网中,捕获别人电脑上接收和发送数据包的最简单的方法,为了使用端口镜像,你必须能够通过命令行或者web管理界面来访问你局域网的交换机,并且,该交换机必须支持端口镜像这个功能,并且,还有一个空闲端口,方便你的嗅探器连接这个端口
    要启用端口镜像,你需要发出一个命令,来强制交换机将一个端口(假设是端口B)上的所有通信,都额外复制一份到另一个端口(假设是端口A)上,然后你的嗅探器连接到A端口上,这样,B电脑的所有通信,都可以被嗅探到,设置端口镜像的具体方法,取决于不同的交换机厂商,需要我们阅读交换机说明书
    启用端口镜像的时候,还需要注意流量,假设交换机有100个端口,我把99个全双工端口,都镜像到1个端口上,那么这一个端口上的物理承受能力应该是扛不住这么多流量冲击的,这会导致数据报丢失,如果数据包丢失,那么嗅探的准确性也就降低了,得不偿失
    在有持续网络流量安全监控需求的常经理,端口镜像虽然简单,但是很不稳定,所以,一会我会介绍分流器

    2.集线器接出
    这个方式,因为集线器很少见了,并且这个方式,当我第一次见到这个方式的时候,心中第一反应就是:“这种方式也叫方式?”,那么这种方式是什么呢,我大概阐述一下吧
    (1)找到目标设备所连接的交换机,并将目标设备的网线从交换机上拔掉
    (2)将目标设备插到我自己的集线器上
    (3)将我的嗅探器插到我自己的集线器上
    (4)将我自己的集线器插到交换机上

    3.分流器
    分流器也是个硬件设备,分两种,一种是聚集的,一种是非聚集的,不想过多介绍了,网上很多

    4.ARP缓存污染
    简单来说,就是如果你的局域网中的一台机器被感染上病毒(例如通过一个IE的安全漏洞等等),病毒程序可以以这台机器(A),在局域网内部发起ARP cache poison的攻击,来把这台机器作为中间人插入到其它的机器(假设为B)和网关中。

    传输层可靠性的保障机制
    TCP保证可靠性:
    (1)校验和
    (2)面向连接
    (3)序号和确认序号
    (4)确认应答机制
    (5)超时重传机制
    (6)流量控制
    (7)拥塞避免
    TCP提高效率:
    (1)滑动窗口
    (2)快重传
    (3)延迟应答
    (4)捎带应答

    以太网帧的最大帧长最大传输单元
    最小帧长64
    最大1500
    最大传输单元(MTU)1500个字节

    三个私有地址块
    A类地址的第一组数bai字为1~126。注意,数字0和 127不作为A类地址,数字127保留给内部回送函数,而数字0则表示该地址是本地宿主机,不能传送。

    B类地址的第一组数字为128~191。

    C类地址的第一组数字为192~223。

    A类地址
    A类地址的表示范围为:0.0.0.0~126.255.255.255,默认网络掩码为:255.0.0.0;A类地址分配给规模特别大的网络使用。A类网络用第一组数字表示网络本身的地址,后面三组数字作为连接于网络上的主机的地址。分配给具有大量主机(直接个人用户)而局域网络个数较少的大型网络。例如IBM公司的网络。

    B类地址
    B类地址的表示范围为:128.0.0.0~191.255.255.255,默认网络掩码为:255.255.0.0;B类地址分配给一般的中型网络。B类网络用第一、二组数字表示网络的地址,后面两组数字代表网络上的主机地址。

    C类地址
    C类地址的表示范围为:192.0.0.0~223.255.255.255,默认网络掩码为:255.255.255.0;C类地址分配给小型网络,如一般的局域网和校园网,它可连接的主机数量是最少的,采用把所属的用户分为若干的网段进行管理。C类网络用前三组数字表示网络的地址,最后一组数字作为网络上的主机地址。

    什么是网络协议及网络协议在“网络地图”中的作用
    为了进行网络中的数据交换而建立的规则、标准或约定称为网络协议。主要由语法、语义和同步(指事件实现中顺序的详细说明)。通信协议有层次特性,大多数 的网络组织都按层或级的方式来组织,在下一层的基础上建立上一层,每一层的目的都是向其上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏 蔽。网络协议确定交换数据格式以及有关的同步问题。

    什么是“网络地图”
    网络地图就是网络拓扑图,是一个显示了网络中所有技术资源及他们之间连接关系的图形表示。

    DHCP协议格式首部,用图表表示
    在这里插入图片描述

    op: 报文的操作类型。分为请求报文和响应报文。1:为请求报文,2为响应报文

    htype: DHCP客户端的硬件地址类型。1代表以太网

    hlen: DHCP客户端的硬件地址长度。Ethernet为6

    hops: DHCP报文经过的DHCP中继的数目,默认为0.报文每次经过一个DHCP中继,该字段就会加1

    xid: 客户端发起一次请求的随机数。

    secs: DHCP客户端开始DHCP请求后所经过的时间。目前尚未使用,固定为0

    flags: DHCP服务器响应报文是采用单播还是广播方式发送。只使用第0比特位。0表示单播,1表示广播。其余比特为保留

    ciaddr: DHCP客户端的IP地址

    yiaddr: DHCP服务端分配给客户端的IP地址

    siaddr: DHCP服务端的IP地址

    giaddr: DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址,也就是网管IP地址

    chaddr: DHCP客户端的硬件地址,也就是MAC地址

    sname: 服务器的名称

    file: DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息

    options: 可选变长选项字段,包含报文的类型,有效租期,DNS服务器的IP地址等
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    通过在Wireshark的Packet Details面板中对捕获的IP协议头数据包进行分析
    在这里插入图片描述

    通过在Wireshark的Packet Details面板中对捕获的ICMP请求与响应数据包进行分析
    请求
    在这里插入图片描述应答
    在这里插入图片描述
    这两个报文的type不一样,8代表请求,0代表应答;code都为0,表示为回显应答;标示符和序列号都是一样的,表示这两个报文是配对的

    通过在Wireshark的Packet Details面板中对捕获的HTTP协议数据包进行分析
    在这里插入图片描述1、Host:gitlab.hudoumiao.com
    说明了服务器主机名是gitlab.hudoumiao.com
    2、Connection:keep-alive
    说明了客户端与服务器之间的TCP通信连接是持久链接
    3、Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp, * / *; q=0.8
    说明了客户端所能接收的媒体类型,且q值代表了优先级
    4、User-Agent:…………
    指明了发起请求的应用程序名称
    5、Accept-Encoding:gzip,deflate,sdch
    说明了客户端所能接收的编码类型有gzip,deflate和sdch
    6、Accept-Language:zh-CN,zh;q=0.8
    说明了客户端所能接收的语言,q值说明了语言类型的优先级
    7、Cookie:…………………
    用户的标签,用来服务器识别请求的用户,在这里有名值

    响应报文分析:

    该响应报文由起始行、首部和主体三部分组成。起始行中的版本号是HTTP/1.1,状态码是200,原因短语是OK。接下来是十五个首部
    1、Server:nginx
    标识了服务器软件是ngix
    2、Date:Sat,15 Aug 2015 02:31:08 GMT
    说明了响应报文产生的时间
    3、Content-Type: text/html; charset=utf-8
    说明了主体的媒体类型是text/html,字符集是utf-8
    4、Transfer-Encoding: chunked
    说明了响应报文采用了分块编码的传输编码,这也是首部中没有Content-Length首部的原因
    5、Connection: keep-alive
    说明了客户端与服务器之间通信是持久连接
    6、Status: 200 OK
    说明了对请求报文的响应状态
    7、X-Frame-Options: DENY
    X-XSS-Protection: 1; mode=block
    X-Content-Type-Options: nosniff
    X-UA-Compatible: IE=edge
    上面的四个首部是扩展首部
    8、Cache-Control: max-age=0, private, must-revalidate
    该首部说明了缓存状态,max-age=0说明了服务器请求缓存不要缓存文档,即每次访问的时候都进行刷新,must-revalidate进一步说明了缓存没有跟服务器进行验证的情况下,不能提供这个对象的陈旧副本
    9、Set-Cookie:………………………
    服务器贴到客户端的标签,该首部中有强制的名值组合,还有path属性,还有该cookie的生存周期
    10、X-Request-Id: 76494f45-4f41-4222-be4e-db9dfa0828b5
    X-Runtime: 0.470905
    这两个首部也是扩展首部
    11、Content-Encoding: gzip
    说明了主体的编码类型为gzip

    通过在Wireshark的Packet Details面板中对捕获的DHCP协议各阶段数据包进行分析
    DHCP发现阶段
    对应的是94帧,可以明显的看到Info信息中显示的是: DHCP Discove
    在这里插入图片描述客户端目前是没有IP地址的,发现阶段是以广播包的形式发送的。也就是网络上的DHCP服务器都是可以收到此数据包的。
    在这里插入图片描述

    DHCP提供阶段
    对应的是99帧可以明显的看到Info信息中显示的是: offer
    在这里插入图片描述在发现阶段分析了Option的详细请求信息,那当然在提供阶段就需要分析对应的服务器分配给DHCP客户端的配置信息
    在这里插入图片描述

    这时候DHCP客户端已经收到DHCP服务器的数据包了,当然如果有多台DHCP服务器,就必须回复DHCP服务器确认用那台DHCP服务器。

    DHCP的选择阶段
    DHCP服务器需要对提供的给自己IP的DHCP服务器做出相应的响应,对应的数据帧是100帧
    在这里插入图片描述

    DHCP确认阶段
    (对应的是分析101帧)
    在这里插入图片描述
    从上图可以看出服务器分配客户端的IP地址为192.168.1.100. 关于服务器分配给客户端的IP的详细信息,需要详细分析option字段
    在这里插入图片描述

    通过在Wireshark的Packet Details面板中对捕获的DNS协议各阶段数据包进行分析
    ① 实际上发送和回传的可并不只一次,客户端每发送一条查询消息,都会得到DNS服务器的响应。我们可以看到有个十六进制的号,使得发送和响应一一对应。
    在这里插入图片描述

    ② 我们首先来查看0x54d1发送包,和其它包一样,最前面是14个字节为以太网帧头,然后是20字节的IP帧头,这里就不再描述了, 这里看到的是8个字节的用户数据报文协议(指定了源和目标端口),30字节的域名解析查询。
    1
    Transaction ID(交易口):这个数值的作用是将一个域名查询消息和对应的响应消息对应起来。

    query/response(查询/响应):每个DNS数据包都会被标记为查询消息或者响应消息,具体哪一类取决于消息中包含的内容。

    Flags(标记):每个查询和响应消息都有不同的标记位置位。

    Response(响应):标识该消息为查询消息还是响应消息。

    Opcode(操作码):这个标记决定了查询消息的类型。Opcode范围是0~15。

    Opcode 值 描 述
    0 标准查询
    1 逆向查询
    2 服务器状态请求
    3 未分配
    4 通告
    5 更新
    6~15 未分配
    1
    2
    3
    4
    5
    6
    7
    8
    Truncated(截断):这个标记决定了如果数据包过大(大于512字节)时,是否对数据包进行截断。

    Recursion desired(期望递归):如果要所查的记录不存在,那么客户端发送的消息就会从一台DNS服务器到另一台DNS服务器这样执行一个递归的搜索流程。

    Type(类型):这个字段显示的是查询的类型。

    类 型 描 述
    A 主机地址
    NS 域名服务器
    MX 邮件交互
    SOA 起始授权机构
    PTR 指针记录
    AAAA IPv6 地址
    AXFR 全量传输
    IXFR 增量传输
    1
    2
    3
    4
    5
    6
    7
    8
    9
    在这里插入图片描述

    ③ 再看0x54d1响应包,8个字节的用户数据报文协议,46字节的域名解析响应,比查询包多16字节,也就是查询反馈内容。

    Reply code(应答码):这个字段的值用来表示是否出现了错误,以及错误的类型。

    Code (代码) 描 述
    0 没有错误
    1 格式错误
    2 服务器故障
    3 域名错误
    4 未使用
    5 拒绝

    Questions(问题):表示数据包中包含的查询数量。
    
    Answers RRs(回答):表示对查询消息所作响应的数量。
    
    Authority RRs(授权):表示响应消息中授权资源记录的数量。
    
    Additional RRs(额外):表示响应消息中额外资源记录的数量。
    
    Answer(回答):对查询消息所作的响应。响应消息也可以有很多个。
    
    展开全文
  • 网络协议分析与仿真课程设计报告 题 目:网络流量分析与协议模拟 专业名称: 网络工程 班 级: 学生姓名: 阿吉 学号(8位): 指导教师: 设计起止时间: 网络协议分析与仿真...

     

     

    网络协议分析与仿真课程设计报告

     

       目:网络流量分析与协议模拟

     

     

     

     

     

     

     

          专业名称:         网络工程

         级:        

         学生姓名:           阿吉

     学号(8位):   

     指导教师:        

     设计起止时间:

     

     

     

    网络协议分析与仿真课程设计报告

     

    一、课程设计目的

    • 加深对IP、DNS 、TCP、UDP、HTTP等协议的理解;
    • 掌握流量分析工具的使用,学习基本的流量分析方法。
    • 掌握网络模拟工具NS2的使用,学习基本的网络模拟方法。

    二、课程设计内容

    • 一、协议及流量分析
    • 工具:Wireshark(Windows或Linux),tcpdump(Linux)
    • 要求:建立包含DNS解析的Web服务网络环境,使用过滤器捕获特定分组,观察PDU;用脚本分析大流量数据(建议用perl);
    • 内容:Web流量分析

    搭建Web服务器和DNS服务器,要求Web服务器IP地址为“xx.xx.xx.学号的后三位”,要求DNS服务器IP地址为“xx.xx. 学号的后三位. xx”;用Web服务器、DNS服务器及1台客户机构建网络环境;清除客户机DNS缓存,访问Web服务器,捕获访问过程中的所有分组,分析并回答下列问题(以下除1、3、8、11外,要求配合截图回答):

    简述访问web页面的过程。

    1. 在自建的网络环境中用客户机浏览器访问DNS服务器,使用Wireshark捕获数据包,找出DNS解析请求、应答相关分组,传输层使用了何种协议,端口号是多少?所请求域名的IP地址是什么? (可以用终端的NSlookup 命令,如果使用自建的DNS服务器解析Web服务器,可以加分)
    2. 针对(1)中的DNS访问过程,观察UDP协议的报文格式。
    3. 在自建的网络环境中用客户机浏览器访问Web服务器,统计访问主页共有多少请求IP分组,多少响应IP分组?(要求编程实现)
    4. 找到TCP连接建立的三次握手过程,绘出TCP连接建立的时空图,注明每个TCP报文段的序号、确认号、以及SYN\ACK的设置。给出该TCP连接的四元组,双方协商的起始序号;TCP连接建立的过程中,第三次握手是否携带数据,是否消耗序号。
    5. 在TCP连接的数据传输过程中,找出每一个(客户)发送的报文段与其ACK报文段的对应关系,画出时空图。
    6. 找到TCP四次挥手释放连接的过程,绘出TCP连接释放的时空图,注明每个TCP报文段的序号、确认号、以及FIN\ACK的设置,说明释放请求由服务器还是客户发起,FIN报文是否携带数据,是否消耗序号,FIN报文段的序号是什么,为什么是这个值。
    7. 将(3)得到的数据流保存为txt文件,通过编程计算这该TCP通信过程中数据报文段的往返时延RTT(即RTT样本值)。根据《计算机网络》课程课本227-228页相关RTT计算方法,估算每一个数据报文段超时时间RTO。
    8. 分别找出一个HTTP请求和响应分组,分析其报文格式。参照《计算机网络》课程课本276页图6-11,在截图中标明各个字段。
    9. 访问同一网站的不同网页,本次访问中的TCP连接是否和上次访问相同?(提示:与上次页面访问时间间隔不能过长,可连续访问、分别分析。)
    10. 描述HTTP协议的持续连接的两种工作方式。访问这些页面(同一网站的不同页面)的过程中,采用了哪种方式? 
    11. 设计主页和HTTP协议版本,观察IP分片过程。(选作加分项)
    • 二、协议模拟
    • 工具:NS2,awk,shell,perl等;
    • 要求:掌握NS2网络模拟的基本流程;
    • 内容:NS2网络模拟基本流程

    在ubuntu环境下,通过学习示例文件编写TCL脚本,搭建如下图所示的一个网络,共6个节点,其中2、3节点用做ftp服务器和客户端,4、5节点用做cbr流量的源和目的,而0、1节点用做转发设备。各节点间的链路属性见图。

     

    图1-1

     

    模拟时间设为13秒钟,在0.1秒开始产生cbr流量,在1.0秒开始发送ftp流量;8.0秒ftp流量结束,12.0秒cbr流量结束。编写脚本(可用shell,awk,或perl等)分析模拟日志文件,统计每0.5s内0、1节点间链路通过的分组数以及字节数。

    三、  设计与实现过程

    • 一、协议及流量分析

    (1)在自建的网络环境中用客户机浏览器访问DNS服务器,使用Wireshark捕获数据包,找出DNS解析请求、应答相关分组,传输层使用了何种协议,端口号是多少?所请求域名的IP地址是什么? (可以用终端的NSlookup 命令,如果使用自建的DNS服务器解析Web服务器,可以加分)

    Wireshark捕获数据DNS解析请求、应答相关分组:

    请求分组:

     

    应答分组:

     

    传输层使用UDP协议进行传输:

    请求端口号为:源端口:51728

      目的端口:53

    响应端口号为:源端口为:53

      目的端口:51728

    所请求的域名IP为:192.168.66.66

     

    浏览器通过DNS服务器解析IP并访问Web服务器:

     

    (2)针对(1)中的DNS访问过程,观察UDP协议的报文格式。

    UDP请求时的UDP报文:

     (3)在自建的网络环境中用客户机浏览器访问Web服务器,统计访问主页共有多少请求IP分组,多少响应IP分组?(要求编程实现)

    统计python源代码:

    import pyshark
    i=0
    j=0
    k=0
    a='192.168.128.1'#主机
    b='192.168.128.128'#web
    c='192.168.128.48'#dns
    cap=pyshark.FileCapture("D:/io1/test.pcapng",only_summaries=True)
    for pkt in cap:
        if pkt.protocol !='ARP':
            if pkt.source ==a:
                if pkt.destination==b or c:
                    i=i+1
                    print( '%s %s ------>%s' %(pkt.protocol,pkt.source ,pkt.destination))
    print('从主机发送的IP包个数:')
    print(i)
    for pkt in cap:
        if pkt.protocol !='ARP':
            if pkt.source ==b:
                j=j+1
                print( '%s %s ------>%s' %(pkt.protocol,pkt.source ,pkt.destination))
    print('主机接受web服务器发送的IP包个数:')
    print(j)
    for pkt in cap:
        if pkt.protocol !='ARP':
            if pkt.source ==c:
                if pkt.destination==a:
                    k=k+1
                    print( '%s %s ------>%s' %(pkt.protocol,pkt.source ,pkt.destination))
    print('主机接受dns服务器发送的IP包个数:')
    print(k)

    运行结果图:

     

    (4)找到TCP连接建立的三次握手过程,绘出TCP连接建立的时空图,注明每个TCP报文段的序号、确认号、以及SYN\ACK的设置。给出该TCP连接的四元组,双方协商的起始序号;TCP连接建立的过程中,第三次握手是否携带数据,是否消耗序号。

      

    三次握手第一次握手的四元组:

     

     

    三次握手第二次握手的四元组:

     看灰色的这一行

    三次握手第三次握手的四元组:

     看第三行的灰色行

     

     

    双方协商的启示序号为sql=0。

    第三次握手有携带数据,有消耗序号。

    (5)在TCP连接的数据传输过程中,找出每一个(客户)发送的报文段与其ACK报文段的对应关系,画出时空图。

      

    (6)找到TCP四次挥手释放连接的过程,绘出TCP连接释放的时空图,注明每个TCP报文段的序号、确认号、以及FIN\ACK的设置,说明释放请求由服务器还是客户发起,FIN报文是否携带数据,是否消耗序号,FIN报文段的序号是什么,为什么是这个值。

      

    释放请求是由服务器发起的

    FIN报文携带数据,消耗序号

    FIN报文段的序号为180

    因为在上一次的客户端TCP报文中的ACK确认号时180

    (7)将(3)得到的数据流保存为txt文件,通过编程计算这该TCP通信过程中数据报文段的往返时延RTT(即RTT样本值)。根据《计算机网络》课程课本227-228页相关RTT计算方法,估算每一个数据报文段超时时间RTO。

    将Wireshark抓取的数据中的每个RTT数据项字段取出的python代码为:

    import pyshark
    import re
    i=0
    j=0
    k=0
    a='192.168.128.1'#主机
    b='192.168.128.128'#web
    c='192.168.128.48'#dns
    cap=pyshark.FileCapture("D:/io1/test.pcapng",display_filter="tcp")
    for pkt in cap:
        print("$$$$$$$$$$$$$")
        print(pkt)
        pkt = str(pkt)
        m = re.findall(r'The RTT to ACK the segment was: 0.{1,100} seconds', pkt)
        m = str(m)
        if m != '[]':
            m = re.findall(r'0.{1,10}', m)
            m=str(m)
            m = re.sub(r'[\[\]\']','',m)
            print(m)
            f = open('RTT.txt', 'a')
            f.write(m+'\n')
            f.close()

    解析后存储的TXT文件:

     

    RTO的计算公式为

    RTO = RTTS+4*RTTD

    RTTS=0.875*RTTS+0.125*rtt

    RTTD = 0.75*RTTD+0.25*(abs(RTTS-rtt))

    根据此公式计算的python代码为:

    my_open = open('RTT.txt', 'r')
    i=1
    j=0
    RTTS = 0.0
    RTTD = 0.0
    for eachline in my_open:
        m=eachline.split()
        rtt = m[0]
        rtt = float(rtt)
        if i==1:
            RTTS = rtt
            RTTD = rtt/2
            RTO = RTTS+4*RTTD
            RTO = str(RTO)
            f = open('RTO.txt', 'a')
            f.write(RTO + '\n')
            f.close()
        else:
            RTTS=0.875*RTTS+0.125*rtt
            RTTD = 0.75*RTTD+0.25*(abs(RTTS-rtt))
            RTO = RTTS + 4 * RTTD
            RTO = str(RTO)
            f = open('RTO.txt', 'a')
            f.write(RTO + '\n')
            f.close()
        print(m)
    print(j)
    my_open.close()

    计算后得到各个RTO值存为的TXT文件:

     

    (8)分别找出一个HTTP请求和响应分组,分析其报文格式。参照《计算机网络》课程课本276页图6-11,在截图中标明各个字段。

    HTTP请求分组截图:

     

    HTTP响应分组截图:

     

    (9)访问同一网站的不同网页,本次访问中的TCP连接是否和上次访问相同?(提示:与上次页面访问时间间隔不能过长,可连续访问、分别分析。)

     

    TCP第一次连接:

       

    TCP第二次连接:

       

    两次时空图比较可得知:

    访问同一网站的不同网页其三次握手的大体过程一样。

    (10)描述HTTP协议的持续连接的两种工作方式。访问这些页面(同一网站的不同页面)的过程中,采用了哪种方式? 

    1.非流水线方式:客户在收到前一个响应之后才能发出下一个请求

    2.流水线方式:客户在收到HTTP响应报文之前就能够接着发送新的报文请求

    流水线工作方式使TCP连接中的空闲时间减少,提高了传输效率

    访问这些页面(同一网站的不同页面)的过程中,采用了流水线的方式,在同一网站上的不同引用对象,可以进行连续的请求,不一定非要等到确认报文。

    如图是非连续请求截图:

     

     

    • 二、协议模拟
    1. 仿真脚本代码与详细注解

    #创建模拟器对象

    #模拟器对象赋值给变量ns

    set ns [new Simulator]       

     

    #给NAM定义不同的数据流,颜色的选择随意,易于区分就可以

    $ns color 1 Blue

    $ns color 2 Red       

     

    #打开out.nam文件,一般都是在执行程序时自动生成

    set nf [open out.nam w]

                    $ns namtrace-all $nf    

     

    #打开out.tr文件,也是自动生成

    set tf [open out.tr w]

    $ns trace-all $tf  

    #两个文件主要都是用来记录封包传输过程的   

     

        #定义finish程序,在后面执行时可以用到

        proc finish {} {

                   global ns nf tf

                   $ns flush-trace

                   #关闭nam文件

              close $nf

        #关闭trace文件在后面调用的时候,是在程序结束的时候所以前面生成的两个文件必须要关       

                   close $tf       

            exec nam out.nam &    

            exit 0

        }

     

         #创建8个节点    

         set n0 [$ns node]

         set n1 [$ns node]

         set n2 [$ns node]

         set n3 [$ns node]

         set n4 [$ns node]

         set n5 [$ns node]

         set n6 [$ns node]

         set n7 [$ns node]

        

     

        #基于题目要求的基础之上,创建结点之间的链路 

        $ns duplex-link $n2 $n6 1.5Mb 10ms DropTail

        $ns duplex-link $n0 $n2 1.5Mb 10ms DropTail

        $ns duplex-link $n0 $n4 1.5Mb 10ms DropTail

        $ns duplex-link $n1 $n3 1.5Mb 10ms DropTail

        $ns duplex-link $n1 $n5 1.5Mb 10ms DropTail

        $ns duplex-link $n5 $n7 1.5Mb 10ms DropTail

        $ns duplex-link $n1 $n0 2Mb 20ms DropTail

     

     

     

    #给NAM创建节点位置

    $ns duplex-link-op $n6 $n2 orient down

    $ns duplex-link-op $n2 $n0 orient right-down  

    $ns duplex-link-op $n4 $n0 orient right-up  

    $ns duplex-link-op $n0 $n1 orient right  

    $ns duplex-link-op $n0 $n1 orient right  

    $ns duplex-link-op $n1 $n3 orient right-up  

    $ns duplex-link-op $n1 $n5 orient right-down

    $ns duplex-link-op $n5 $n7 orient down

     

     

     

    #设置n0到n1之间的列长度

    $ns queue-limit $n1 $n0 10

     

    # TCP与UDP的建立中,agent是一个代理,用来作为网络层的传输与接收

    #建立TCP连接   

    set tcp [new Agent/TCP]  

    $tcp set class_ 2  

    $ns attach-agent $n6 $tcp  

    set sink [new Agent/TCPSink]  

    $ns attach-agent $n3 $sink  

    $ns connect $tcp $sink  

    $tcp set fid_ 1     

    #TCP的连接用红色的数据流表示 

     

     

    #建立UDP连接    

    set udp [new Agent/UDP]  

    $ns attach-agent $n4 $udp  

    set null [new Agent/Null]  

    $ns attach-agent $n3 $null  

    set null [new Agent/Null]  

    $ns attach-agent $n7 $null  

    $ns connect $udp $null  

    $udp set fid_ 2 

    #NAM中,UDP的连接用蓝色的数据流表示

       

     

    #在TCP连接上建立FTP  

    set ftp [new Application/FTP]  

    $ftp attach-agent $tcp  

    $ftp set type_ FTP 

     

    #在UDP连接上建立CBR

    #设置了cbr流量的包类型,字节大小,以及传输速率 

    set cbr [new Application/Traffic/CBR]  

    $cbr attach-agent $udp  

    $cbr set type_ CBR  

    $cbr set packet_size_ 2000  

    $cbr set rate_ 1mb  

    $cbr set random_ false   

     

     

    #设置FTP和CBR起止时间

    #0.1秒产生cbr流量

    $ns at 0.1 "$cbr start" 

     

    #1.0秒发送ftp流量

    $ns at 1.0 "$ftp start" 

     

    #8.0秒ftp流量结束

    $ns at 8.0 "$ftp stop"  

     

    #12.0秒cbr流量结束

    $ns at 12.0 "$cbr stop" 

     

    #13秒后调用前面写出的finish程序   

    $ns at 13.0 "finish" 

     

    #执行模拟器程序

    $ns run 

     

    1. 仿真过程示意(动画截图1个)

    刚开始的时候如图2-1所示,在0.1s的时候发送cbr,cbr基于UDP协议,在1s的时候发送ftp,ftp基于TCP,如图2-2所示,在8s的时候,ftp结束,在12s的时候cbr结束,如图2-3所示。

     

    图2-1

     

    图2-2

     

    图2-3

     

     

    3.日志分析脚本设计(设计思路与代码、注解)

    使用perl命令运行日志分析脚本

    设计思路:

    首先取出每行的时间、分组大小;

    若时间大于当前的时间段,变量加1,开始统计下一时间段信息;

    数组count1记录分组的数目

    数组count2记录每个时间段通过的分组的总字节数

    代码运行结束后的统计结果如图3-1所示:(数据包的折线图在图4-1.4-2)

     

     

    图3-1

    #!/usr/bin/perl 

    #定义变量i

    $i=0;      

    #定义三个数组

    @info;      

    @count1; 

    @count2; 

    #读out.tr文件的内容

    while(<>){  

    #以空格为分字符读取每一行的内容   

    @info = split(/ +/,$_); 

    #封包事件发生原因 (r代表封包被接收,+ 表示进入队列,- 表示离开队列)

    $reason = $info[0];  

    #时间,表示流量传输的开始时间

    $time = $info[1];      

    #封包的起始节点

    $src = $info[2];    

    #封包的终止节点

    $dst = $info[3];    

    #包的字节长度        

    $length = $info[5];     

    #包被某个节点所接受,而且链路传输是在从0到1的链路上,判断语句

    if($reason==‘r’ && ($src==0 && $dst==1) || ($src==1 && $dst==0)){    

    if($time > $i*0.5){    /时间段超过0.5秒,执行下一行内容 

               $i++;                   

        }    

        $count1[$i]++;     /这个数组用于统计包的个数

    $count2[$i]+=$length;       /这个数组用于统计字节数 

    #显示语句,显示内容为:时间间隔,包,还有字节数

    printf("intervals(s)\t\tpackets\t\tbytes\n"); 

    $i=1.0; 

    #显示统计出来的每个时间段的信息

    while($count1[$i]){

    printf("%4.1f~%4.1f\t\t$count1[$i]\t\t$count2[$i]\n",($i-1)*0.5,$i*0.5,); 

        $i++; 

    1. 分析结果展示(通过自绘图来说明)

    代码的数据截图在图3-1

     

     

    图4-1

    刚开始的时候,在0.1s的时候发送cbr,cbr基于UDP协议,在1s的时候发送ftp,ftp基于TCP,在8s的时候,ftp结束,在12s的时候cbr结束,12.5秒的时候程序已经结束了。

     

     

    四、  设计技巧及体会

    1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。

    这次实验因为之前有一定的计算机网络实验课的基础,所以整体感觉不是很难,但是东西很多,比较繁琐,需要耐心弄一下。

    本次进行实验的过程中,由于使用的是Linux虚拟机,因此经常会出一些虚拟机常见的问题,总体来说,还是解决了问题,并且完成了实验,但是,我接下来会尝试改进一下,使用PC机上的Linux操作系统来进行一次实验,看一下和虚拟机有什么不同。

    在进行wireshark抓包时,由于访问的网页的数据量较小,没有好好的进行网页的设计和数据量的增大,因此没有观察到IP的分片操作,改进之处:可以尝试加大数据量,使一次IP无法传输,必须使用IP分片,因此来观察IP分片操作。

    在进行协议模拟时,代码编写不是太规范,因此可以改进一下代码的编写规范,使其变的更加完美。+

    2、在设计过程中的感受。

    在进行流量分析时,当时需要自己在Linux操作系统中搭建一个web和一个dns服务器,在当时搭建时,遇到了很多问题,但最后全部解决掉了,也因此让我学会了使用CentOS来进行WEB站点的搭建,并且在CentOS中使用Bind来进行DNS服务器的搭建,了解了在Linux操作系统中web和dns服务器在其中的文件位置和两个服务器的工作流程以及dns服务器的文件配置格式,和在Windows中使用nslookup来进行dns服务器的测试。

    在协议模拟中,学会了使用仿真工具在其中进行编程来进行协议的仿真,不但学会了如何使用仿真工具,而且也学会了在其中编程,并运行自己编写的程序,最后还学到了对自己编写的仿真程序进行测试。

    第二个实验感觉还是挺难的,尤其是自己写代码的时候,一直在百度各种坑,然后不断改,现在回首一下的话,感觉还是比较简单了。同时,自己掌握了一项新技能,还是很开心的。老师帮助着指点着这次实验中出现的问题,提出一个解决的方向,然后我去更改代码。最终比较完美的完成了实验。

     

     

     

     

     

     

    展开全文
  • Ethereal是一个开放源码的网络分析系统,也是是目前最好的开放源码的网络协议分析器,支持Linux和windows平台。  Ethereal起初由Gerald Combs开发,随后由一个松散的Etheral团队组织进行维护开发。它目前所提供的...
    Ethereal是一个开放源码的网络分析系统,也是是目前最好的开放源码的网络协议分析器,支持Linux和windows平台。
    

      Ethereal起初由Gerald Combs开发,随后由一个松散的Etheral团队组织进行维护开发。它目前所提供的强大的协议分析功能完全可以媲美商业的网络分析系统,自从1998年发布最早的0.2版本至今,大量的志愿者为Ethereal添加新的协议解析器,如今Ethereal已经支持五百多种协议解析。很难想象如此多的人开发的代码可以很好的融入系统中;并且在系统中加入一个新的协议解析器很简单,一个不了解系统的结构的新手也可以根据留出的接口进行自己的协议开发。这都归功于Ehereal良好的设计结构。事实上由于网络上各种协议种类繁多,各种新的协议层出不穷。一个好的协议分析器必需有很好的可扩展性和结构。这样才能适应网络发展的需要不断加入新的协议解析器。

      1 Ethereal的捕包平台

      网络分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在在网络分析系统模块的最底层。作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。

      在Linux系统中, 1992年Lawrence Berkeley Lab的Steven McCanne和Van Jacobson提出了包过滤器的一种的实现,BPF(BSD Packet Filter)。Libpcap是一个基于BPF的开放源码的捕包函数库。现有的大部分Linux捕包系统都是基于这套函数库或者是在它基础上做一些针对性的改进

      在window系统中,意大利人Fulvio Risso和Loris Degioanni提出并实现了Winpcap函数库,作者称之为NPF。由于NPF的主要思想就是来源于BPF,它的设计目标就是为windows

      系统提供一个功能强大的开发式数据包捕获平台,希望在Linux系统中的网络分析工具经过简单编译以后也可以移植到windows中,因此这两种捕包架构是非常现实的。就实现来说提供的函数调用接口也是一致的。

      Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包。

      2层次化的数据包协议分析方法

      取得捕包函数捕回的数据包后就需要进行协议分析和协议还原工作了。由于OSI的7层协议模型,协议数据是从上到下封装后发送的。对于协议分析需要从下至上进行。首先对网络层的协议识别后进行组包还原然后脱去网络层协议头。将里面的数据交给传输层分析,这样一直进行下去直到应用层

      Ip

      | \

      Tcp udp

      | \

      HTTP TFTP

      由于网络协议种类很多,就Ethereal所识别的500多种协议来说,为了使协议和协议间层次关系明显。从而对数据流里的各个层次的协议能够逐层处理。Ethereal系统采用了协议树的方式。上图就是一个简单的协议树。如果协议A的所有数据都是封装在协议B里的,那么这个协议A就是协议B是另外一个协议的儿子节点。我们将最低层的无结构数据流作为根接点。那么具有相同父节点的协议成为兄弟节点。那么这些拥有同样父协议兄弟节点协议如何互相区分了?Ethereal系统采用协议的特征字来识别。每个协议会注册自己的特征字。这些特征字给自己的子节点协议提供可以互相区分开来的标识。比如tcp 协议的port字段注册后。 Tcp.port=21就可以认为是ftp协议,特征字可以是协议规范定义的任何一个字段。比如ip协议就可以定义proto字段为一个特征字。

      在Ethereal中注册一个协议解析器首先要指出它的父协议是什么。另外还要指出自己区别于父节点下的兄弟接点协议的特征。比如ftp协议。在Ethereal中他的父接点是tcp协议,它的特征就是tcp协议的port字段为21。

      这样当一个端口为21的tcp数据流来到时。首先由tcp协议注册的解析模块处理,处理完之后通过查找协议树找到自己协议下面的子协议,判断应该由那个子协议来执行,找到正确的子协议后,就转交给ftp注册的解析模块处理。这样由根节点开始一层层解析下去。

      由于采用了协议树加特征字的设计,这个系统在协议解析上由了很强的扩展性,增加一个协议解析器只需要将解析函数挂到协议树的相应节点上即可。

      3 基于插件技术的协议分析器

      所谓插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信,并且,在宿主程序不变的情况下,可以通过增减插件或修改插件来调整应用程序的功能。运用插件技术可以开发出伸缩性良好、便于维护的应用程序。它着名的应用实例有:媒体播放器 winamp、微软的网络浏览器ie等。

      由于现在网络协议种类繁多,为了可以随时增加新的协议分析器,一般的协议分析器都采用插件技术,这样如果需要对一个新的协议分析只需要开发编写这个协议分析器并调用注册函数在系统注册就可以使用了。通过增加插件使程序有很强的可扩展性,各个功能模块内聚。

      在协议分析器中新增加一个协议插件一般需要插件安装或者注册,插件初始化,插件处理3个步骤,下面以Ethereal为例进行分析如何利用插件技术新增加一个协议分析模块。

      Ethereal由于采用插件技术,一个新加入开发的程序员开发一种新的协议分析模块的时候不需要了解所有的代码,他只需要写好这个协议模块的函数后,写一个格式为proto_reg_handoff_XXX的函数,在函数内调用注册函数告诉系统在什么时候需要调用这个协议模块。比如

      你事先写好了一个名为dissect_myprot的协议解析模块,它是用来解析tcp协议端口为250的数据。可以利用这些语句来将这个解析器注册到系统中

      proto_reg_handoff_myprot(void) { dissector_handle_t myprot_handle; myprot_handle = create_dissector_handle(dissect_myprot, proto_myprot); dissector_add("tcp.port", 250, myprot_handle); }

      这段代码告诉系统当tcp协议数据流端口为250的时候要调用dissect_myprot这个函数模块。

      在Ethereal中有一个角本专门来发现开发者定义的类式proto_reg_handoff_xxx这样的注册函数名,然后自动生成调用这些注册函数的代码。这样开发者不需要知道自己的注册函数如何被调用的。这样一个新的协议分析模块就加入到系统中了。

      由于采用了插件方式,Ethereal良好的结构设计让开发者只需要关系自己开发的协议模块,不需要关心整个系统结构,需要将模块整合进系统只需要写一个注册函数即可,连初始化时调用这个注册函数都由脚本自动完成了。正是因为有很好的体系结构,这个系统才能够开发出如此多的协议解析器

      尽管Ethereal是目前最好的开放源码的网络分析系统,但Ethereal仍然有一些可以改进的地方,一个优秀的网络分析器,尽可能的正确分析出数据协议和高效的处理数据是两个重要的指标。在协议识别方面Ethereal大多采用端口识别,有少量协议采用内容识别。这就让一些非标准端口的协议数据没有正确解析出来。比如ftp协议如果不是21端口的话,Ethereal就无法识别出来,只能作为tcp数据处理。另外对于内容识别式。 Ethereal是将所以内容识别的函数组成一张入口表。每次协议数据需要内容识别时,按字母顺序逐个调用表里的每个识别函数。比如对于识别yahoo massanger协议。主要是看数据前几个字节是不是’ymsg’.由于协议名为y开头。所以当识别出协议时已经把所有内容识别函数调用了一遍。这些都是由于Ethereal没有实现tcp协议栈,无法做到流级别的识别。导致在协议识别方面有点缺陷。

    展开全文
  • 实验01使用网络协议分析仪Wireshark 1. 掌握安装和配置网络协议分析仪Wireshark的方法; 2. 熟悉使用Wireshark工具分析网络协议的基本方法,加深对协议格式、协议层次和协议交互过程的理解。
  • 计算机网络实验——使用网络协议分析仪Wireshark,帮助掌握安装和配置网络协议分析仪Wireshark的方法; 熟悉使用Wireshark工具分析网络协议的基本方法,加深对协议格式、协议层次和协议交互过程的理解。
  • mysql网络协议分析

    千次阅读 2018-07-03 15:14:41
    mysql网络协议分析我们从客户端本地登陆一个mysql的用户以及使用mysql命令获得想要的消息. 需要去请求mysql的服务器,这个时候就需要用到mysql的网络通信协议. 当你打算编写数据库的代理服务器,数据库的中间件,...
  • 计算机网络实验——使用网络协议分析仪Wireshark 一、实验名称 使用网络协议分析仪Wireshark 二、实验目的: 掌握安装和配置网络协议分析仪Wireshark的方法; 熟悉使用Wireshark工具分析网络协议的基本方法,加深对...
  • 使用网络协议分析仪Wireshark

    千次阅读 2018-09-29 16:24:05
    1)能够正确安装配置网络协议分析仪Wireshark 2)熟悉使用Wireshark分析网络协议的基本方法 3)加深对协议格式、协议层次和协议交互过程的理解。 实验内容及步骤 1.安装网络协议分析仪 安装wireshark版本2.6.3。...
  • 网络课程设计中的网络协议分析器。能实现协议分析器捕获、分析数据包功能。支持以太网MAC协议、IP和TCP/UDP协议的分析,并实现了ARP,ICMP,IGMP协议的分析,提取各个协议的字段值,能进行简单的过滤。基于winpcap...
  • 网络的核心是网络协议,网络协议分析技术在网络安全领域也是一项很重要的技术。那什么是网络协议技术分析! 我们通过Wireshark抓一个数据包来看看。 上面截图有很多协议,但是我们可以看出,网络协议分析是指对网络...
  • 实验一:使用网络协议分析仪Wireshark 一、实验名称 使用网络协议分析仪Wireshark 二、实验目的: 掌握安装和配置网络协议分析仪Wireshark的方法; 熟悉使用Wireshark工具分析网络协议的基本方法,加深对协议格式、...
  • 网络协议分析

    2013-03-23 23:48:31
    此次编程实现简单的TCP协议分析器,TCP协议分析器是一种用于监督和跟踪网络活动的诊断工具,它从局域网中抓取IP数据包,并对它进行分析得到相应的头部信息,过滤TCP包进行分析,得到TCP包的相应信息。
  • 全网最全网络协议分析,生动形象的讲解每个协议,是TCP-IP卷一和券二的精简版,有兴趣的朋友可以下载下来看看,
  • UDP是定义用来在互连网络环境中提供数据报交换的计算机通信的协议。此协议默认是IP下层协议。此协议提供了向另一用户程序发送信息的最简便的协议机制,不需要连接确认和保护复制,所以在软件实现上比较简单,需要的...
  • IEEE 802.1q协议为标识带有VLAN成员信息的以太帧建立了一种标准方法。IEEE802.1q标准定义了VLAN网桥操作,从而允许在桥接局域网结构中实现定义、运行以及管理VLAN拓朴结构等操作。IEEE 802.1q标准主要用来解决如何将...
  • 网络协议分析,包括HTTP,TCP,UDP,IP,ICMP,等协议的分析
  • 网络协议分析器EtherPeek NX 2.1 网络 协议分析器 EtherPeek NX 2.1 使用说明 网络中数据包捕获分析
  • ARP分组的格式如下图: 字段1是ARP请求的目的以太网地址,全1时代表广播地址。 字段2是发送ARP请求的...字段5表示要映射的协议地址的类型,要对IPv4地址进行映射,此值为0x0800。 字段6和7表示硬件地址长度和协...
  • TCP协议的应用 TCP包结构 源端口号( 16 位):它(连同源主机 IP 地址)标识源主机的一个应用进程。 目的端口号( 16 位):它(连同目的主机 IP 地址)标识目的主机的一个应用进程。这两个值加上 IP 报头中的源...
  • 里面有十套网络协议的试题,可以当做参考用作期末复习。
  • 网络协议分析nbns协议

    2017-10-30 05:41:34
    有没有大神指点下怎么用计算机模仿出 nbns协议 并进行抓包 用wireshark抓包 急~~
  • ICMP协议理论知识 ICMP位于TCP/IP(五层版)协议网络层,主要在路由器之间传递控制消息,因为IP协议采用面向无连接,不可靠服务,所以ICMP用于尽力避免IP协议产生的错误,所以ICMP主要功能是:差错控制,查询诊断 ...
  • 网络协议分析 (最全)

    2016-11-25 15:35:19
    网络协议分析 原文博客地址:网络协议分析 知乎专栏&amp;&amp;简书专题:前端进击者(知乎)&amp;&amp;前端进击者(简书) 1.基于Fiddler的HTTP/HTTPS协议分析 关于Fiddler: Fiddler是一款由C#开发...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,474
精华内容 7,389
关键字:

网络协议分析