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

1. 案例学习

观察到TCP超时的重传间隔时间太长,可调整;
观察到网络频繁拥塞的拥塞点在32KB以上,限制拥塞端口在32KB,避免拥塞。

2. NFS协议分析与抓包

RFC 1813.
运行挂载命令(mount)时抓包,
mount 1.1.1.1 :/code /tmp/code
在wireshark里用“portmap||mount||nfs” 进行过滤。

客户端: 我想连接你的NFS进程,该用哪个端口?
服务器:我的NFS端口是2049。
客户端:我来尝试连接下NFS进程先?Null call
服务器:回复收到,能连上。
客户端:我想连接MOUNT服务,该使用哪个端口?
服务器:我的MOUNT端口是1234。
客户端:那我再来试试MOUNT进程能否连上?Null call
服务器:回复收到,能连上。
客户端:我要挂载 /code 共享目录。
服务器:回复请求批准了,以后使用file handle 0x2cc9be18来访问。
客户端:我试试NFS进程能否连上? Null call
服务器:回复收到,能连上。
客户端:我想看看这个文件系统的属性。FSINFO call
服务器:回复信息。

如果看到portmap请求没有得到回复,可以考虑是否防火墙对111端口进行拦截。
如果发现mount请求被服务器拒绝,可以检查下该共享目录的访问控制。

3. TCP 协议基本分析

Seq:表示该数据段的序号。
比如数据段1的起始SEQ号为1,长度为1448(包含了1448个字节),数据端2的SEQ号就对应为1+1448=1449。也就是说,一个SEQ号的大小是根据上一个数据段的SEQ号和长度相加而来。

注意:是基于相同方向的包。如果是返回包或者ACK包,则是不同的SEQ号。也就是说由于TCP是双向的,在一个连接中双方都可以是发送方,所以各自维护了自己的SEQ号和ACK号。

ACK号等于发送方的SEQ和LEN之和,TCP的ACK确认包可以累计,不需要每个包都要ACK。

SYN:表示正在发起连接请求,因为连接是双向的,所以建立连接时,双方都要发一个SYN。
FIN:表示正在请求终止连接,连接是双向的,双方都要发一个FIN。
RST:用于重置一个混乱的连接,或者拒绝一个无效的请求。

如果你在wrieshark中看到一个RST包,需要好好检查确认。

4. TCP的三次握手 建立连接

1)客户端:我能和你建立连接嘛?我的初始序号是X,如果你答应就ACK=X+1。
2)服务器:收到,ACK=X+1。我也想和你建立连接,我的初始序号是Y,如果你答应连接就ACK=Y+1。
3)客户端:收到,ACK=Y+1。

5. TCP的四次挥手 断开连接

1)客户端:我希望断开连接。(FIN标记发出)
2)服务器:收到,断开。
3)服务器:我这边连接也要断开(FIN标记发出)
4)客户端:收到,断开。

6. TCP的发送窗口和接收窗口

1)每个包的TCP层都含有“window size”(win),这个值是在向对方申明自己的接收窗口。对方收到该声明后,则会把自己的发送窗口大小限制在收到接收窗口之内。
2)如果接收方处理数据的速度跟不上接受数据的速度,缓存会被占满,导致接收窗口为0,对方收到后会把发送窗口也调整为0,意味着那段时间不能发数据。
3)发送窗口只能根据传送数据的包的携带数据量来预估。
4)发送窗口决定了一口气能发多少字节,而MSS决定了这些字节要分多少个包发完。例如,发送窗口为15000字节,MSS是1000字节,那就需要发送15个包。
5)TCP window scale
RFC 1323 在三次握手中告诉自己的window scale信息,声明一个shift count,是2的指数,乘以TCP头中的接收窗口,就得到真正的TCP接收窗口了。
6)慢启动和拥塞避免阶段 来刺探拥塞窗口。
发生超时重传后,拥塞窗口会回到最开始大小,然后从慢启动阶段重新开始。
Wireshark里Aalyze >>> Expert Info Composite >>> Notes下可以看到重传,还能看到具体的重传包。
从发出原始包到重传该包的这段时间被称为RTO。RTO长达1秒以上,就对性能影响太大了。
怎么判断包丢失了?凑满了3个dup ack,就触发了快速重传。快速重传不会像超时重传一样处理拥塞端口,因为后面的包都收到了。可以将拥塞开端口调整为临界窗口值加3个MSS,继续保留在拥塞避免阶段,此过程称为快速恢复。
SACK来告诉发送方哪些包没被收到。SACK和NewReno有利于提高重传效率,提高传输性能。
丢包对极小文件的影响比大文件还严重。因为读写一个小文件需要的包数很少,凑不满3个DUP ACK,所以不能实现快速重传,只能等待超时重传。

7)延迟确认 默认200毫秒,如果收到一个包暂时没什么数据发给对方,就延迟200毫秒确认。
Nagel算法,发出去的数据还没被确认前,又又小时据生成,可以凑满一个MSS或者等收到确认后在发出。

7. UDP

1) 如果超过MTU,发送方网络层负责分片,接收方收到分片后再组装。
2) UDP 没有重传机制,所以丢包由应用层来处理。例如需要重传整个写操作。
3) 分片机制存在弱点,会成为黑客攻击目标。More fragments里的flag如果为1,表示后续还有分片。如果黑客持续快速发送flap为1的UDP包,接收方一直无法组装包,会可能耗尽内存。

8. DNS

A记录:是指从域名解析到IP地址。
PTR记录:与A记录功能相反,能从IP地址解析到域名。
SRV记录:指向域里的资源。
CNAME记录:又称为Alias,别名的意思。比如说服务器1.1.1.1同时提供WWW, MAIL和MAP服务。其中WWW的A记录指向了1.1.1.1,还有两个别名记录mail和map指向了WWW。也就是说客户端查询mail.abc.com或者map.abc.com时找到1.1.1.1,然后把结果返回客户端。
一般都是递归查询。客户端传给上游DNS服务器,上游DNS服务器和权威DNS服务器查询好后,返回结果给客户端。
还有种时迭代查询,就是客户端先查到根服务器的地址,再从根服务器查到权威服务器,再往下查,直到查到想要的结果。dig命令加上+trace参数可以强迫客户端采用迭代查询。
DNS的循环工作模式(round-robin),可广泛用于负载均衡。
配置多个IP地址给同一DNS域名,由于不同客户端查询到的结果顺序不同,而且一般采用结果种的第一个IP,所以大量客户端均衡分配到不同的服务器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值