网络协议分析03(zhuan 程震老师 用于期末复习)

2022-11-13 09:44:05 浏览数 (2)

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 第三章 ARP与ICMP


特别好的网络总体解析

文章目录

  • 系列文章目录
  • 前言
  • ARP协议
    • 1 ARP工作原理
    • 2 ARP报文结构
    • 3 无故ARP(不懂为啥)
    • 4 硬件地址与IP地址
    • 5 ARP欺骗病毒
  • ICMP协议
    • 1 ICMP原理
    • 2 ping命令
  • 网络地址转换NAT
    • 1 NAT工作过程
    • 2 动态NAT的分类
    • 3 P2P应用穿越NAT
    • 4 实际问题
      • 4.1 校园网的问题
      • 4.2 利用NAT实现共享上网
  • 小型校园网的网络层解决方案
  • 总结
  • TCP协议
    • 1 TCP基本特点
    • 2 TCP报文段的首部格式

前言

非常重要 一定学好


ARP协议

很多教科书和培训教材上,**都把ARP协议划分到网络层。**我想主要的原因在于ARP协议属于TCP/IP协议簇,而在TCP/IP模型中,所有定义的协议至少是在网际层(或称网络层,IP层)。

但是,按照OSI的标准,当数据向下传递时,每层会加上自己的信息,各层互不干扰.这样当网络层的IP包进入链路层时,链路层该如何加这个头部的目标信息呢?它要依靠ARP协议来完成.显然如何加链路头并不是网络层的功能。而且,ARP协议工作时,并不使用IP的包头。所以也有很多人说,ARP是链路层的。 可以说,在TCP/IP模型中,ARP协议属于IP层;在OSI模型中,ARP协议属于链路层。

1 ARP工作原理

网络通信时,用户通常只给出目的IP地址,但又需要目的物理地址,物理地址如何获得?这需要ARP协议。ARP协议的动作过程:

为提高效率,计算机还**使用了ARP缓存,**为防止计算机更换物理地址,ARP缓存中的数据有生存时间。 Windows查看ARP缓存命令:arp -a,添加ARP缓存命令:arp -s 1.1.1.1 22-22-22-22-22-22。

2 ARP报文结构

ARP报文直接封装在以太网帧中传输,类型字段的值是0x0806。

  1. 硬件类型(2字节) 说明硬件地址是何种类型,以太网有不同版本,编号也不相同,目前用的编号是1。 2. 协议类型(2字节) 说明网络层地址是何种类型,IP协议的编号是0x0800。以上两个字段说明ARP可以支持多种链路层协议与多种网络层协议。
  2. 硬件地址长度(1字节) 以太网为6。
  3. 协议地址长度(1字节) IP协议为4。
  4. 报文类型(2字节) 也称Opcode,ARP请求是1,ARP响应是2。
  5. 源硬件地址 发送方(包括请求与响应)的硬件地址。
  6. 源IP地址 发送方(包括请求与响应)的IP地址。
  7. 目的硬件地址 请求中该字段填全0,响应中则为接收方的硬件地址。
  8. 目的IP地址 请求中为需要查询的IP地址,响应中则为接收方的IP地址。

3 无故ARP(不懂为啥)

无故ARP(gratuitous ARP,GARP)用于检查某IP地址是否已有计算机在用。即发送ARP请求询问IP地址为IPa对应的物理地址,若有ARP响应则说明已使用,若无ARP响应则说明未使用。计算机得到一个IP地址时,便使用GARP查看该地址是否已被使用,即发送ARP请求询问自己的IP地址对应的物理地址,若有ARP响应则说明已使用,若无ARP响应则说明未使用。 GARP中,源IP地址与目的IP地址两个字段相同。

4 硬件地址与IP地址

**硬件地址由数据链路层协议使用,位于帧的首部,IP地址则由网络层的IP协议使用,位于IP分组首部。**在不同的数据链路层协议中,定义了不同意义、不同格式的物理地址,某些点对点链路中没有物理地址,有必要在网络层重新为计算机分配一个全球唯一、意义相同、格式相同的地址。 IP数据报在传输过程中一直不变,而运载IP数据报的帧却在不断变化,经多次转发,最终IP数据报到达了接收方。这就像寄信,信在运送过程中不会改变,但运送方式却不断变化,最终到达收信人手中。有了全世界统一的IP协议,各种不同传输媒体、不同数据链路层协议的网络就互相连接在一起了。

5 ARP欺骗病毒

ARP欺骗病毒的原理:中病毒的计算机收到ARP请求后,发送虚假的ARP响应,接收计算机就会收到一真一假两个ARP响应(也可能只收到假响应)。接收计算机使用先到的ARP响应,对后到的不予理会,如果假ARP响应先到,接收计算机就会被欺骗。也有的病毒没有收到请求就发送虚假响应。ARP欺骗病毒还可以欺骗网络设备。也有的病毒拼命发送广播数据,占用网络带宽。从以上讨论可以看出,ARP欺骗的根源在于计算机对收到的数据一律相信,不能分辨真假。 计算机一般只与默认网关通信,这时可用arp命令的-s选项在ARP缓存中添加静态数据,绑定住默认网关IP地址与物理地址的对应关系。 **终极解决方案是:在连接计算机的交换机上,每一个接口划分为一个VLAN,即每一台计算机都属于单独的一个VLAN,**一个VLAN中只有一台计算机。这样一台计算机发出的广播帧影响不到其他计算机,而ARP请求是利用广播帧发送的,这样一来,ARP欺骗病毒只能影响到病毒所在的计算机,但影响不到其他计算机了。这种方案不但可以消除ARP欺骗病毒的危害,还能消除一些计算机乱发广播帧带来的危害。

ICMP协议

1 ICMP原理

IP协议是不保证可靠传输的协议,当IP数据报出现差错时,简单地丢弃它,并不重新传输。仅仅丢弃IP数据报显得有点过分,虽然不能改正差错,但应该报告这个差错,例如,一台路由器发现一个IP数据报的首部出错后,它在丢弃这个IP数据报的同时,还应该向发送方报告这个错误。网际控制消息协议(Internet Control Message Protocol,ICMP)就起到报告差错的作用。 ICMP由RFC 792定义,ICMP的消息封装在IP数据报中,格式如下图所示。类型与代码字段的长度都是1字节,检验和字段长度2字节,用以检测整个ICMP消息是否出错,因为IP数据报仅检测首部是否出错,不包括数据部分,所以ICMP有必要自己进行差错检测。对不同的类型与代码字段,数据部分有不同的内容。

ICMP可以报告多种差错,也可以查询多种信息,所以有很多不同种类的消息。所有ICMP消息都具有类型、代码与检验和这3个字段,但不同种类消息的数据字段并不相同。ICMP消息分为差错报告与查询两大类别,具体类型由类型字段决定,代码字段则决定某类型下的一个子类型。已经定义了很多ICMP消息类型,部分常用类型如下图所示。

并不是对所有差错都要发送ICMP差错消息,例如,当一个装载ICMP差错消息的IP数据报发生差错时,就不应发送ICMP差错消息,因为这容易造成多次反复发送ICMP差错消息。ICMP协议并不是必须的,攻击者利用ICMP消息能够获得一些有用的信息,所以现在很多路由器与防火墙都禁止ICMP消息通过,但基本上不会影响网络的正常运行。 部分常用代码如下图所示。

1.主机不可达 当路由器无法把IP数据报转发到接收计算机时,就丢弃这个IP数据报,并向发送计算机报告主机不可达错误,这通常是因为目的IP地址错误,或者是路由器中的路由表错误。 2.协议不可达 接收计算机收到了IP数据报,但要根据IP数据报首部中的协议字段交付数据时,却没有相应的接收实体,如协议字段为6,说明数据要交给TCP实体,但因某种原因TCP实体没有运行,这时就发生协议不可达错误。 3.源站抑制 当路由器或计算机因网络拥塞而丢弃IP数据报时,除丢弃IP数据报外,还要向发送计算机报告这个错误,发送计算机就知道应该减慢发送速率。 4.生存时间为0 当路由器把IP数据报首部中的生存时间(TTL)字段减为0时,就丢弃该IP数据报,同时向发送计算机报告这个错误。 5.错误的IP首部 当路由器发现IP数据报首部有错误时,就丢弃该IP数据报,同时向发送计算机报告这个错误。 6.回送(echo)请求与回送(echo)响应 一台计算机可向另一台计算机发送回送请求消息,回送请求消息中可有不定长度的任意数据。接收计算机应该返回一个回送响应消息,其中的数据由回送请求消息中的数据原样复制而来。

2 ping命令

首先开发板要解析百度的域名,获取到百度主机的 IP 地址,涉及到 DNS 协议,传输层用的是 UDP 协议 DNS 主机利用 UDP 协议,回复百度的 IP 地址给开发板。 现在开发板要发送 Ping 请求包给百度主机,但是发现百度主机 IP 地址与自己不在同一网段,因此要发送 Ping 请求包给默认网关。 要发送给默认网关的时候,忽然发现并没有默认网关对应的 MAC 地址,因此发送一个 ARP 广播包,如果交换机存储了默认网关的 MAC 地址,就直接告诉开发板默认网关的 MAC 地址,否则就会向所有端口发送ARP广播,直到路由1收到了报文后,立即响应,单播自己的 MAC 地址给开发板。这样开发板就可以把 Ping 包发送给默认网关(路由1)了。 然后路由1 经过路由协议,经过一个个路由的转发,最后发送到了百度的主机上。百度主机检测到 IP 是自己的 IP,接收并处理 Ping 请求,接着百度主机发送一个 Ping 回应报文给开发板。

ping程序就是利用了回送(echo)请求与回送(echo)响应这两个消息,ping程序可以测试两台计算机是否连通,如果连通那么往返时延大约是多少。但是现在为安全计,很多路由器与防火墙都禁止ICMP消息通过,有时用ping程序发现两台计算机并不连通,但是其他程序却能通信,例如,ping不通某个网站,但是却能够用浏览器打开它的网页。 回送请求与回送响应消息除了具有类型、代码、检验和3个字段外,还有标识符、序列号2个字段,都是2字节,以及长度可变的数据部分。标识符用于标识数据是由哪个进程发出的,序列号用于标识这是由该进程发出的哪一个消息。 ping命令常用选项: ping -t :不断发送,Ctrl C停止。 ping -a :将IP地址转换为计算机名。 ping -n :指定发送次数。 ping -l :指定数据长度。 ping -i :指定TTL值。 注意Wireshark中的标识符、序列号都有2种显示方式:BE、LE。 LE:little-endian,多个字节的数据,低字节存于低地址,Intel处理器是这样。 BE:big-endian, 多个字节的数据,高字节存于低地址,TCP/IP先传低地址(高字节)。 我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

网络地址转换NAT

1 NAT工作过程

利用网络地址转换**(Network Address Translation,NAT),使用私有IP地址计算机也能够上网。内部网络的计算机使用私有IP地址,内部网络的出口路由器设置若干个公有IP地址,在此进行地址转**换。现在几乎所有路由器都具有NAT功能。例子如下:

内部 。。。。。。外部 10.1.1.1 。。。。1.1.1.1 10.1.1.2 。。。。。1.1.1.2

这个**方案基本没有实用价值,**根本解决的办法是同时使用运输层的端口号。若干台计算机上网时都转换为同一个公有IP地址,同时要分配不同的源端口号,替换原来的源端口号,以区分这些计算机。这种NAT也叫做网络地址端口转换(Network Address Port Translation,NAPT),现在所说的NAT实际上都是指NAPT。例子如下:

NAT转换表中的一行对应关系称为一个映射。这种NAT叫做动态NAT转换,这是因为NAT转换表中的映射是动态添加的,内网计算机的数据首次外出时,路由器自动为它分配公有IP地址与端口号。 动态NAT转换带来一个新问题:外网计算机无法首先访问内网计算机。这需要静态NAT转换,由管理员手工在NAT转换表中添加映射,如下表所示。

内部 。。。。。。外部 10.1.1.3:80 。。。1.1.1.1:80

2 动态NAT的分类

1.对称型(Symmetric Nat)

当内网计算机A(地址为IPA)中的进程(端口号为PortA),首次通过NAT路由器R访问外网计算机B时,会在NAT转换表生成一个映射:(IPA:PortA–IPR:PortR1)。若该进程再访问B中的另一端口进程或另一计算机C时,会再生成一行映射:(IPA:PortA–IPR:PortR2),即**一个映射只对应于一台外网计算机上的一个端口号。**此时NAT转换表如下表所示。

优点是比较安全,一个映射只能由一台外网计算机上的一个端口号的进程来使用,别的外网计算机或进程不能用来访问内网计算机。缺点是实现比较麻烦。 2.完全锥型(Full Cone Nat) 内网计算机中的进程在NAT转换表中生成一个映射后,可以用它来访问其他外网计算机,不再生成新的映射,就是在NAT转换表中没有“远程计算机”这一列。而且对外网计算机没有任何限制,就是说,一个映射生成后,所有外网计算机都能用它来访问内网计算机。 优点是实现容易,缺点是安全性不够好。 3.受限锥型(Restriced Cone Nat) 与完全锥型类似,但对外网计算机增加了限制。内网计算机首先访问了外网计算机后,该外网计算机才能访问内网计算机。外网计算机不能首先访问内网计算机。 4.端口受限锥型(Port Restriced Cone Nat) 对于受限锥型,某台外网计算机被内网计算机访问后,该外网计算机中的所有端口号的进程就都可以访问内网计算机了。端口受限锥型则要求更高,外网计算机中的某个端口号进程被内网计算机访问后,该进程才可以访问内网计算机,而其他未被首先访问的进程仍不能访问内网计算机。 因为完全锥型最容易实现,所以大多数NAT都是完全锥型。

3 P2P应用穿越NAT

对于P2P应用,客户一般都是利用动态NAT上网,无法互相直接访问。这时需要服务器的帮助,来实现互相访问,这称为打洞。 例如:客户A与B都已访问过服务器S。A与B都需要向S报告自己的本机IP地址与端口号(内网地址与端口号),同时S还能知道来自A与B的数据包中的源IP地址与端口号(外网地址与端口号)。S将这些数据转告A与B,A与B就能确定自己与对方是否处在NAT路由器后面。

1.若双方都没有处在NAT路由器后面,则可以直接互相访问。 2.若只有A处在NAT路由器后面,则它可以直接访问B。 3.若双方都处在NAT路由器后面,则可以利用对方的外网地址互相访问。因为这个外网地址映射是在访问服务器S时产生的,所以如果双方都处在对称型NAT路由器后面,就不能互相访问。一方或双方处在锥型NAT路由器后面,就能互相访问。 4.若一方或双方处在多个NAT路由器后面,利用对方的外网地址也能互相访问。 5.UDP与TCP都适用于上述几种情况,但UDP比TCP打洞的成功率高一些。 6.若UDP与TCP都无法打洞,则A与B间的所有数据只能由服务器中转了。

4 实际问题

4.1 校园网的问题

在某些学校的校园网内,访问互联网一点也不慢,可是从校外访问学校网站,却是较慢(现在有所好转)。这是为什么? 因为教育网与电信运营商网络(公众网)间互访的速率比较低,所以很多学校在接入教育网的同时,又接入了所在地的公众网,如下图所示。图中连接教育网的路由器A是教育网IP地址,连接公众网的路由器B则是公众网IP地址。首先明确一点,学校内一般计算机是私有IP地址或教育网的IP地址,学校网站一般都是教育网的IP地址。

从校内访问公众网时,数据从路由器B出入,路由器B进行动态NAT转换,数据往返路径是图中的①,并不很慢。从公众网访问学校网站时,如果没有静态NAT转换,必须使用网站的教育网IP地址访问,数据往返路径只能是图中的②,这就会比较慢。 对策是在路由器B中为学校网站设置静态NAT转换,从公众网访问学校网站时,可以使用网站的公众网IP地址访问,数据从路由器B出入,数据往返路径是图中的①,就不会再慢了。 从教育网访问学校网站,直接使用网站的教育网IP地址访问即可,数据往返路径是图中的③。

4.2 利用NAT实现共享上网

家用宽带路由器是路由器与交换机的混合体。运营商(ISP)临时分配的IP地址设置在路由器的WAN接口上,家中的计算机接在LAN接口上,所有数据经过路由器时,都经过动态NAT转换。 ISP如何检测共享上网呢?据说ISP可以检测用户发送数据中的源物理地址与源IP地址,若不止一个就是共享上网,这是完全错误的。实际上ISP使用以下手段检测共享上网: 1.数据流量。 2.用户在线时间。 3.IP数据报首部的TTL字段。 4.IP数据报首部的标识字段。 5.网络管理协议SNMP。 6.主动探测。 7.客户端软件。 8.检测软件与硬件。如“网络尖兵”与“用户行为分析系统”等。 综合运用上述手段,可以较为准确地发现共享上网的用户。

小型校园网的网络层解决方案

网络中心机房网络结构图,注意接口聚合。

IP地址分配,注意留有余量。4座楼分别为 172.21.0.0/20、 172.21.16.0/20、 172.21.32.0/20、 172.21.48.0/20, 各有4094个可分IP地址。在172.21.0.0/20内可以再细分为172.21.1.0/24、172.21.2.0/24、172.21.3.0/24、172.21.4.0/24等等,分到每一层楼。 每楼的三层交换机中的路由表,一层楼一行,默认路由代表发往网络中心核心交换机的数据。 核心交换机中的路由表一座楼一行,即172.21.0.0/20等地址各占一行,默认路由代表发往教育网与公众网的数据,它们应该转发到路由器,再从路由器转发到教育网与公众网。 路由器中的路由表第1行(172.21.0.0/16)代表从校外进入校园网的数据。另外,路由器必须把去往教育网与公众网的两类数据分开。教育网的规模远小于公众网,只需在路由表中添加不到100行的数据(如210.44.0.0/15),最后再添加一个默认路由,代表发往公众网的数据。 另外,路由器上需要启用动态NAT。其次,为使校外公众网用户快速地访问校内服务器,需要在路由器上启用静态NAT功能。校内服务器都应该使用熟知端口号访问,若有两个网站,则只能一个使用80,另一个不能再使用80。要想再使用,只能从公众网ISP处付费多申请几个公有IP地址。

总结

原来ping命令利用ICMP协议,internet control message protocol,arp感觉运行在 ??网络层 , icmp运行在 网络层

TCP协议

1 TCP基本特点

TCP是面向连接的,是保证可靠传输的。

2 TCP报文段的首部格式

1. 源端口号与目的端口号(各16位),用于标识应用进程。注意熟知端口号。 2. 序号(32位),每一个字节的数据都有一个序号。它是数据部分第1个字节的序号。两个方向的数据流使用各自的序号,互不相关。初始序号必须随机,原因(1)不重复,(2)安全。 3. 确认号 确认号字段32位,含义是序号在这个确认号之前(不包括确认号本身)的数据都已正确收到。

4. 首部长度(4位),也叫数据偏移,单位4字节。 5. 保留(6位),右边3位用于ECN,即显式拥塞通告。 6. 标志字段6位,每一位都含义,置0时表示无效,置1时表示有效。这6位分别是ACK、SYN、FIN、RST、URG与PSH。 ACK置1时表示确认号字段有效,置0时表示确认号字段无效,这说明并不是每个报文段都确认收到的数据,只有ACK置1时才确认收到的数据。 SYN建立连接时使用,FIN拆除连接时使用。 RST为1表示复位,可以拒绝建立连接,也可以在连接已经建立的情况下,立即拆除该连接。一般都是在出现错误的情况下置1。 URG为1表示紧急数据指针有效,为0则无效。 PSH:接收方在收到PSH为1的数据时,应立即提交给应用进程,而不应等TCP缓冲区满了之后再提交。 7. 窗口(16位),已发送未确认的数据量上限,由接收方控制发送方的发送速率。 8.

8. 检验和(16位)。计算方法同IP协议,但检验伪首部 TCP的所有数据。伪首部:源IP地址(4字节) 目的IP地址(4字节) 0x00(1字节) IP数据报的协议字段(1字节,TCP为6) TCP报文段总长度(2字节)。 9.紧急指针(16位),当URG置1时有效,指出本报文段数据部分中紧急数据的字节数,所以与序号字段相加就是最后一个紧急数据的序号。如何处理紧急数据,由应用层实体决定。 10.选项,如最大报文段长度(MSS),通信双方可以协商一个数据字段的最大长度。又如窗口扩大选项,可以把窗口扩大。再如时间戳,可以视为序号的一部分,相当于延长了序号。TCP首部必须为4字节的整数倍,所以如有选项不够4字节的整数倍,则必须填充。 3 TCP的几个问题

  1. MSS:最大报文段长度,即TCP中数据部分最大长度。MTU:最大传输单元,即帧的数据部分长度上限。
  2. 数据发送时机。大量数据立即发送。对于少量数据: (1)发送方:只有少量数据时等待一小段时间,如再有数据则一起发送,如无则发送刚才等待的数据。(2)接收方:收到数据需要发送确认时,等待一小段时间,此时间段内如果有数据,则连同确认一起发送,如无则直接发送确认。
  3. TCP中的计时器 (1)往返时延测量计时器。(2)发送超时计时器。 (3)持续(坚持)计时器,一种死锁情况:A发向B,将接收窗口设置为0,则B停止发送,A再向B发送接收窗口大于0的报文段,如果本报文段没有数据,则B可能不确认。所以如果本报文段丢失,则死锁:A认为接收窗口已经大于0,等待B发送,而B在等待A将接收窗口设为大于0。 所以接收窗口被设为0的一方(B)设置持续计时器,间隔5-60秒发送1字节新数据,间隔时间指数增长,最长60秒,始终发送。 (4)保活计时器,防止自己不知道对方异常关机。如果2小时内无数据收发,则每隔75秒发送无用数据,如果发送10次后对方无反应,则拆除连接。 用Wireshark查看TCP一个报文段数据。 4 超时重传时间的选择

0 人点赞