HTTP协议基础及TCPIP协议解析.docx

上传人:b****5 文档编号:4099189 上传时间:2022-11-27 格式:DOCX 页数:12 大小:207.09KB
下载 相关 举报
HTTP协议基础及TCPIP协议解析.docx_第1页
第1页 / 共12页
HTTP协议基础及TCPIP协议解析.docx_第2页
第2页 / 共12页
HTTP协议基础及TCPIP协议解析.docx_第3页
第3页 / 共12页
HTTP协议基础及TCPIP协议解析.docx_第4页
第4页 / 共12页
HTTP协议基础及TCPIP协议解析.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

HTTP协议基础及TCPIP协议解析.docx

《HTTP协议基础及TCPIP协议解析.docx》由会员分享,可在线阅读,更多相关《HTTP协议基础及TCPIP协议解析.docx(12页珍藏版)》请在冰豆网上搜索。

HTTP协议基础及TCPIP协议解析.docx

HTTP协议基础及TCPIP协议解析

1、HTTP协议

HTTP(HyperTextTransferProtocol)是一套计算机通过网络进行通信的规则。

计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP遵循请求(Request)/应答(Response)模型。

Web浏览器向Web服务器发送请求,Web服务器处理请求并返回适当的应答。

所有HTTP连接都被构造成一套请求和应答。

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完

成下列7个步骤:

(1)    建立TCP连接

在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。

HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80

(2)    Web浏览器向Web服务器发送请求命令

一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令

例如:

GET/sample/hello.jspHTTP/1.1

(3)    Web浏览器发送请求头信息

浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

(4)    Web服务器应答

客户机向服务器发出请求后,服务器会客户机回送应答,

HTTP/1.1200OK

应答的第一部分是协议的版本号和应答状态码

(5)    Web服务器发送应答头信息

正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。

(6)    Web服务器向浏览器发送数据

Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

(7)    Web服务器关闭TCP连接

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码

Connection:

keep-alive

TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。

保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

HTTP请求格式

当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:

l   请求方法URI协议/版本

l   请求头(RequestHeader)

l   请求正文

FOREXAMPLE:

GET/sample.jspHTTP/1.1

Accept:

image/gif.image/jpeg,*/*

Accept-Language:

zh-cn

Connection:

Keep-Alive

Host:

localhost

User-Agent:

Mozila/4.0(compatible;MSIE5.01;WindowNT5.0)

Accept-Encoding:

gzip,deflate

 

username=jinqiao&password=1234

(1) 请求方法URI协议/版本

请求的第一行是“方法URL议/版本”:

GET/sample.jspHTTP/1.1

以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。

根据HTTP标准,HTTP请求可以使用多种请求方法。

例如:

HTTP1.1支持7种请求方法:

GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。

在Internet应用中,最常用的方法是GET和POST。

URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。

(2) 请求头(RequestHeader)

请求头包含许多有关的客户端环境和请求正文的有用信息。

例如,请求头可以声明浏览器所用的语言,请求正文的长度等。

Accept:

image/gif.image/jpeg.*/*

Accept-Language:

zh-cn

Connection:

Keep-Alive

Host:

localhost

User-Agent:

Mozila/4.0(compatible:

MSIE5.01:

WindowsNT5.0)

Accept-Encoding:

gzip,deflate.

(3) 请求正文

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。

请求正文中可以包含客户提交的查询字符串信息:

username=jinqiao&password=1234

在以上的例子的HTTP请求中,请求的正文只有一行内容。

当然,在实际应用中,HTTP请求正文可以包含更多的内容。

HTTP请求方法我这里只讨论GET方法与POST方法

 GET方法

GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。

例如

Http:

//127.0.0.1/login.jsp?

Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB

从上面的URL请求中,很容易就可以辩认出表单提交的内容。

(?

之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大

POST方法

POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。

POST方法克服了GET方法的一些缺点。

通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。

因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法。

  从编程的角度来讲,如果用户通过GET方法提交数据,则数据存放在QUERY_STRING环境变量中,而POST方法提交的数据则可以从标准输入流中获取。

 

TCP通信流程解析

B/S通信简述

整个计算机网络的实现体现为协议的实现,TCP/IP协议是Internet的核心协议,HTTP协议是比TCP更高层次的应用层协议。

HTTP(HyperTextTransferProtocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议。

所有的WWW文件都必须遵守这个标准。

设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。

浏览器(WebBrowser)负责与服务器建立连接,下载网页(包括资源文件及JS脚本文件)到本地,并最终渲染出页面。

JS脚本文件运行在客户端,负责客户端一些行为响应或预处理,例如提交表单前的数据校验、鼠标事件处理等交互。

由此可见,浏览器(Browser)一方面充当了C/S通信架构中C角色,另一方面它是HTML/JavaScript的解析渲染引擎(AnalyzeRenderEngine)。

当在浏览器地址栏敲入“

MTU和MSS

本文用到的抓包工具为wireshark,它的前身是赫赫有名的Ethereal。

wireshark以太网帧的封包格式为:

----------------------------------------------------------------------------------------------------

Frame=EthernetHeader +IPHeader +TCPHeader +TCPSegmentData

----------------------------------------------------------------------------------------------------

(1)EthernetHeader =14 Byte=DstPhysicalAddress(6Byte)+ SrcPhysicalAddress(6Byte)+Type(2Byte),以太网帧头以下称之为数据帧。

(2)IPHeader =20 Byte(withoutoptionsfield),数据在IP层称为Datagram,分片称为Fragment。

(3)TCPHeader = 20 Byte(withoutoptionsfield),数据在TCP层称为Stream,分段称为Segment(UDP中称为Message)。

(4)54个字节后为TCP数据负载部分(DataPortion),即应用层用户数据。

EthernetHeader以下的IP数据报最大传输单位为MTU(MaximumTransmissionUnit,Effectofshortboard),对于大多数使用以太网的局域网来说,MTU=1500。

TCP数据包每次能够传输的最大数据分段为MSS,为了达到最佳的传输效能,在建立TCP连接时双方将协商MSS值——双方提供的MSS值中的最小值为这次连接的最大MSS值。

MSS往往基于MTU计算出来,通常MSS=MTU-sizeof(IPHeader)-sizeof(TCPHeader)=1500-20-20=1460。

这样,数据经过本地TCP层分段后,交给本地IP层,在本地IP层就不需要分片了。

但是在下一跳路由(NextHop)的邻居路由器上可能发生IP分片!

因为路由器的网卡的MTU可能小于需要转发的IP数据报的大小。

这时候,在路由器上可能发生两种情况:

(1)如果源发送端设置了这个IP数据包可以分片(MayFragment,DF=0),路由器将IP数据报分片后转发。

(2)如果源发送端设置了这个IP数据报不可以分片(Don’tFragment,DF=1),路由器将IP数据报丢弃,并发送ICMP分片错误消息给源发送端。

关于MTU的探测,参考《PathMTUdiscovery》。

我们可以通过基于ICMP协议的ping命令来探测从本机出发到目标机器上路由上的MTU,详见下文。

TCP和UDP

在基于传输层(TCP/UDP)的应用开发中,为了最后的程序优化,应避免端到端的任何一个节点上出现IP分片。

TCP的MSS协商机制加上序列号确认机制,基本上能够保证数据的可靠传输。

UDP协议在IP协议的基础上,只增加了传输层的端口(SourcePort+DestinationPort)、UDP数据包长(Length=Header+Data)以及检验和(Checksum)。

因此,基于UDP开发应用程序时,数据包需要结合IP分片情况考虑。

对于以太局域网,往往取UDP数据包长Length<=MTU-sizeof(IPHeader)=1480,故UDP数据负载量小于或等于1472(Length-UDPHeader);对于公网,ipv4最小MTU为576,UDP数据负载量小于或等于548。

“向外”NAT在内网和公网之间提供了一个“不对称”桥的映射。

“向外”NAT在默认情况下只允许向外的session穿越NAT:

从外向内的的数据包都会被丢弃掉,除非NAT设备事先已经定义了这些从外向内的数据包是已存在的内网session的一部分。

对于一方在LAN,一方在WAN的UDP通信,鉴于UDP通信不事先建立虚拟链路,NAT后面的LAN通信方需先发送消息给WAN通信方以洞穿NAT,然后才可以进行双向通信,这即是常提到的“UDP打洞(HolePunching)”问题。

TCP连接XX过程解析

下文对XX的完整抓包建立在不使用缓存的基础上。

如若主机存有XX站点的cookie和脱机缓存(OfflineCache),则不会再请求地址栏图标favicon.ico;请求/js/bdsug.js?

v=1.0.3.0可能回应“HTTP/1.1304NotModified”。

可在浏览器打开XX首页后,Ctrl+F5强制刷新,不使用缓存,也可参考《浏览器清除缓存方法》。

以下为访问XX过程,wireshark抓包数据。

对于直接通过Ethernet联网的机器,WiresharkCaptureFilter为"host ";对于通过PPPoverEthernet(PPPoE)联网的机器,WiresharkCaptureFilter为"pppoes andhost "。

以下抓包示例直接通过Ethernet联网访问XX的过程。

可点击下面的图片超链接下载pcap文件,使用wireshark软件打开查看。

为方便起见,以下将客户端(浏览器)简称为C,将服务器(XX后台)简称为S。

 

1.TCP三次握手建立连接

“http:

//”标识WWW访问协议为HTTP,根据规则,只有底层协议建立连接之后才能进行更高层协议的连接。

在浏览器地址栏输入地址后按下回车键的瞬间,C建立与S(机器名为,DNS解析出来的IP为220.181.6.175)的TCP80连接(HTTP默认使用TCP80端口)。

以下为三次握手建立TCP连接的数据包(Packet1-Packet3)。

 /****************************************************************************************************

1  192.168.89.125:

5672→220.181.6.175:

80   TCP(协议)62(以太网帧长)

amqp>http[SYN]Seq=0Win=65535Len=0MSS=1460 SACK_PERM=1

2  220.181.6.175:

80→192.168.89.125:

5672TCP62

http>amqp[SYN,ACK]Seq=0Ack=1Win=8192Len=0MSS=1460SACK_PERM=1

3  192.168.89.125:

5672→220.181.6.175:

80   TCP54

amqp>http[ACK]Seq=1Ack=1Win=65535Len=0

****************************************************************************************************/

三次握手建立TCP连接的流程如下:

    C(Browser)                                    S()

 1. CLOSED                                             LISTEN

 2. SYN-SENT    →              → SYN-RECEIVED

 3. ESTABLISHED←  ← SYN-RECEIVED

 4. ESTABLISHED→       → ESTABLISHED

3-WayHandshakeforConnectionSynchronization

三次握手的socket层执行逻辑

S调用socket的listen函数进入监听状态;C调用connect函数连接S:

[SYN],S调用accept函数接受C的连接并发起与C方向上的连接:

[SYN,ACK]。

C发送[ACK]完成三次握手,connect函数返回;S收到C发送的[ACK]后,accept函数返回。

关于Seq和Ack

Seq即SequenceNumber,为源端(source)的发送序列号;Ack即AcknowledgmentNumber,为目的端(destination)的接收确认序列号。

在WiresharkDisplayFilter中,可使用tcp.seq或tcp.ack过滤。

在Packet1中,C:

5672向S:

80发送SYN握手包,Seq=0(relative sequencenumber);在Packet2中,S:

80向C:

5672发送ACK握手回应包,Ack=1(relative sequencenumber),同时发送SYN握手包,Seq=0(relative sequencenumber);在Packet3中,C:

5672向S:

80发送ACK握手回应包,Seq=1,Ack=1。

至此,Seq=1为C的ISN(InitialSequenceNumber),后期某一时刻的Seq=ISN+累计发送量(cumulativesent);Ack=1为C的IAN(InitialAcknowledgeNumber),后期某一时刻的Ack=IAN+累计接收量(cumulativereceived)。

对于S而言,Seq和Ack情同此理。

参考:

《TCPAnalyzeSequenceNumbers》、《UnderstandingTCPSequenceandAcknowledgementNumbers》

2.TCP获取网站数据流程

连接建立后,下一步发送(“GET/HTTP/1.1”)请求(Request)HTML页面,这里“/”表示S的默认首页,“GET”为HTTPRequestMethod;“/”为Request-URI,这里为相对地址;HTTP/1.1表示使用的HTTP协议版本号为1.1。

以下为HTTPGET请求数据包(Packet4)。

/****************************************************************************************************

4  192.168.89.125:

5672→220.181.6.175:

80HTTP417

GET/HTTP/1.1

****************************************************************************************************/

HTTPGET报文长=417-54=363个字节,其中Nextsequencenumber:

364(relativesequencenumber)表示,若在规定的时间内收到S响应Ack=364,表明该报文发送成功,可以发送下一个报文(Seq=364);否则重传(TCPRetransmitssion)。

序列号确认机制是TCP可靠性传输的保障。

S(http)收到HTTPGET报文(共363个字节),向C(amqp)发送TCP确认报文(Packet5)。

/****************************************************************************************************

5  220.181.6.175:

80→ 192.168.89.125:

5672 TCP60

http>amqp[ACK]Seq=1Ack=364Win=6432Len=0

****************************************************************************************************/

这里Seq=1,为S的ISN,意为已发送过SYN。

Packet2中,Ack=1为S的IAN。

这里的Ack-IAN=364-1=363表示S已经从C接收到363个字节,即HTTPGET报文。

同时,Ack=364也是S期待C发送的下一个TCP报文序列号(上面分析的Nextsequencenumber)。

接下来,S向C发送HttpResponse,根据HTTP协议,先发响应头(ResponseHeader),再发XX首页HTML文件。

HttpResponseHeader报文(Packet6)如下。

/****************************************************************************************************

6  220.181.6.175:

80→ 192.168.89.125:

5672 TCP465

[TCPsegmentofareassembledPDU]

****************************************************************************************************/

其部分内容如下:

======================================

HTTP/1.1200OK

……

Content-Length:

2139

Content-Type:

text/html;charset=gb2312

Content-Encoding:

gzip

======================================

S响应C的“GET/HTTP/1.1”请求,先发送带[PSH]标识的411个字节的HttpResponseHeader(Packet6)。

TCP头部[PSH]标识置位,敦促C将缓存的数据推送给应用程序,即先处理HttpResponseHeader,实际上是一种“截流”通知。

相应C的socket调用send时在IPPROTO_TCP选项级别设置TCP_NODELAY为TRUE禁用Nagle算法可以“保留发送边界”,以防粘连。

尽管握手协商的MSS为1460,但服务器或者代理平衡服务器,每次发送过来的TCP数据最多只有1420个字节。

可以使用ping-f-lsizetarget_name命令向指定目标target_name发送指定字节量的ICMP报文,其中-lsize指定发送缓冲区的大小;-f则表示在IP数据报中设置不分片DF(Don’tFragment),这样便可探测出到目标路径上的MTU。

执行“ping-f-l1452 ”的结果如下:

220.181.6.18的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1