读《Wireshark网络分析就这么简单》读书笔记

晚上花了两个多小时看完这本书,记录下一些看书过程中的笔记。

一、问题:A和B 是否能正常通信?

两台服务器A和服务器B的网络配置 

A                                                      B

192.168.26.129                        192.168.26.3

255.255.255.0                           255.255.255.224

192.168.26.2                              192.168.26.2

 

1.服务器B通过ARP广播查询默认网关192.168.26.2的mac地址,B 根据自己的子网掩码和ip地址与操作,计算出A与B属于不同子网,跨子网通信需要 默认网关的转发,要和默认网关通信要获得其MAC地址    所以第一个ARP包  who has 192.168.26.2?tell 192.168.26.3

2.默认网关192.168.26.2向B回复了自己的MAC地址  MAC地址是00开头的都是Vmware公司

3.B的源地址是 192.168.26.3 目的地址是 A的 IP地址,请求默认网关把包转发给A

4.网关把B发出的ping请求转发给A,B收到了A的ARP广播,A看来B与自己同网段,同网段子网通信无需网关参与,通过ARP获取对方的MAC就可以

5.B回复了A的arp请求 把mac地址告诉A,源地址是192.168.26.3 目的地址 192.168.26.129  ICMP Echo (ping)request 

6.B收到了A的ping回复,从mac地址知道这个包直接丢过来的不是通过默认网关转发的

 

B----ping请求---网关-----ping请求----A-----回复B

*ip地址和子网掩码计算出是不同的网段通信,通信需要ARP广播获得对方的mac地址,ARP不能跨越子网,需要默认网关转发,之后通过mac地址直接互相通信

*ip地址和子网掩码同网段,则可以直接通过mac地址通信,直接丢包给对方

 

二、抓包技巧

1、只抓包头,在wireshark上的 Capture---->Options ,limit each packet to  80字节 这样每个包只抓 前80个字节,TCP层、网络层、数据里娜鲁曾的信息都可以包括应用层则差不多200字节,同理

tcpdump -i eth0 -s 80 -w /tmp/tcpdump.cap

 

2.只抓必要的包

在wireshark上的 Capture---->Options,capture filter 输入host 10.32.200.131,同理

tcpdump -i eth0 host 10.32.200.131  -w /tmp/tcpdump.cap

3.过滤

ip.addr eq<IP地址> && tcp.port eq<端口号>

 

三、TCP

三次握手 交换信息  四次断开

由于连接是双向的  建立连接时  双方都要发一个SYN,关闭连接时,双方都要发一个FIN

RST 用于重置混乱的连接,或者拒绝一个无效的请求

 客户端   SYN  Seq=X  服务器

               SYN  Seq=Y,Ack=X+1

               Seq=X+1,ACK=Y+1

 

四、kerberos

1、原理分析

  Kerberos简单来说就是一个用于安全认证第三方协议,它采用了传统的共享密钥的方式,实现了在网络环境不一定保证安全的环境下,client和server之间的通信,适用于client/server模型,由MIT开发和实现。

  Kerberos的神秘之处在于,它并不要求通信双方所在的网络环境是安全的,即使通信过程中数据被截取或者篡改依然不会影响它的正常工作,它提供的认证是双向的,不仅能保证Server不被错误的Client使用,同时也能保证Client不使用错误的Server。同时Kerberos又严重依赖于时间,时间戳也是Kerberos用来保证通信安全的重要手段,这个一般通过通信双方同时访问同一个时间服务器来实现。Kerberos也能达到单点登录的效果,即当Client通过了Kerberos server的认证后,便可以访问多个Real Server。

2、Kerberos原理浅析

  在实际的应有场景中通常有三个角色,即需要访问服务的Client,提供服务的Application Server,以及提供安全认证的第三方Kerberos服务器KDC(Key Distribution Center)。它们彼此之间的认证、通信的数据流如下图所示。

      

  仔细研究过上图之后,你可能会发现你能看明白的东西实在有限,而想要把Kerberos原理弄明白实在不是一件容易的事,不过可以庆幸的是Kerberos是用传统的共享密钥的方式实现的,这个概念对大家来说并不陌生,同时Kerberos认证还加了时间戳,有效时间,信息对比等伎俩,所以花时间细细读下来你依然能看明白,如果此时你就迫不及待的想研究的话你可以戳这里这里或者这里。现在,我们来讨论下Kerberos的认证的一个部分,我认为只要这个部分理解了,其他的都可以递推出来。如下图:

       

Client master key: KDC中存储的Client的密钥

Server master key: KDC中存储的Server的密钥

Sclient-Server:Client与Server之间的会话密钥

Client Info:记录了Client本身的Ip等基本信息

首先 Client询问KDC,我想访问某个Server,然后KDC会将会话密钥Sclient-Server用Client master key加密后传送给Client;与此同时,KDC也会将会话密钥Sclient-Server连同Client的基本信息打包用Server master key加密也发给Client,并经Client转发给Server,至此Client与KDC的交互完成。

然后,Client用自己的master key解密KDC传过来的第一个包,解密后获得会话密钥Sclient-Server,并用这个密钥加密自己的的信息和时间戳打包后传送给Server,此时Client开始和Server交互,如下图:                                    

      

Server会收到两个数据包,一个用会话密钥加密,一个用自己的master key加密,Server先用自己的master key解密获取会话密钥和一份关于Client的信息,然后Server拿到解密后获取到的会话密钥再解开另外一个数据包,获得另一份关于Client的信息和时间戳,至此Client和Server的交互完成。

下面我们解释下这样传输数据的原因,为什么传递这些数据

1,上面有个数据包是KDC经Client转发给Server的,为什么不直接发给Server?

因为Server可能给多个Client提供服务,这样Server需要维护一个Client和会话密钥的对应表,这对Server是一个负担。

此外,因为网络传输的不确定性可能Client和Server并不能都及时获取到会话密钥,假如有一方获取失败,那么Client就不能访问Server

2,为什么要发两份关于Client的信息给Server?

通过这两份数据的对比,Server就能判断出是不是对的Client在访问服务。

3,Client是如何判断自己在访问对的Server呢?

因为Client给Server的一个数据包是用Server的master key来加密的所以只有对的Server才能解密。

4,为什么要用会话密钥

通信方的master key是长期有效的,如果在网络上传输,一旦被截取,理论上来说只要有足够的时间是可以破解的,所以我们才用临时的会话密钥来通信,一段时间后会话密钥会过期,同时时间戳也防止了,恶意用户重复使用同一个数据包。

5,为什么要用时间戳?

如果Client向Server传送的数据包被其他的Client截取,然后自己拿来向Server请求服务这,这样就会出问题,那么引入时间戳后,Server收到请求后将从解密后的数据包中获得的时间戳和当前时间对比,一旦超过一定范围将直接拒绝请求;所以,正如前面所说,Kerberos高度依赖时间同步服务。

事实上这个并不是Kerberos认证的整个过程,KDC实际上由AS和TGS两部分组成,你可以将TGS视作一个Server,然后还沿用上面所说的步骤来分析,这样就可以基本上梳理出Client访问Server的一个完整的过程了。

这些东西可能依然难于理解,你可以借助Kerberos经典会话中的场景来理解,请戳这里或者这里

 

五、一些其他

一般存储设备都是读比写快

网络读文件 大带宽到小带宽 很容易出现拥塞

写则相反,因此拥塞率较低

卡顿可能是TCP乱序导致的重传

 

posted @ 2018-10-09 23:00  陈晓猛  阅读(1775)  评论(1编辑  收藏  举报