【1】网络协议头的分析 [了解]
【2】wireshark抓包工具
一.抓包工具的使用:
1. 安装
虚拟机 : sudo apt-get install wireshark
windows: 小飞机
注:抓包的过程,就是抓网卡流经的一些数据。启动时不加sudo找不到网卡,没有办法找到内容。
wireshark可以用来抓包,必须是流经网卡的包:
两台不同的主机通信 或 两台不同的操作系统(windows linux)之间 才可以进行抓包
服务器端代码运行在ubuntu
客户端代码运行在windows下
使用流程:
1. 先运行服务器
2. 打开TCP/UDPbg
3. wireshark
抓包工具界面如下:
过滤其他无关的包:
客户端连接服务器,产生握手包:
发送消息:
客户端和服务器断开,产生挥手包 :
【3】抓包工具与包头分析:
【4】以太网完整帧格式:
对于网络层最大数据帧长度是1500字节(MTU: 最大传输单元)
对于链路层最大数据长度是1518字节(1500(网络层)+14(以太网)+4(CRC检错))
TCP粘包、拆包发生原因:
发生TCP粘包或拆包有很多原因,常见的几点:
1、要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
2、待发送数据大于MSS(传输层的最大报文长度),TCP在传输前将进行拆包。
3、要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。
粘包、拆包解决办法:
解决问题的关键在于如何给每个数据包添加边界信息,常用的方法有如下:
1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,
通过读取包首部的长度字段,便知道每一个数据包的实际长度了。
2、发送端将每个数据包封装为固定长度(不够的可以通过补0填充);
这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。
3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。
以太网头:
以太网中封装了 目的mac地址 以 及 源mac地址, 还有ip类型, 以太网又称之为mac头 -快递员
切换网络时, ip地址会改变, mac地址不会改变
0x0800 只接收发往本机的mac的ip类型的数据帧
0x0806 只接收发往本机的ARP类型的数据帧
ARP: ARP协议用于将IP地址解析为MAC地址。(数据的封包传输中,既需要知道对方IP,也需要知道MAC)
RARP: RARP协议则是与ARP相反的过程,它用于将MAC地址解析为IP地址。
0x8035 只接受发往本机的RARP类型的数据帧
0x0003 接收发往本机的MAC所有类型: ip,arp,rarp数据帧, 接收从本机发出去的数据帧,
当打开混杂模式打开的情况下,会接收到非发往本地的MAC数据帧