HTTP请求与TCP连接的过程
【文章出处】yuzhichen(谌玉芝)
一个http请求的详细过程
HTTP是一个应用层的协议,在这个层的协议,是一种网络交互需要遵守的一种协议规范。
1、连接:当输入一个请求时,首先建立一个socket连接,因为socket是通过ip和端口建立的,之前则还有一个DNS解析过程。如把www.qq.com变成一个ip,如果url不包含端口号,则会使用该协议的默认端口号,HTTP协议的默认端口号为80。
2、请求:连接成功后,开始像web服务器发送请求,这个请求一般是GET或POST请求。
3、应到:web服务器收到这个请求进行处理。web服务器会把文件内容传送给响应的web浏览器。包括:HTTP头信息,体信息。
4、关闭连接:当应答结束后,web浏览器与web服务器必须断开,以保证其它web浏览器能够与web服务器建立连接。
TCP连接的三次握手和四次挥手
建立连接协议(三次握手)
1、客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1;
2、服务器端回应客户端,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因为它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好数据通讯;
3、客户端必须再次回应服务器端一个ACK报文,这是报文段3;

连接中止协议(四次挥手)
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。当一方完成它的数据发送任务后就能发送一个FIN来中止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方讲执行主动关闭,而另一方执行被动关闭;FIN报文和ACK报文一般都是分开发送的。
1、TCP客户端发送一个FIN,用户关闭客户端到服务器的数据传送,即报文段4;
2、服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1,即报文段5,和SYN一样,一个FIN将占用一个序号;
3、服务器关闭客户端的连接,发送一个FIN给客户端,即报文段6;
4、客户端发回ACK报文确认,并将确认序号设置为收到序号加1,即报文段7;

例如:
用工具查看一条HTTP请求的TCP连接过程,ACK起应答作用,而SYN起同步作用,FIN信号用来请求关闭自己的通信:
SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。
ACK: (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。
FIN: (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据。

这是一条GET请求,请求头、体信息、返回值等信息如下:

如下,可以清晰的看出整个TCP连接的三次握手和四次挥手的过程:


Source即为本机IP地址,Destination为要访问的服务器主机ip地址;
从TCP连接的Source和Destination可以看出,三次握手过程,客户端IP去访问服务器端IP,来回进行了三次握手。有时候会在wireshark抓包数据里经常看到这样的一条请求:

tcp segment of a reassembled pdu是wireshark的一个提示信息,主机响应一个查询或命令时如果要回应很多数据(信息)而这些数据超出了TCP的最大MSS(Maximum Segment Size最大报文长度)时,主机会通过发送多个数据包来传送这些数据。TCP segment of a reassembled PDU指TCP层收到上层大块报文后分解后发出去的。。
HTTP返回码为200,表示请求成功。
参考文献:
http://www.cic.tsinghua.edu.cn/jdx/book6/3.htm
http://wenku.baidu.com/view/8a1e832f0066f5335a8121c3.html
http://man.lupaworld.com/content/network/wireshark/index.html
浙公网安备 33010602011771号