TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

一、TCP报文分析

TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

文章图片
TCP协议在网络五层模型中的传输层,TCP提供端到端的传输,保证传输的可靠性,面向连接,需要预先检测连接状态和条件,另一个重要的功能就是提供多路复用,主要通过应用程序提供不同的端口实现。
具体对TCP协议的理解就是它的报文格式了,对任一种协议都是这样,报文格式是协议的主要内容。TCP报文包含的字段和作用如下:
1、16位源端口(Source Port):源主机即本机的端口,由应用程序提供,端口范围为1-65535,1-1023为系统端口,1024-65535为用户自定义端口。平时我们编写服务器都会提供端口,而客户端一般不用,但是客户端同样还是有端口的,只不过没有指定的话会由系统指定。
2、16位目标端口(Destination Port):需要主动连接的主机端口。
3、32位序列号(Sequence Number):受SYN控制位影响,表示初始序列号或数据分段的标识。
4、32确认号(Acknowledgement Number):是否确认收到对应序列号的数据包,确认收到的话序列号+1表示确认。
5、4位首部长度(Headr Length):TCP头的长度。
6、6位保留位(Reserved bits):全部位都是0,留在将来定义新功能。
7、控制位
(1)URG(Urgent):紧急位,指定紧急指针是否有效,配合紧急指针使用,为1则指明紧急数据包。
(2)ACK(Acknowledgement):确认位,指定该数据包是否是确认数据包,指定确认号是否有效。
(3)PSH(Push):推送位,表示有数据需要处理。
(4)RST(Reset):重置位,为1则需要重新连接,一般重连次数是3次。
(5)SYN(Synchronize):同步序列或初始化,表明是否需要新建链接,是否为首次连接的初始序列,指定序列号是否有效。
(6)FIN(Finish):结束位,为1表示请求断开连接。
8、16位窗口大小:类似于缓冲区的大小,这是主机双方协议好的大小,可以在这里做流量控制。
9、16位校验和(Checksum):对这个TCP报文的校验和。
10、紧急指针(Urgent Pointer):URG控制位设置为1时才有效。
11、选项(Options):长度不确定,长度为32位。
12、数据内容(Data)。
一个实际的TCP报头信息例子如下:
TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

文章图片
二、TCP三次握手四次分手我们可以从TCP的报文信息中了解到,其6位的的操作位是比较重要的,控制着TCP整个传输和连接。从TCP建立连接到断开连接,基本起码需要经过三次握手,传输数据,然后到四次分手,过程中都少不了对控制位的使用。
TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

文章图片
1、TCP三次握手过程
  1. 主机client主动发送SYN数据包到服务器server,即Seq=x,SYN=1,序列号随机生成为x,SYN位置1表示32位序列号为初始序列号,主机client需要和server建立连接。
  2. 服务器server收到请求并响应主机client,向client发送SYN+ACK数据包,即Seq=y,Ack=x+1,SYN=1,ACK=1。ACK为1表示这是一个确认包,Ack为32位确认位,将x序列号+1表示已经收到x+1之前的所有数据包。Seq=1,SYN=y,表示服务器也需要和client建立连接。
  3. 主机client收到服务器server的数据包,向服务器发送ACK报文数据,即Seq=x+1,Ack=y+1,ACK=1,ACK为1表示一个确认包,确认内容为y+1,现在可以开始建立TCP连接了。
2、TCP四次分手过程
  1. 首先主机client需要和服务器server断开连接,于是向server发送FIN/ACK数据包,即FIN=1,ACK=1,FIN置1表示请求断开连接。
  2. 服务器server回应请求并发送ACK报文,即ACK=1,这时主机已和服务器断开连接。
  3. 服务器server也向主机client请求断开连接,同样向client发送FIN/ACK报文,即FIN=1,ACK=1.
  4. 主机client同样回应断开请求,发送ACK报文,ACK=1,此时服务器已和主机端口连接,整个TCP连接完整结束。
三、UDP报文
TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

文章图片
UDP(User Datagram Protocol)用户数据报协议是一种面向非连接的传输协议,同样也属于传输层,它仅仅提供有限的错误检查,不保证传输的可靠性,但是传输速度比较快,在进程应用于语音流和视频流的传输,UDP的报文结构如下:
1、16位源端口号:应用服务提供的端口号;
2、16位目标端口号:目标主机应用程序开放的端口号;
3、16位UDP长度:报文的长度,包括报头和数据的长度;
4、16位UDP检验和:将前面的报头信息做一个检验和。
UDP报头的实际例子如下:
TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

文章图片
四、IP协议报文详解
TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

文章图片
IP协议在网络层,IP协议主要提供了IP编址,让主机可以在不同网段之间通信,报头信息解析如下:
1、4位版本号(Version):一般是IPv4或IPv6;
2、4位头部长度(Header Length):IP报头长度;
3、8位服务类型(Type of Service)
4、16位总长度(Total Length):IP报文的总长度,包括报头和数据;
5、16位标识符(Identification),标识每个已切分的数据包;
6、3位标记(Flags):第一位保留,第二位为DF(为1不将数据分包),第三位为MF(为1表示后面还有数据包);
7、13位包偏移(Fragmenet Offset):表示IP包在原数据包中的位置;
8、8位TTL,数据包的存活时长;
9、协议(Protocol):IP报头后面的报文协议;
10、头部检查和(Header Checksum)
11、源IP地址(Source Address):本机IP地址;
12、目的IP地址(Destination):目的IP地址。
下面是一个IP报头的实际例子:
TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

文章图片
五、数据链路层Ethernet以太网协议报文
TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

文章图片
Ethernet以太网协议在数据链路层中,提供MAC编址,提供了主机之间同一网段之间的通信,MAC地址是计算机的物理地址,48位,生产中就烧入,不可更改,它的头部信息如下:
  1. 目标MAC地址(MAC destination address):目标主机的MAC物理地址;
  2. 源MAC地址(MAC source address):本机MAC地址;
  3. 802.1q(可选)
  4. 类型(Type):常见的类型有IPv4,ARP等
  5. 数据(Payload)
  6. FCS(Frame check sequence)
实际报文信息如下:
TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

文章图片
六、Wildpackets Omnipeek网络抓包分析工具简单使用以上的网络模型中的协议对我们的开发都是非常重要的,就编程来说,也有很多人并不了解网络以及网络中重要的协议,使用这个抓包分析工具可以让你对网络的理解更加立体。
1、下载安装
下载地址:Wildpackets Omnipeek抓包分析工具下载
2、创建抓包任务
TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

文章图片
3、点击软件右上角绿色的按钮,开始抓包:
TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

文章图片
【TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析】4、点击右边菜单栏Packets,然后你会看到很多连接,点击一个连接在下面可以看到连接的全部协议报文信息:
TCP、UDP、IP、以太网Ethernet协议报文详解以及使用Wildpackets Omnipeek网络抓包分析

文章图片

    推荐阅读