简介: 基于网络协议与相关工具对网站与APP应用数据交互流程进行分析。
关键词:TCP、HTTP、HTTPS、HTTPDNS、Chrome、tshark、Charles、fidder、VirtalXposed
关键词:TCP、HTTP、HTTPS、HTTPDNS、Chrome、tshark、Charles、fidder、VirtalXposed
1、常用通信协议基础
1.1、TCP/IP协议族简介
TCP/IP是一个协议族的统称,里面包括了TCP(传输控制协议)和IP(网际协议/因特网互联协议)等一组网络协议。
TCP/IP协议族可分为应用层、传输层、网络层、网络接口层,即为四层模型(协议)。
TCP/IP协议的发送主机从上自下将数据按照协议封装,而接收数据的主机则按照协议反向读取。
由于这种结构非常接近与“栈”的概念,所以也把TCP/IP协议族称为TCP/IP协议栈。
数据包按照层级由上到下层层封装依次为:
应用层:为具体传输的数据内容,包含HTTP、FTP等协议
传输层:包含TCP和UDP协议,负责标记数据序列号和端口等信息
网络层:主要为IP协议,负责对数据加上IP地址等信息
数据链路层:为数据包加入一个以太网协议头,并进行编码
物理层:负责网络的传输,这个层次的定义包括网线的制式,网卡的定义等。
图形与指标切换TCP 协议在 IP 协议提供的主机间通信功能的基础上,完成这两个主机上进程对进程的通信。同时TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,因此只能用于端到端的通讯(区分于UDP协议)。
TCP数据包中包括序号和确认机制,所以未按照顺序收到的包可以被排序,而损坏或者丢失的包将会被重传,因此TCP协议具有高度的可靠性。
当IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP将它连接建立的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。
1.2、TCP协议
1.2.1、TCP报文结构
TCP报文结构TCP报文头部结构:
TCP报文头部信息结构说明:
编号 | 名称 | 说明 |
---|---|---|
1 | 源端口/目的端口 | 标识报文的返回地址和接收方计算机上的应用程序接口 |
2 | 序号/确认号 | 序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。确认号即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。 |
3 | 数据偏移/首部长度 | 由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。 |
4 | 保留 | 为将来定义新的用途保留,现在一般置0。 |
5 | 控制位 | 包含:URG ACK PSH RST SYN FIN,共6个标志位,每一个标志位表示一个控制功能。 |
6 | 窗口 | 滑动窗口大小用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。滑动窗口大小标记是一个16bit字段(最大为16个1),因而窗口大小最大为65535字节。 |
7 | 校验和 | 校验和(奇偶校验)是对整个的TCP 报文段,包括 TCP 头部和TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。 |
8 | 紧急指针 | 只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。 |
9 | 可选项 | 可选字段包含最长报文大小,时间戳等选项。 |
10 | 数据包 | TCP 报文段中的数据部分是可选的。例如在一个连接建立和一个连接终止时,双方交换的报文段仅有TCP 首部;在处理超时的许多情况中,也会发送不带任何数据的报文段。 |
TCP报文头部信息解析实例:![]() |
1.2.2、TCP报文控制位
TCP报文控制位信息结构说明:
编号 | 名称 | 说明 |
---|---|---|
1 | URG | 紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。 |
2 | ACK | 确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。 |
3 | PSH | push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。 |
4 | RST | 重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。 |
5 | SYN | 同步序号,用于建立连接过程。在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。 |
6 | FIN | Finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。 |
TCP报文控制位信息结构说明解析实例:![]() |
||
###1.2.3、TCP连接过程 | ||
![]() |
1.3、HTTP协议
1.3.1、HTTP协议简介
超文本传输协议是一种客户端和服务端请求和应答的标准,是应用层面向对象的无状态通信协议。
HTTP协议在TCP连接的基础上使用统一资源标识符(URI)来建立连接和传输数据。
(1)客户端与服务端:
HTTP客户端(Client)是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
HTTP服务器(Service)是一个应用程序(通常是一个Web服务,如Apache Web服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
(2)请求内容:
HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求;
HTTP请求由状态行、请求头、请求正文三部分组成;
状态行:包括请求方式(Method)、资源路径(URL)、协议版本(Version);
请求头:包括一些访问的域名、用户代理、Cookie等信息;
请求正文:就是HTTP请求的数据。
(3)响应内容:
HTTP响应是服务端收到了客户端发来的请求后,根据请求中的要求,做出具体的动作