目录

  • 一、HTTP协议
    • 1.HTTP是什么?
    • 2.HTTP协议如何使用TCP连接
    • 3.HTTP请求报文结构
    • 4.HTTP响应报文结构
    • 5.HTTP中get和post的区别
    • 6.HTTP1.1与1.0的区别
    • 7.HTTP2.0与1.1的区别
  • 二、TCP协议
    • 1.TCP是什么?
    • 2.应用
    • 3.三次握手是什么?
    • 4.为什么要三次握手?
    • 5.四次分手?
    • 6.为什么要四次分手?
  • 三、用工具Wireshark进行抓包
    • 1.WireShark抓包界面
    • 2.TCP包的具体内容
    • 3.Wireshark抓包分析TCP三次握手
  • 四、参考文献

一、HTTP协议

1.HTTP是什么?

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型,是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在之上的一种应用。
HTTP连接最显著的特点是:客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

2.HTTP协议如何使用TCP连接

模拟TCP/HTTP关系的就是:电话/人,先连接,后通信的模式。

3.HTTP请求报文结构

(1)HTTP请求报文格式

2)HTTP请求报文内容详解

  • 请求行:由3部分组成,分别为:请求方法、URL(见备注1)以及协议版本,之间由空格分隔。
  • 请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。
  • 为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL,
  • 协议名称及版本号,协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1。
  • 请求头部,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。 请求头部的最后会有一个空行,表示请求头部结束,接下来为请求正文。
  • 请求正文,可选部分,比如GET请求就没有请求正文。它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。

(3) 生活例子
  快到中午了,张三丰不想去食堂吃饭,于是打电话叫外卖:老板,我要一份[鱼香肉丝],要12:30之前给我送过来哦,我在江湖湖公司研发部,叫张三丰。
  这里,你要[鱼香肉丝]相当于HTTP报文体,而“12:30之前送过来”,你叫“张三丰”等信息就相当于HTTP的报文头。它们是一些附属信息,帮忙你和饭店老板顺利完成这次交易。

4.HTTP响应报文结构

1)HTTP响应报文格式

2)HTTP响应报文例子

状态行:由3部分组成,分别为:协议版本,状态码,状态码描述。状态代码:为3位数字,200299的状态码表示成功,300399的状态码指资源重定向,400499的状态码指客户端请求出错,500599的状态码指服务端出错(HTTP/1.1向协议中引入了信息性状态码,范围为100~199),常见如下:

响应头部,常见如下:

5.HTTP中get和post的区别

(1) GET-从指定的服务器中获取数据。使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器:/test/demo_form.jsp?name1=value1&name2=value2,特点:

  • GET请求主要用以获取数据;
  • GET执行效率略高。
  • GET请求有长度限制,提交的数据最多只能是1024字节;
  • GET请求能够被缓存、会保存在浏览器的浏览记录中、请求的URL能够保存为浏览器书签;

(2) POST-提交数据给指定的服务器。使用POST方法时,查询字符串在POST信息中单独存在,和HTTP请求一起发送到服务器,特点:

  • POST请求主要用以提交数据给指定的服务器;
  • POST执行效率低;
  • POST请求没有长度限制;
  • POST更加安全;
  • POST请求不能被缓存下来、不会保存在浏览器浏览记录中、请求的URL无法保存为浏览器书签;

6.HTTP1.1与1.0的区别

在HTTP1.0版本,默认使用的是“短连接”(那时候是Web诞生初期,网页相对简单,“短连接”的问题不大);到了1995年底开始制定 HTTP1.1草案的时候,网页已经开始变得复杂,这时候再用短连接的方式,效率太低下了,所以在HTTP1.1中,默认采用的是“Keep-Alive”的方式,即是“长连接”。在请求头部加入了这行代码:Connection:keep-alive,即是“长连接”;TCP连接在发送后将仍然保持打开状态,于是浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

7.HTTP2.0与1.1的区别

HTTP2.0中新的二进制分帧层将HTTP消息分解为互不依赖的帧,然后乱序发送,最后在另一端按照每个包重新组装,就实现了一个连接上有多个请求和响应,从而带来了巨大的性能提升

(1)一个连接可以并行发起多个请求和响应;
(2)并行交错的发送请求、发送响应,请求之间、响应之间户不影响;
(3)消除不必要的延迟,从而减少页面加载时间。

二、TCP协议

1.TCP是什么?

TCP是Tranfer Control Protocol的简称,**TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。**通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。
  首先来看看OSI的七层模型:

在OSI七层模型中,每一层的作用和对应的协议如下:

要进行更深层次的剖析,就需要了解并熟记TCP协议的数据格式和每个字段的含义:

  • Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号;用于区别主机中的不同进程,而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一的确定一个TCP连接;

  • Sequence Number:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节在数据流中的序号;主要用来解决网络报乱序的问题;

  • Acknowledgment Number:32位确认序列号包含发送确认的一端所期望收到的下一个序号,因此,确认序号应当是上次已成功收到数据字节序号加1。不过,只有当标志位中的ACK标志(下面介绍)为1时该确认序列号的字段才有效。主要用来解决不丢包的问题;

  • Offset:给出首部中32 bit字的数目,需要这个值是因为任选字段的长度是可变的。这个字段占4bit(最多能表示15个32bit的的字,即4*15=60个字节的首部长度),因此TCP最多有60字节的首部。然而,没有任选字段,正常的长度是20字节;

  • TCP Flags:TCP首部中有6个标志比特,它们中的多个可同时被设置为1,主要是用于操控TCP的状态机的,依次为URG,ACK,PSH,RST,SYN,FIN。每个标志位的意思如下:

    URG:此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据;

    • ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1,为1的时候表示应答域有效,反之为0;
    • PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队;
    • RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;
    • **SY**N:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全的主机将会强制要求一个连接严格的进行TCP的三次握手;
    • FIN: 表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。
  • Window:窗口大小,也就是有名的滑动窗口,用来进行流量控制;这是一个复杂的问题,这篇博文中并不会进行总结的;

2.应用

当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。在日常生活中,常见使用TCP协议的应用如下:浏览器,用的HTTPFlashFXP,用的FTPOutlook,用的POP、SMTPPutty,用的Telnet、SSHQQ文件传输.

3.三次握手是什么?

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
  (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
   (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack (number )=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  (3)第三次握手:Client收到确认后,检查ACK是否为Client发送的seq+1,即x+1;如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server。Server检查ack是否为Server发送的seq+1,即y+1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手。

4.为什么要三次握手?

概括:为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
  具体:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server,本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求,于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认;server由于收不到确认,就知道client并没有要求建立连接。

5.四次分手?

当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次分手”。
  (1)第一次分手:客户端设置seq=x,向服务端发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示客户端没有数据要发送给服务端了;
  (2)第二次分手:服务端收到了客户端发送的FIN=1,向客户端回复ACK=1,ack=收到的seq+1=x+1,然后客户端进入FIN_WAIT_2状态;服务端告诉客户端,在等待自己去关闭连接;
  (3)第三次分手:服务端向客户端发送FIN=1,设置seq=y,请求关闭连接,同时服务端进入LAST_ACK状态;
  (4)第四次分手:客户端收到服务端发送的FIN,向服务端发送ACK=1,ack=收到的seq+1=y+1,然后主机1进入TIME_WAIT状态;服务端收到客户端的ACK报文段以后,就关闭连接;此时,客户端等待2MSL后依然没有收到回复,则证明Server端已正常关闭,客户端也关闭连接。

6.为什么要四次分手?

TCP是全双工模式,当客户端发出FIN报文段时,表示客户端没有数据要发送了,告诉服务端它的数据已经全部发送完毕了,这时客户端还可以接受来自服务端的数据。当服务端返回ACK报文段时,表示它已经知道客户端没有数据发送了,但是服务端还是可以发送数据到客户端的。当服务端也发送了FIN报文段时,这时表示服务端也没有数据要发送了,就告诉客户端它也没有数据要发送了,就会中断这次TCP连接。
  如果要正确的理解四次分手的原理,就需要了解四次分手过程中的状态变化:
  (1)FIN_WAIT_1: 表示等待服务端的FIN报文。当Socket在ESTABLISHED状态时,客户端想主动关闭连接,向服务端发送了FIN报文,Socket进入到FIN_WAIT_1状态。(客户端)
  (2)CLOSE_WAIT:表示服务端在等待自己去关闭连接。当客户端关闭一个Socket后发送FIN报文给服务端,会回应一个ACK报文给客户端,Socket进入到CLOSE_WAIT状态。(服务端)
  (3)FIN_WAIT_2:当服务端回应ACK报文后,Socket进入到FIN_WAIT_2状态,表示半连接,即服务端要求close连接,还告诉客户端,我暂时还有数据需要传送给你(ACK信息),稍后再关闭连接。(客户端)
  (4)LAST_ACK: 表示服务端在发送FIN报文后,最后等待客户端的ACK报文。(服务端)
  (5)TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即回到CLOSED状态。如果FIN_WAIT1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。(客户端)
  (6)CLOSED: 表示连接中断。当服务端收到ACK报文后,Socket进入到CLOSED状态。(服务端)
参考链接:为什么要三次握,要四次分手

三、用工具Wireshark进行抓包

1.WireShark抓包界面

首先在设置–>网络–>状态里面找到自己电脑当前的网络连接状态

我这里是连接的无线网,所以在捕获选项双击WLAN


说明:数据包列表区中不同的协议使用了不同的颜色区分。协议颜色标识定位在菜单栏视图 --> 着色规则。如下所示

WireShark 主要分为这几个界面

1、Display Filter(显示过滤器), 用于设置过滤条件进行数据包列表过滤。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ek4egdc0-1636371124426)(C:\Users\徐然\AppData\Roaming\Typora\typora-user-images\image-20211108143824121.png)]

2、Packet List Pane(数据包列表), 显示捕获到的数据包,每个数据包包含编号,时间截,源地址,目标地址,协议,长度,以及数据包信息。 不同协议的数据包使用了不同的颜色区分显示。

3、Packet Details Pane(数据包详细信息), 在数据包列表中选择指定数据包,在数据包详细信息中会显示数据包的所有详细信息内容。数据包详细信息面板是最重要的,用来查看协议中的每一个字段。各行信息分别为
(1)Frame: 物理层的数据帧概况

(2)Ethernet II: 数据链路层以太网帧头部信息

(3)Internet Protocol Version 4: 互联网层IP包头部信息

(4)Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP

(5)Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议

2.TCP包的具体内容

从下图可以看到wireshark捕获到的TCP包中的每个字段。

3.Wireshark抓包分析TCP三次握手

1)TCP三次握手连接建立过程

第一步:客户端发送一个SYN=1,ACK=0标志的数据包给服务端,请求进行连接,这是第一次握手;

第二步:服务端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让客户端发送一个确认数据包,这是第二次握手;

第三步:服务端发送一个SYN=0,ACK=1的数据包给客户端,告诉它连接已被确认,这就是第三次握手。TCP连接建立,开始通讯。

(2)wireshark抓包获取访问指定服务端数据包
Step1:启动wireshark抓包,打开浏览器输入www.huawei.com。

Step2:使用ping www.huawei.com获取IP。

Step3:输入过滤条件获取待分析数据包列表 ip.addr == 222.180.166.230

第一次握手数据包

客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图。

数据包的关键属性如下:

SYN :标志位,表示请求建立连接

Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据

Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据
第二次握手的数据包

服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1,即0+1=1, 如下图

数据包的关键属性如下:

Seq = 0 :初始建立值为0,表示当前还没有发送数据

Ack = 1:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)

第三次握手的数据包

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1, 如下图:

数据包的关键属性如下:

ACK :标志位,表示已经收到记录

Seq = 1 :表示当前已经发送1个数据

Ack = 1 : 表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。

就这样通过了TCP三次握手,建立了连接。开始进行数据交互

四、参考文献

1.网络分析工具——WireShark的使用(超详细)

网络抓包与HTTP协议【网络通信编程】相关推荐

  1. 网络抓包与HTTP协议

    目录 一.TCP.HTTP网络协议 1.TCP协议 2.HTTP协议 二.wireshark抓包实验 1.基本界面 2.TCP的三次握手协议 三.fiddler抓包 1.更改设置 2.抓包 四.总结 ...

  2. Wireshark网络抓包分析

    目录 1. 以太网协议头(数据链路层) -- 14byte 2. IP数据头(网络层) -- 20byte 3.  ARP抓包分析 3.1 ARP介绍 3.2 报文格式 3.3 抓包分析 3.3.1 ...

  3. xmpp协议抓包_开源网络抓包与分析框架学习-Packetbeat篇

    开源简介 packbeat是一个开源的实时网络抓包与分析框架,内置了很多常见的协议捕获及解析,如HTTP.MySQL.Redis等.在实际使用中,通常和Elasticsearch以及kibana联合使 ...

  4. (44.1)【APP应用漏洞发现】抓包工具、协议分析、逆向工程

    目录 APP应用漏洞发现 一.抓包工具: 1.1.http/https 1.1.1.Burpsuite: 1.1.2.Charies: 1.1.3.Fiddler: 1.1.4.抓包精灵(安卓): 1 ...

  5. 网络抓包工具wireshark and tcpdump 及其实现基于的libpcap

    最近无意中看到博客园中一篇介绍wireshark的文章,写得不错,它简单清楚介绍了wireshark的使用 简介 wireshark以前叫做Ethereal, 在大学时候的网络课程中就常看到它,它是世 ...

  6. Linux系统无线网络抓包程序(分析手机WIFI MAC地址)

    前面讲述了使用tcpdump和wireshark抓WIFI包,但这只是使用工具的层面,再深一层则是自己写代码实现这个功能.本文在前面文章<Linux系统有线网络抓包程序>的基础上添加实现无 ...

  7. 接口协议之抓包分析 TCP 协议

    TCP 协议是在传输层中,一种面向连接的.可靠的.基于字节流的传输层通信协议. 环境准备 对接口测试工具进行分类,可以如下几类: 网络嗅探工具:tcpdump,wireshark 代理工具:fiddl ...

  8. 【学习点滴】linux调试工具、cmake和网络抓包

    目录 gdb 多进程调试 多线程调试: gdb底层原理 Linux下查看服务器端的并发连接个数: Valgrind memcheck strace Linux下,绑定1024以下的端口需要root权限 ...

  9. java 网络抓包_基于java的网络抓包方法

    本实验是用java实现的网络抓包程序,在windows环境下安装winpcap4.0和jpcap6.0后,下载eclipse和jigloo插件(一种在eclipse底下作图形化开发的工具),将其安装好 ...

最新文章

  1. Android开发之SharedPreferences的封装
  2. SAP MIGO 报错-在例程WERT_SIMULIEREN字段NEUER_PREIS中字段溢出-
  3. 使用 EthPM 包管理工具
  4. C/C++/Java 的基本数据类型
  5. 76.数据库操纵语言DML 定义语言 DDL 控制语言DCL
  6. 我的DWR学习(一)
  7. Microsoft Power BI 学习笔记
  8. ubuntu18.10安装octave
  9. 线程池源码分析-FutureTask
  10. 力扣3. 无重复字符的最长子串 two pointer算法|滑动窗口|尺取法
  11. JS module的导出和导入
  12. torchtext处理文本数据——构造dataset读取文本(学习一)
  13. 7. CPU Scheduling
  14. 常见数据类型的API
  15. 许嵩的60句感人歌词,道出了学生时代实在爱情的伤与痛~
  16. 推荐用于环境识别的机器人摄像头
  17. wordpress mysql 密码重置_WordPress登录密码找回办法之修改数据库篇 | Wopus
  18. 西门子1200 PLC CRC效验程序功能块
  19. 计算机和建筑学薪资待遇区别,工科中薪资待遇最高、女生最多、毕业后竞争最激烈的前两名专业!...
  20. 影响IT人员未来发展的五个IT新技术方向

热门文章

  1. 日常计算机操作知识教案,计算机教案范文
  2. 相对路径找不到图片_微信聊天视频、图片、语音记录等文件管理器,再也不怕找不到聊天文件了!...
  3. javaweb新闻发布系统源码
  4. 实时应急通讯的帮手——北斗天地对讲机
  5. app微信支付-java服务端接口 支付/查询/退款
  6. 记录一次批量插入的优化历程
  7. vscode如何创建一个go项目_编辑器 VS Code 如何快速查看 Go 接口?
  8. Unity3D 在Game窗口下查看Overdraw视图
  9. 《Linux进程概念,进程创建退出等待替换,环境变量等基础操作 ---总结》
  10. 树莓派ssh远程访问