TCP实战
在学习完理论技术后,在实战中运用下,来更好的理解知识这里使用的是wireshark
wireshark常用语法
过滤某个ip 同时 过滤端口号58315
ip.addr ==ip and tcp.port == 58315
过滤ip
ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IP
过滤端口
tcp.port eq 80 // 不管端口是来源的还是目标的都显示
过滤协议
tcp
udp
arp
过滤MAC
eth.dst == A0:00:00:04:C5:84 // 过滤目标mac
eth.src eq A0:00:00:04:C5:84 // 过滤来源mac
TCP参数过滤
tcp.flags 显示包含TCP标志的封包。
tcp.flags.syn == 0x02 显示包含TCP SYN标志的封包。
tcp.window_size == 0 && tcp.flags.reset != 1
wireshark的使用
我们使用ping来测试一下,以下是抓到的信息的个
字段的意义
报文内容
TTL什么意思? 超时重传的最大时间
TTL值默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的默认TTL值为128,Win7系统的TTL值是64,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。由发送主机设 置。
数据组装格式
这里的ICMP可以替换为TCP等,核心思路就是发送端,数据每到新的一层结构,就加上这层的数据头,层层嵌套,到了接受端的时候,再层层剥离,每到对应的层就去除对应的头,直到到达引用层就是单纯可读的数据了
实战
随便打开一个网页,观察wireshark里的数据
三次握手详解:
这里的No=159,169, 170 就是tcp的三次握手
58315就是浏览器打开网页发起请求的端口,8080就是服务器接受到的端口
在第一次握手中(No=159)客户端发送SYN标志位,发送seq
在第二次握手中(No=169)服务器发送ACK,SYN标志位,ack=seq+1 seq=0,ack是确认应答
在第三次握手中(No=170)客户端发送ACK标志位,同事将seq=0+1=1返回,表示确认应答
三次握手结束后,下一个请求的序列号就是171 可以看到这个请求是HTTP请求,也就是说三次握手成功了
四次挥手详解
这里的No=1906,1907,1908,1914 就是tcp的4次挥手,可以看到在建立链接期间,服务器传给了客户端很多次的数据,传完后就开始4次挥手了
第一次挥手服务器向客户端发起FIN标志位
第二次挥手浏览器返回ACK
第三次挥手浏览器发起FIN请求关闭通道
第四次挥手服务器返回ACK
流量图
Wireshark 可以用时序图的方式显示数据包交互的过程,从菜单栏中,点击 统计 (Statistics) -> 流量图 (Flow Graph),然后,在弹出的界面中的「流量类型」选择 「TCP Flows」,你可以更清晰的看到,整个过程中 TCP 流的执行过程: