用的Wireshark 抓包
1.抓包网卡选择 - WLAN 无线网卡,其他是本地虚拟机的网卡
这里分别是开始捕获、停止捕获、重新捕获、网卡选择,下面是可以过滤选择
过滤tcp包
3次握手: source是源地址, destination是目标地址,info中的SYN是建立连接,syn,ack是一个包两个标记,建立连接+ack 然后 ack应答
syn包:
左边是工具解析的协议层,frame是框架,Ethernet是链路层,右边对应的是他的数据区
数据结构:协议头+数据
数据里面又是对应的高层协议头+数据 层层封包 这里没有抓到链路层的CRC码
链路层 协议头:28位16进制 换算2进制是28*4 = 112位(因为2^4 = 16,一位16进制占用4位二进制)
然后位宽是96位(2进制)【24位(16进制)】(链路层协议固定格式 )
所以链路层协议头是两层数据,第一层96位,第二层16位 (2进制)
第一层:目标MAC和源MAC各占48位,第二层 下一层的协议号占用16位
0800(16进制) 对应 0000100000000000 (二进制)
注:数据长度不够,前面补0,凑足长度
这里目标MAC是WiFi路由的,源MAC是我本机 IPv4协议表示数据包(后面一堆)是IPV4解析
按理来说包最后会有CRC码,没拿到。
网络层协议 - ipV4头数据 (32位宽,主要说下数据)
1.版本4、长度5(头长度:4*5 = 20byte =40位16进制 = 32位2进制)1byte占8位2进制,byte是32进制数据
2.服务器类型
3.总长 52byte (当前协议头+数据包) 头是20,总长52,数据包32byte
4.flag 和 fragmentoffset 标记位、数据偏移量 一个数据包太长,会拆分多个数据包分开发(CRC校验码限制了包长度)
5.time to live : 防环,路由一次-1,减到0就丢弃;路由次数
6.下层协议类型(TCP)、头部校验码
7.源、目标ip
传输层 TCP协议 - 源、目标 端口、序列号、flag标记、windows、校验码、紧急指针
序列号有两个,一个是我这边的,一个是对方的,三次握手过程:
sync的时候随机产生一个,然后后面每次我这边发过去都+1,
对方【sync+ack】的时候生成他的序列号以及记录我的序列号,
ack的时候,我这边序列号+1,并且记录他那边的序列号
flag:消息标记,12位2进制(3位16进制) 开头三位暂时没用(所以一共有九个状态)
syn:建立连接 ack:回复收到 【syn+ack】就是这两个标记位都是1。
reset:报告异常 - 让对方关闭连接,不用ack, 数据包不会接收和发送了。
urgent标记,配合紧急指针,把窗口当前的数据以及当前数据包中紧急偏移的部分数据一起紧急处理掉(窗口清空),然后当前包剩下的数据放窗口里面缓存。
四次挥手:
请求方:fin: 请求关闭连接,不会发送数据了,但是可以接收数据 第一次
应答方:ack: 告诉对方收到了fin包 正常接收、发送数据 第二次
应答方可能还在中途给他发数据 - 没来得及发完的数据包
应答方:fin:可以关闭连接了,不会发数据,等一个ack包 第三次
请求方接收完剩下的数据。。。。
请求方处理完 发送 ack包,请求方关闭,应答方收到 ack包关闭连接 第四次
会话层:Http协议 HTTPS是再TCP和HTTP中间加了一层TLS/SSH协议
HTTP的话直接是明文可以看到HTTP内容,HTTPS只能看到TLS/SSL协议信息,内容是加密的
HTTPS的TCP端口是 443端口