| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> Wireshark零基础入门到实战(二)协议篇 -> 正文阅读 |
|
[网络协议]Wireshark零基础入门到实战(二)协议篇 |
文章目录上一篇我们讲了Wireshark零基础入门到实战(一)基础篇 1 ARP协议的数据包分析查看本地的arp缓存列表
下面看arp请求与响应 arp响应的发送方和接收方互换,切MAC地址都是可用的。 2 Wireshark眼中的IP协议用ICMP中的网络层的来分析IP协议 3 TCP与UDP协议详解TCP三次握手 TCP四次挥手 UDP数据包 4 TCP中也有一个窗口seq与ack的关系: Ack的值表示下一个想要接收的序列号,ack可以对多个数据包累计确认,表示小于当前Ack的值均被确认。 Ack 的值等于请求包seq + len + 1 窗口大小表示客户端可接收的数据的大小: 当窗口大小为0时,就发送零窗口通知,告诉服务端自己不能接收数据了。 服务端怎么知道客户端的窗口啥时候才能使非零,当服务端接收到零窗口通知后,服务端发送保活数据包,客户端告知自己的窗口大小。服务端知道客户端窗口使非零时候就可以继续发送数据了。 5 TCP重传技术的研究发送数据包之后,重传计时器就会启动,重传计时器时间到达之后依然没有收到ack,发送方就会重新发送数据。重传计时器的超时时间每次重传后悔翻倍。 发送方收到接收方连续相同的三个ack时,发送方悔立即重传。 假设发送方发送了1,2,3,4,5数据包,接收方接收了1,3,4,5数据包,2丢失了,怎么处理呢,可以重传2,3,4,5数据包,这样有点浪费,开启sack后,接收方可以告知发送方已经收到1,3,4,5数据包,只需要重传2就可以了。 6 用途广泛的ICMP协议路由跟踪Tracert:用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。 首先,tracert送出一个TTL是1的IP 数据包到目的地,路径上的第一个路由器收到这个数据包,将TTL减1,TTL变为0,所以该路由器会将此数据包丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),tracert 收到这个消息后,便知道这个路由器存在于这个路径上,接着tracert 再送出另一个TTL是2 的数据包,发现第2 个路由器… tracert 每次将送出的数据包的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个数据包抵达目的地。由于tracert向不常见端口(30000以上)发送数据包,因此会收到「ICMP port unreachable」消息,故可判断到达目的地。 tracert的使用:
下面来分析下Itracert的报文 ttl的值从1逐渐增加,ttl减到0,路由器丢失包,并向我们发送路由器的ip等信息。直到ttl的值到14,icmp请求达到目标主机,这样就直到了这一路的路径。 7 容易被忽视的DHCP协议DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。 DHCP的实现分为4步,分别是: DHCP只有当主机的ip地址过期或者重新启动系统的时候才会请求IP地址,可以通过重新启动网卡的方式启动DHCP服务
下面我们抓包来分析,首先看到的是DHCP释放数据包,因为执行了 DHCP服务器收到DHCP发现数据包,发送DHCP响应数据包 上面的过程是IP地址释放,重新请求IP地址的过程。如果是IP地址过期,就需要续租,续租只需要DHCP Request 和 DHCP Ack两个数据包就够了。 8 不可或缺的DNS协议DNS用于解析域名对应的IP地址,客户端发送换一个DNS查询报文,收到一个DNS响应报文,便知道了域名对应的IP地址 DNS域名查询由两种方式,递归查询,迭代查询,如下图所示 递归查询,迭代查询是在本地域名服务器做的进行的,所以客户端只看到看DNS请求与响应。 9 每天都要接触的HTTP协议http请求包含三个部分,三次握手建立连接,请求资源,四次挥手 10 为安全而生的HTTPS协议这里就不详细讲解https的原理了,需要了解原理的,请参考 HTTPS(一) – 基础知识(密钥、对称加密、非对称加密、数字签名、数字证书 HTTPS(二) – SSL/TLS 工作原理和详细握手过程 10.1 https的工作原理https的工作原理可以用下图总结 下图展示了一个完整的https请求的过程,结合抓包的内容,可以看的更清楚。 https的抓包如下: 10.2 第一步 client hello 消息客户端通过发送 “client hello” 消息向服务器发起握手请求,该消息包含:
这里的随机数很重要。我们先记为Random1。 10.3 第二步 server hello 消息包含
10.4 第三步 Server => Client这次传输包含三部分内容
Certificate 这里主要就是把证书发送给Client。客户端拿到证书后就可以进行验证,同时获取到公钥,用于后面Random3的加密。 Server Key Exchange 这个消息是用来发送密钥交换算法相关参数和数据的。这里要提前提一下,就是根据密钥交换算法的不同,传递的参数也是不同的。 常用的密钥交换算法:RSA、DH(Diffie-Hellman)、ECDH(Ellipticcurve Diffie–Hellman)。 这里看到使用的ECDH。 ServerHello Done 这个就是Server来表示自己说完了。类似电影里别人拿对讲机说完话最后会有一个“完毕!”。 10.5 第四步 Client => Server这次传输也包含三部分内容,也是做了一个优化
我们依次解读 Client Key Exchange 这个也是交换秘钥参数。 这里客户端会再生成一个随机数Random3。然后使用服务端传来的公钥进行加密得到密文PreMaster Key。服务端收到这个值后,使用私钥进行解密,得到Random3。这样客户端和服务端就都拥有了Random1、Random2和Random3。这样两边的秘钥就协商好了。后面数据传输就可以用协商好的秘钥进行加密和解密。 Change Cipher Spec 编码改变通知。这一步是客户端通知服务端后面再发送的消息都会使用前面协商出来的秘钥加密了,是一条事件消息。 Encrypted Handshake Message 这一步对应的是 Client Finish 消息,客户端将前面的握手消息生成摘要再用协商好的秘钥加密,这是客户端发出的第一条加密消息。服务端接收后会用秘钥解密,能解出来说明前面协商出来的秘钥是一致的。 10.6 第五步 Server => Client包括三部分
New Session Ticket 包含了一个加密通信所需要的信息,这些数据采用一个只有服务器知道的密钥进行加密。目标是消除服务器需要维护每个客户端的会话状态缓存的要求。这部分内容在后面的扩展部分会讲到 Change Cipher Spec 编码改变通知。这一步是服务端通知客户端后面再发送的消息都会使用加密,也是一条事件消息。 Encrypted Handshake Message 这一步对应的是 Server Finish 消息,服务端也会将握手过程的消息生成摘要再用秘钥加密,这是服务端发出的第一条加密消息。客户端接收后会用秘钥解密,能解出来说明协商的秘钥是一致的。 到这里双方SSL/TLS握手完成。 10.7 Https数据传输接下来就真正的到了接口请求的阶段。TLS的Content-Type为Application Data。 传输的内容也是加密的。 10.8 Session Tickets在TLS握手的最后一步中服务器将包含一个“New Session Ticket”信息,包含了一个加密通信所需要的信息,这些数据采用一个只有服务器知道的密钥进行加密。 这个Session Ticket由客户端存储,并可以在随后的一次会话中添加到 ClientHello消息的SessionTicket扩展中。因此,所有的会话信息只存储在客户端上,Session Ticket仍然是安全的,因为它是由只有服务器知道的密钥加密的。 Session Identifiers和Session Ticket机制通常分别被称为“会话缓存”和“无状态恢复”机制。无状态恢复的主要改进是消除服务器端的会话缓存,从而简化了部署,它要求客户在每一个新的会话开始时提供Session Ticket 直到Ticket过期。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/8 5:07:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |