计算机网络是一门很大的学科,想要学好它很不容易,《wireshark数据包分析实战》这本书把我从TCP/IP等等协议抽象的概念中解救出来,这本书以wireshark软件为基础,对实际的数据包分析,深入浅出的讲解了很多概念,让我们能够实际了解到每一个数据包在网络上何去何从,比如三次握手,四次挥手,IP分片,DHCP协议工作过程等等。这本书很适合在看《TCP/IP详解卷1》之前阅读。
之前有两个很基本的问题困扰过我,看完了这本书问题的答案愈发清晰。
大家也可以思考一下:
1.假设有两台跨网路的主机A和B,通过中间有一台路由器H通信,整个网络也是第一次通信.在主机A给主机B发送其中一个数据包的时候,这个数据包的源目的IP和源目的MAC的变化。
2.MSS的确定,以及是否需要IP分片依靠什么判断,叙述整个过程。
接下去就是wireshark这本书的思维导图:
下面是笔记:
ch1、2 网络基础和监听网络线路
1. 交换机工作在数据链路层,路由器工作在IP层。
2. 在数据链路层,广播地址为FF:FF:FF:FF:FF:FF,在IP层最大的IP地址被保留作为广播地址使用。
3. 混杂模式:允许网卡能够查看所有流经网络线路数据报的驱动模式。
4. 如何确定使用最合适的网络监听方法(按照优先级):
a) 端口镜像。
b) 不可以临时下线,使用ARP缓存中毒。
c) 可以下线,并可以访问网络分流器,那就使用网络分流器。
d) 否则就用集线器输出。
ch4 玩转数据包捕获
1. 合并捕获文件File->Merge。
2. 查找数据包Ctrl+F:Ctrl+N下一个,Ctrl+B上一个
a) Displayfilter通过输入表达式筛选
b) Hexvalue通过输入的16进制数搜索
c) String根据输入字符串
3. Ctrl+M标记数据包。
4. 相对时间参考,设定一个数据包为基准,Edit->Set Time Reference。
5. 捕获选项:Capture->Interface,包括捕获设定、捕获文件设定、停止捕获、显示选项、名字解析选项、过滤器(捕获过滤器和显示过滤器)
过滤器语法:
a) dsthost 192.168.0.10 && tcp port 80
限定词 ID 操作符 限定词 ID
dst目的地为某主机的流量,src来自某主机的流量
b) ether host 00-00-00-00-00-00 流出或流入你MAC地址的流量。
c) icmp[0]==3 偏移量为0处1字节处的整型值为3的ICMP数据包。
d) icmp[0:2]==0x0301 偏移量为0出2个字节的过滤器并与十六进制0301(类型3,代码1)进行比较。
e) tcp[13]&4==4只捕获带有RST标志的TCP数据包。因为RST标志所在位代表的位是4,也就是说这个位被设置为4就代表这个位被设置了。
f) ip.addr=192.168.0.1
g) frame.len<=128 查看长度小于128的数据包 ,还支持and,or等操作符
ch5 wireshark高级特性
1. 查看端点:Statistics->Endpoints
2. 查看网络会话:Statistics->Conversations
a) 最活跃的通信端点不一定包含了流量最大的会话。
b) WHOIS:http://whois.arin.net/ui/查询地址归属。
3. 协议结构分层统计:Statistics->Protocol Hierarchy。
4. 名字解析:
a) MAC地址解析
b) 网络名字解析
c) 传输名字解析
名字解析可能会失败,会产生额外的流量,带来额外开销。
5. 更换解析器:选择一个数据包单击右键选择Decode As。
6. 数据包长度:Statistics->Packet Length->Create Stat。以太网头14字节,IP头20字节,无数据和选项的TCP数据包20字节。
7. 查看IO图:Statistics->IO Graphs
8. 双向时间图:Statistics->TCP Stream Graph->Round Trip Time Graph
9. 数据流图:Statistics->Flow Graph
10. 专家信息:Analyze->Expert Info Composite
a) 对话消息:窗口更新。
b) 注意消息:重传,重复ACK,保活,零窗口探查,窗口已满。
c) 警告消息:上一段丢失,收到丢失的ACK,保活,零窗口,乱序,快重传。
d) 错误消息。
ch6 通用底层网络协议
1. ARP协议:
a) 之所以需要MAC地址,是因为网络中用与连接各个设备的交换机使用了内容寻址寄存器(CAM),它列出了每个端口的所有连接设备的MAC地址。
b) ARP协议首部字段包括协议类型,指出了上层协议的类型,IP协议中也是这样。TCP和UDP两个协议只有在计算伪首部有一个协议字段,但是表达的是当前协议号,UDP为17,TCP为6。
c) ARP请求数据包目的地址ff:ff:ff:ff:ff:ff,目标IP存在,目标MAC地址全0。ARP回复数据包的目标IP,MAC地址就不为空了。
d) 因为ARP只能作用于同一网段,因此代理ARP隐藏了中间经过的网络,使得发送端认为认为它和目的端好像处于同个子网。
e) 免费ARP:目的IP和源IP均为发送主机,目的mac为ff:ff:ff:ff:ff:ff。
i. 查看同个子网是否有另外主机设置了相同的IP地址。
ii. 使收到它的所有主机强制用新的IP地址和MAC地址映射更新缓存。
2. IP分片(IP层):当一个设备准备传输一个IP数据包时,它会比较这个数据包的大小和将要把这个数据包传送出去的网络接口MTU,如果数据包大小大于MTU,那么这个数据包就会被分片。通常在TCP连接中,三次握手会交换两边MSS信息,再选择一个较小的作为报文段长度,最理想的情况就是这个选取的MSS恰好不会再IP层被分片。
3. 确认号表示自己所期望收到的下个序号,即希望对方发送的下一个数据序号。
4. RST标志表示连接被异常中断或拒绝连接请求,即终止通信。
ch7 常见高层网络协议
1. BOOTP自动分配地址发展为DHCP动态主机配置协议。
2. DHCP续租过程:
a) 发现:从0.0.0.0的68端口发往255.255.255.255(独立于网路的广播地址)的67端口。
b) 提供:显示可用IP地址,首先尝试使用ARP提供的硬件地址通信,如果失败,就直接将提供广播出去。事务ID与发现相同。
c) 请求:拥有新的事务ID,此时所请求的IP地址不再是空的。
d) 确认:DHCP在确认数据包中发送所请求的IP,并在数据库记录相关信息。
3. DNS递归查询。一般情况使用UDP,当响应超过一定大小就使用TCP,使得对规模数据的传输更可靠。
4. DNS区域查询:
a) 完整区域传送(AXFR):将整个区域在设备间传送。
b) 增量区域传送(IXFR):仅传送区域信息的一部分。
5. HTTP只被用来发布客户端和服务器的应用层命令,当数据传输时,除了在数据流开始和结束部分,是看不到应用层控制信息的。
ch8 基础的现实世界场景
1. 捕获Twitter的流量:
a) 登陆:采用HTTPS加密传输方式,传输登陆凭证后就关闭了SSL连接。
b) 发送数据和直达数据:可以看到采用POST方法发送数据,并可以在主体中看到发送的信息。他们都是明文未加密的。
c) 在协议分层统计窗口统计流量,发现所有TCP流量都是HTTP。但是显示上面只有12.66%,是因为剩下的84.41%都是纯TCP流量。
d) 通过过滤器查看DNS流量:展开DNS头部,右击Flags:0x0100,选择Apply as Filter->Select,相当于激活过滤器:dns.flags=0x0100
e) 查看HTTP请求:Statistics->HTTP->Requests->CreateStat
2. 无法访问Internet:配置问题
a) 故障表现:ARP请求得到正确响应,但是DNS始终无法正确查询。
b) 故障原因:不接受DHCP分配的地址,而是手动配置了地址信息,并且将默认网关地址设置错了,被设置为默认网关的地址并不是一台路由器,并不能将DNS查询数据包转发到网络外。
3. 无法访问Internet:意外重定向
a) 故障表现:当试图连接目标主机IP和端口时,对方直接发送了带RST标志的TCP包,连接就中断了。
b) 故障原因:对比其他正常设备后发现,在ARP请求和得到相应后,我们没有看到发送给DNS服务器的请求。原因如下:
i. 发起连接的设备在DNS缓存中已经有域名到IP地址的映射。
ii. 发起连接的设备在hosts文件中已经有域名到IP地址的映射。
4. 无法访问Internet:上游问题
a) 故障表现:DNS成功,主机不断的发起SYN包进行TCP连接,但始终失败。
b) 故障原因:Web服务器配置错误、Wen服务器的协议栈崩溃、远程网络部署了数据包过滤设备。
5. 打印机故障:
a) 故障表现:捕获文件中最后一个1个数据包,打印机停止工作。
b) 故障原因:说明工作站尽最大努力交付了数据,但打印机没有响应。因此是内存问题导致打印机无法接收新数据。
6. 分公司之困:
a) 故障表现:从工作站DNS无法解析,下一步到达分公司从服务器发现DNS无响应。
b) 故障原因:总部和分公司之间DNS服务器传送失败。通过查看路由器配置后发现路由器被配置成只允许53端口的UDP流量进入,而53端口的TCP流量被阻止了。
7. 生气的开发者:
a) 故障表现:先过滤出所有FTP流量,任选一个单机Follow TCP Stream进行重组,再另存为,验证原始文件盒提取文件的MD5哈希值。
b) 故障原因:二者哈希值一样,说明网络不是原因,错误在于应用程序出错。
ch9 延迟问题
1. 线路延迟,客户端发送SYN握手包,服务器回应较慢。因为服务器发送一个响应只要非常小的处理量,即使服务器正承受巨大流量负载。同样客户端发送一个GET,服务器在发数据前先发一个ACK确认,同样不需要耗费太多资源。
2. 客户端延迟,ACK并未快速切换到GET,这处理过程的延时表明客户端无法及时执行该动作。
3. 服务器端延迟,服务器的响应GET后,没有及时切换到发送HTTP数据造成了延迟。
4. 当所有努力失败,网络基线将成为检测网络缓慢故障关键数据之一。