网站主页模板 优帮云,做一个卖车的网站该怎么做,阿里云服务器如何配置多网站,wordpress影视网序言 在传输层 Tcp 的学习中#xff0c;我们了解了 三次握手和四次挥手 的概念#xff0c;但是看了这么多篇文章#xff0c;我们也只是停留在 纸上谈兵。 欲知事情如何#xff0c;我们其实可以尝试去看一下具体的网络包的信息。在这篇文章中将向大家介绍#xff0c;在 L…序言 在传输层 Tcp 的学习中我们了解了 三次握手和四次挥手 的概念但是看了这么多篇文章我们也只是停留在 纸上谈兵。 欲知事情如何我们其实可以尝试去看一下具体的网络包的信息。在这篇文章中将向大家介绍在 Linux 上抓包工具 tcpdump 的基本使用。 一、tcpdump 的使用
1. 安装 大多数 Linux 系统都自带了这个工具你可以如下指令来查看是否安装就绪 tcpdump --version 如果不存在的话我们使用指令安装一个就好 sudo apt-get install tcpdump 现在我们就可以正式开始学习如何来使用这个简单且强大的工具了。
2. 基本使用 tcpdump 的基本语法是 tcpdump [选项] [表达式] 捕获所有网络数据包 sudo tcpdump 该条指令将捕获你所有的进出网络数据包但是我们大多时候只需要获取特定条件的数据包即可所以我们需要对数据包进行筛选。
按接口过滤 sudo tcpdump -i [接口] 通过 -i 选项来指定要捕获的接口接口的信息你可以使用 ifconfig 来查看。
按协议过滤 sudo tcpdump [协议] 常见的协议tcpudpicmp 这个选项很重要等会我们就需要借助它来查看我们三次握手和四次挥手的过程。
按 IP 地址过滤: sudo tcpdump [dst/src] [IP] 在这里的 dst 代表的是捕获发送到特定地址的包而 src 代表的是捕获来自特定地址的包。
按端口过滤 sudo tcpdump port [端口号] 组合多个过滤条件 使用逻辑运算符 and、or 和 not 来组合过滤条件。例如我需要捕捉某个源地址的某个端口的 tcp 网络数据包 sudo tcpdump tcp and src 129.0.10.12 and port 8888 // 示例 基础的使用说到这里就结束了咋们实战抓一下包。 二、三次握手 现在我们简单写一个用于网络通信的套接字编程然后开启对本地端口的监听 sudo tcpdump -i lo tcp and port 8888 大家注意咯我使用的是本地环回进行测试所以我们需要指定接口 lo不然默认的接口是 eth0这样就不能捕获我们的数据包之后我们指定了进行通信的接口 8888。 现在我们启动客户端发起连接捕获到如下信息 现在我们来介绍一个三次握手中具体包含了什么信息 第一次客户端发送 SYN 包 时间戳: 18:06:37.782287 源地址: localhost.48058即源端口为 48058 目标地址: localhost.8888即目标端口为 8888 TCP 标志: Flags [S]表示这是 SYN 包即请求建立连接。 序列号: seq 3613884573这是发送方的初始序列号。 窗口大小: win 65495接收方的接收窗口大小在 TCP 握手过程中表示能够接收的最大字节数。 第二次服务器响应 SYN-ACK 包 时间戳: 18:06:37.782298 源地址: localhost.8888即目标端口8888现在变成了源端口。 目标地址: localhost.48058即源端口48058现在变成了目标端口。 TCP 标志: Flags [S.]表示 SYN-ACK 包服务器响应客户端的连接请求。S 表示 SYN同步序列号. 表示 ACK确认响应。 序列号: seq 3949276879服务器的序列号。 确认号: ack 3613884574服务器确认客户端的初始序列号 1表示已经收到客户端的请求。 窗口大小: win 65483接收方窗口大小。 第三次客户端发送 ACK 包确认连接 时间戳: 18:06:37.782307源地址: localhost.48058客户端。目标地址: localhost.8888服务器。TCP 标志: Flags [.]表示 ACK 包即客户端确认服务器响应的连接建立。确认号: ack 1表示客户端确认了服务器的响应包。窗口大小: win 512接收窗口大小。长度: length 0此包也没有携带数据只有头部。
所以我们直到有三次握手但是没想到三次握手背后干了这么事情
客服端服务端初始化序列号两者通告接受窗口大小协商出一个合适的 MSS 值
现在再让我们看看四次挥手吧 三、四次挥手 现在服务端断开连接之后客户端也断开了连接这中间发生了什么了 现在我们就不逐个字段的介绍了但是很奇怪呢怎么四次挥手变成三次了我们理一下
服务端发送 FIN 包表示断开连接请求收到服务端的消息后客户端发送了 ACK 表示收到并且发送 FIN 包表示断开连接以捎带应答的方式发出收到客户端的信息后服务端发送 ACK连接正式断开
所以中间分开发送的 ACK 和 FIN 被合并了这很合理之所以分开发送的原因是因为服务端还存在未处理完的数据并未发送给客户端需要处理并发送后再断开但是我们并没有剩余的数据所以直接就断开了 四、总结 在这篇文章中我们介绍了抓包工具 tcpdump 的使用并且还实践了利用该工具抓取三次握手四次挥手过程中数据包的信息。