结合Wireshark捕获分组深入理解TCP/IP协议栈之HTTP协议

摘要:

    本文简单介绍了Web应用层协议理论知识,详细讲述了HTTP请求报文和响应报文各个字段含义,并从Wireshark俘获分组中选取HTTP相关报文进行分析。

 

一、概述

    Web的应用层协议是超文本传输协议HTTP,HTTP协议由两部分程序实现:客户机程序、服务器程序,协议定义了这些报文的格式以及客户机和服务器如何进行报文交换的。Web服务器用于存储Web对象,每个对象由URL寻址,Web客户机通常指浏览器。浏览器向服务器发出对Web页中所包含对象的HTTP请求报文,服务器接受请求并用包含这些对象的HTTP响应报文进行响应。Web页是由对象组成,对象简单来说就是文件(如图形文件、Java小程序、声音剪辑文件),这些文件通过一个URL地址寻址。Web页通常含有一个基本的HTML文件和几个引用对象。

    HTTP报文有两种:请求报文、响应报文。

二、HTTP请求报文

2.1 请求报文

整个报文段内容是普通ASCII文本,各个字段靠空格或者回车换行符隔开,如下图:

图1 HTTP请求报文格式

方法

表1 HTTP请求报文方法[1]

 


方法


说明


GET


请求获取URL所标识的资源


POST


在URL所标识的资源后附加新的数据


HEAD


请求获取由URL所标识的资源的响应消息报头,常用于故障跟踪


PUT


请求服务器存储一个资源,并用URL作为其标识


DELETE


请求服务器删除URL所标识的资源


TRACE


请求服务器回送收到的请求信息,主要用于测试或诊断


CONNECT


保留将来使用


OPTIONS


请求查询服务器的性能,或者查询与资源相关的选项和需求

    使用GET方法时实体主体为空。客户机有时候需要提交表单(如搜索关键词),有两种方法可以做到这一点:其一,使用POST方法,实体主体包含表单字段的值;其二,用GET方法,此时表单的字段与原URL形成新的URL。

    注:HTTP/1.0规约仅有三种方法:GET、POST、HEAD。

URL

    对象由统一资料定位器URL标识,URL由3部分组成(如http://www.baidu.com/index.html):协议(http)、存放对象服务器主机名(www.baidu.com)、对象的路径名(/index.html)。

版本

    目前有HTTP/1.0、HTTP/1.1,后者兼容前者。HTTP/1.0仅支持非持续连接,即每个TCP连接在服务器返回对象后关闭,HTTP/1.1支持持续连接,即服务器在发送响应后保持该TCP连接。早期,Web页面通常只包含HTML文件,用非持续连接就够了。如今,一个Web页面包含许多对象,用非持续连接开销太大了(TCP建立的三次握手),因此持续连接更合适。

首部行

    给服务器发送首部行旨在服务器为不同类型的客户机发送相同对象的不同版本,常用的首部行见表2。

表2 HTTP请求报文常用首部行

 


字段名



User-Agent


关于浏览器和它的平台信息


Accept


客户机能处理的页面类型


Accept-Charset


客户机可以接受的字符集


Aceept-Encoding


客户机能处理的页面编码方法


Accept-Language


客户机能处理的自然语言


Host


服务器的DNS名字


Authorization


证明客户端有权查看某个资源


Cookie


将一个以前设置的cookie送回给服务器

实体数据

    实体数据是报文的主体,即所请求的对象本身。

 

2.2 实例分析

图2 HTTP请求报文实例

三、HTTP响应报文

3.1 报文格式

图3 HTTP响应报文格式

版本

    服务器使用的协议版本。

状态编码、短语

    状态编码码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值[1]:

表3 HTTP响应报文响应类别及值

 


类别



1xx


指示信息--表示请求已接收,继续处理


2xx


成功--表示请求已被成功接收、理解、接受


3xx


重定向--要完成请求必须进行更进一步的操作


4xx


客户端错误--请求有语法错误或请求无法实现


5xx


服务器端错误--服务器未能实现合法的请求

 

常见状态代码、状态描述、说明:

表4 HTTP响应报文常用代码

 


编码


短语


说明


200


OK


客户端请求成功


400


Bad Request


客户端请求有语法错误,不能被服务器所理解


401


Unauthorized


请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用


403


Forbidden


服务器收到请求,但是拒绝提供服务


404


Not Found


请求资源不存在


500


Internal Server Error


服务器发生不可预期的错误


503


Server Unavailable


服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

首部行

    常用的HTTP响应报文首部行见下表:

表5 响应报文常用首部行字段

 


字段名



Date


消息被发送时的日期和时间


Server


关于服务器信息


Content-Encoding


内容是如何被编码的(如gzip)


Content-Length


以字节计算的页面长度


Content-Type


页面的MIME类型


Last-Modified


页面最后被修改的时间和日期


Location


指标客户将请求发送到别处的命令


Accept-Ranges


服务器将接受指定请求的字节范围


Set-Cookie


服务器希望客户保存一份cookie

实体数据

    实体数据是报文的主体,即所请求的对象本身。

 

3.2 报文实例

图2 HTTP响应报文实例

 

 

至此,服务器返回用户所请求的文件:-)

 

参考资料:

[1] 博文《HTTP协议详解

[2] Andrew S.Tanenbaum.计算机网络[M].

[3] 《计算机网络--自顶向下方法与Internet特色》[M].

 HTTP请求报文格式.rar   

from:http://blog.chinaunix.net/uid-9112803-id-3212057.html

时间: 2024-08-02 20:02:47

结合Wireshark捕获分组深入理解TCP/IP协议栈之HTTP协议的相关文章

结合Wireshark捕获分组深入理解TCP/IP协议栈

摘要:     本文剖析了浏览器输入URL到整个页面显示的整个过程,以百度首页为例,结合Wireshark俘获分组进行详细分析整个过程,从而更好地了解TCP/IP协议栈.   一.俘获分组 1.1 准备工作 (1) 清空浏览器缓存     首先清空Web浏览器的高速缓存,确保Web网页是从网络中获取,而不是从高速缓冲取得[1].谷歌浏览器,Options --> Under the Hood --> Clear browsing data. (2)清空DNS缓存     在客户端清空DNS高速

结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)

摘要:     本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析.   一.概述     TCP是面向连接的可靠传输协议,两个进程互发数据之前需要建立连接,这里的连接只不过是端系统中分配的一些缓存和状态变量,中间的分组交换机不维护任何连接状态信息.连接建立整个过程如下(即三次握手协议): 首先,客户机发送一个特殊的TCP报文段: 其次,服务器用另一个特殊的TCP报文段来响应: 最后,客户机再用第三个特殊报

面试的时候考官问我,你怎么理解tcp/ip? 话说我得怎么回答呢?

问题描述 面试的时候考官问我,你怎么理解tcp/ip? 话说我得怎么回答呢? 面试的时候考官问我,你怎么理解tcp/ip? 话说我得怎么回答呢?求解!!! 解决方案 http://blog.csdn.net/fysy0000/article/details/6618620 解决方案二: 这个问题,应该没有标准问题吧.考官关注什么,与你面试的岗位有关吧. 参考:TCP/IP 解决方案三: 这个问题比较开放..举个你做过相关的例子好点.. 解决方案四: 它就是一种协议,网络传输就像咱们生活里一样签协

使用TCP/IP协议栈指纹进行远程操作系统辨识_网络冲浪

概述 本文讨论了如何查询一台主机的TCP/IP协议栈来收集宝贵的信息.首先,我列举了栈指纹之外的几种"经典的"操作系统辨识方法.然后我描述了栈指纹工具的"工艺现状".接下来说明让远程主机泄漏其信息的一些技术.最后详述了我的实现(nmap),和用它获得的一些流行网站的操作系统信息.理由热点网络 我认为辨识一个系统所运行OS的用处是相当显而易见的,所以这一节会很短.最有力的例子之一是许多安全漏洞是OS相关的.试想你正在作突破试验并发现53端口是打开的.如果那是易遭攻击的

数据在协议栈中的传递-用原始套接字截取数据链路层数据,那这包数还会在TCP/IP协议栈中传递吗

问题描述 用原始套接字截取数据链路层数据,那这包数还会在TCP/IP协议栈中传递吗 用原始套接字写了一个小程序,装在本机后,能够截取本机的发送/接收数据,想问一下,比如原始套接字程序在数据链路层截取到一个别人发给本机的数据,原始套接字程序截取到后,这包数还会向网络层上传,一步步再送到截取这包数的真正端口进程吗?会不会我一截取,该收到这包数的进程就收不到了呢? 解决方案 看你怎么截取的,一般是拦截,不影响数据包的发送. 解决方案二: 如果你不是通过驱动等,很可能你拿到的只是一份拷贝,所以数据还是继

关于TCP/IP协议栈(转)

1. TCP/IP协议栈 与OSI参考模型不同,TCP/IP协议栈共有4层,其中网络接口层对应OSI中的物理层和数据链路层,应用层对应OSI中的应用层.表示层和会话层. 在网络接口层的主要协议有:ARP.RARP等.ARP协议主要功能是根据IP地址获取物理地址,RARP协议则反之. 网络层的主要协议有:IP.路由协议(RIP.OSPF.BGP等).IP协议为网络上的每台主机编号,在此基础上才有路由协议,因此路由协议是基于IP协议的. 传输层的主要协议有:TCP.UDP.传输层有端口号的概念,端口

《IP组播(第1卷)》一1.4 三层组播是建立在TCP/IP协议栈中的

1.4 三层组播是建立在TCP/IP协议栈中的 IP组播是建立在TCP/IP协议栈中的.也就是说,传输组播数据帧和数据包所需的协议是由Internet工程任务组(IETF)进行控制的.IETF成员通过RFC发布和管理相关协议,也就是说IP组播协议是开放标准. 注释 组播协议IETF标准适用于IPv4和IPv6组播技术:但和其他IP协议一样,这并不意味着所有厂商处理组播的方式都是相同的,同时也不意味着所有组播协议的实施都能够与标准完美兼容. 使用TCP/IP协议栈也意味着IP组播隶属于互联网数字分

TCP/IP协议栈遭遇攻击?!

我们的网络游戏采用tcp进行通信,服务端程序绑定8300端口,为游戏客户端提供服务,游戏已经上线稳定运行两年多,从今年9月份开始至今碰到了3次攻击,3次攻击所导致的情况一样,描述如下: (1)从应用层上来看,攻击者每次攻击时,与8300端口都有建立最多两.三百个tcp连接. (2)从防火墙监控来看,攻击的流量非常微小,以至于防火墙的流量报警都未触发. (3)每次攻击产生时,原先的玩家的tcp连接并未断开(应用程序未抛出TCP连接断开的异常),但服务端的再也接收不到来自客户端的任何消息.服务端进程

linux网络编程之TCP/IP基础(一) TCP/IP协议栈与数据包封装

一.ISO/OSI参考模型 OSI(open system interconnection)开放系统互联模型是由ISO(International Organization for Standardization)国际标准化组织定义的网络分层模型,共七层,如下图. 物理层(Physical Layer):物 理层定义了所有电子及物理设备的规范,为上层的传输提供了一个物理介质,本层中数据传输的单位为比特(bit).属于 本层定义的规范有EIA/TIA RS-232.EIA/TIA RS-449.V