导读:
什么是抓包?换一句话来说,就是抓数据、拦截数据,然后对数据进行分析。数据在网络传输的过程中并不是一个单独的数据流,而是将数据打成一个包发送出去。也就是说,我们的接收的数据是经过一定过程才到达的。数据从开始打包到解包过程中,需要严格的校验,如果校验失败则会发送不成功,我们也将收不到数据。所以,计算机网络是一个开放的整体,内嵌了许多的执法人员,每一个执法人员会按一定的规则来执行他们的职责,以此来保证数据的传输是正确且没有被篡改过的,这个是必要的。当然,如果大家对计算机网络感兴趣可以稍作了解,接下来详细解释什么事TCP/IP协议及分析TCP/IP数据包和数据的封装内容。
一、TCP/IP协议
什么是TCP/IP协议?换句话来说就是一堆协议的总称。在国际网络讨论会上,大家定了TCP协议、IP协议、IMCP协议、ARP协议等子协议统称为一个族类,就叫做TCP/IP协议。这或许就是复杂事物的简单化吧。
那么这一堆的协议肯定一个个地位都是相当的重要的,尤其是TCP和IP协议。
1.什么是TCP协议呢?
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
——————摘自《百度百科》
白话就是,TCP协议是需要建立连接的才能通信的协议。与UDP不同,UDP协议是不需要建立连接的,但是TCP协议是需要建立连接才能够进行通信的。所以TCP有着三次握手四次挥手的一个计算机术语。当然这个相当简单,客户端想要跟服务器建立起连接,那么客户端所要做的就是发送数据告诉服务器和他建立起连接——“我想和你建立连接”,服务器在告诉客户端——“我知道了”,与此携带一个是否确实同一连接的值再次等待客户端最后一个连接确认就行了————“OK了服务端,我们开始玩点刺激的东西吧!!~”。
所以在TCP中,建立连接是必须的!当然,建立连接的过程会受网络影响,无论是网速、网络状况等等,所以这样TCP也是不好的存在,所以无链接通信UDP协议就出现了。。。(剩下大家自行百度吧!)
2.什么是IP协议?
IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。
——————摘自《百度百科》
这个是什么意思呢?通过前面的导读介绍,实际上数据是通过打包的方式传输到网络上的,但是打包该如何去打包呢?我们需要将数据运输到何方呢?这个就是数据包所要做的事情了,数据上在打包的过程中会有源地址和目的地址。顾名思义,源地址就是记录你的数据打包的起源地址,初始地址;目的地址就是打包发送的最终地址。但是这个并不是IP协议所要干的活,IP协议要干的就是将这些包发送给网络,拆包和装包以至于达到不同网络的规格要求罢了。举个例子,发个1G的数据包,网络只允许110MB的包,那么得分成10份传输,但是如何去确定这个包是同一个地址发送和完整的数据呢?这个我们在下面内容细说,关于数据封装成帧。
二、TCP/IP协议抓包分析
1.TCP报文段
首先我们先看一下TCP报文段的格式
IP地址是32位的,mac是48位
所以可以确定ip地址是0-31范围。也就是A-AG(这里)。
(1)源端口和目标端口:各占2个字节,分别写入源端口和目的端口号。
(2)序号:占四个字节。序号范围是[0,2^32-1],增加到2^32-1下个序号会回到0。在一个TCP连接中传送的字节流的每一个字节都按顺序编号,整个要传送的字节流的起始序号必须在连接建立时设置。
(3)确认号:占四个字节,是期望收到对方下一个报文段的第一个数据字节的序号。
若确实号是N,当序号N-1为止的数据都已经正确收到。
(4)数据偏移:占四位,它支出了TCP报文段的数据起始处距离TCP报文段的起始地址有多远。
(5)保留:占六位,保留为今后使用,初始应该置0。
(6)紧急URG(URGent):当URG=1时候,表明紧急指针有效。当URG置为1的时候,发送应用进程就告诉发送方的TCP有紧急数据要传送。于是发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。这时候要与首部中的紧急指针字段配合使用。
(7)确认ACK(ACKnowledgment):仅当ACK=1时,确认号字段有效。ACK=0,确认号无效。同时在TCP中规定,在连接建立后所有报文段都必须将ACK置为1。
(8)推送PSH(Push):当两个应用进程之间进行交互式的通信的时候,有时在另一端的应用进程希望在键入一个命令后立即就能够收到对方的一个相应。在这种情况下,TCP就可以使用推送(push)操作。这时候,发送方的TCP把PSH置为1,并立即创建一个报文段发送出去。接收放TCP收到PSH=1的报文段,就尽快地交付接收应用进程,而不用等到整个缓存都填满了后再向上交付。
(9)复位RST(ReSeT):当RST = 1时候,表明了TCP连接中出现了严重的差错,必须释放连接,然后再重新建立运输连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可以称为重建位或重置位。
(10)同步SYN(SYNchronization) :在连接建立时用来同步序号。SYN=1而ACK=0表明是一个连接请求报文段。若对方同意,此时变成ACK=1和SYN=1,代表同意建立连接。因此,SYN=1就是表示这是一个连接请求或连接接受报文。这个在三报文握手很明显的表现,大家可以自行去了解。
(11)终止FIN:用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已经发送完毕,并要求释放运输连接。这个在四次挥手里面有体现。
(12)窗口:2个字节。窗口值作为接收方让发送方是个设置其发送窗口的依据。同时窗口的值是在[0,2^16-1]之间的整数,这个就是为了降低接收方的数据缓存空间的压力,发送方数据不能够破坏或大于接收方能够容纳的值,所以基于这点存在约束。
(13)检验和:2个字节。检验和字段检验的范围包括首部和数据这两个部分。和UDP用户数据报一样,在计算检验和,要在TCP报文段的前面加上12字节的伪首部。
(14)紧急指针:2个字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。紧急指针指出了紧急数据末尾在报文段中的位置。
(15)选项:长度可变,最长可达40个字节。当没有使用”选项”时,TCP的首部长度是20字节。
常见的TCP/IP协议号
端口号 | 关键字 | 基 本 描 述 |
7 | Echo | 回波 |
9 | Discard | 丢弃 |
11 | Users | 活动的用户 |
13 | Daytime | 日期 |
15 | Netstat | 网络状态 |
20 | ftp | Port方式 |
21 | ftp | 文件传输协议 |
23 | Telnet | 远程登录 |
25 | SMTP | 电子邮件 |
37 | Time | 时间 |
43 | Nicname | 别名查询 |
69 | TFTP | 普通文件传送协议 |
79 | Finger | 用户信息查询 |
80 | HTTP | 超文本传输协议 |
101 | Hostname | NIC主机名服务 |
110 | POP3 | 邮局协议离线协议标准 |
2.IP报文段
先看下ip报文段的格式(图片网上借助)
(1)版本:占四位,指IP协议版本。
(2)首部长度:占四位,可表示的最大十进制长度数值是15。
(3)区分服务:占八位,用来获得更好的服务
(4)总长度:总长度指的是首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节。
(5)标识(identification):占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。
(6)标志(flag):占三位。
- 标志字段中的最低位记为MF。MF=1即表示后面还有“分片”的数据报。MF=0代表这是若干数据报的最后一位。
- 标志字段中间的一位记为DF,意思是“不能分片”。只有当DF=0时才允许分片。
(7)片偏移:占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。片偏移以8个字节为偏移单位。这就是说,每个分片的昌都一定是8字节的整数倍。
总结:
从上述的内容可以看出,TCP数据报格式和IP数据报格式还是存在一定区别的,TCP工作在传输层,IP数据报工作在网络层,所以它们两个的数据格式当然是有很多的区别了。TCP是面向端对端的通信,IP是面向数据的封装、转发,所以所谓的数据封装成帧实际上是将数据打包成一定数据格式,有首部地址和尾部数据地址,其中还有一些FCS校验标志,这些大家想了解的可以自行百度。Thank you to read my article~