前言

浏览器(IE、、等)都是基于http协议进行通信的。 浏览器在客户端,浏览器在服务器端。 http协议是TCP/IP模型中的应用层。 TCP 协议状态位于 TCP/IP 模型中的传输层。 在浏览网站时,如果关闭浏览器,只是关闭了浏览器进程,浏览器与网站的连接并没有完全断开。 一段时间后操作系统会自动断开连接。 对于服务器也是如此。 虽然进程已经关闭,但连接不会立即断开。 Linux操作系统会在一段时间后断开连接。

TCP/IP结构对应OSI结构

TCP/IPOSI 功能 TCP/IP 协议族 应用层 应用层 文件传输、电子邮件、文件服务、虚拟终端 TFTP、HTTP、SNMP、FTP、 *** TP、DNS、RIP、表示层 数据格式化、代码转换、数据加密 无 协议会话层断开或建立与其他点的联系。 没有协议。 传输层。 传输层提供端到端接口TCP、UDP。 网络层。 网络层为数据包选择路由。 IP、ICMP、OSPF、BGP、IGMP、ARP、RARP 链路。 链路层传输寻址帧和错误检测功能SLIP、CSLIP、PPP、MTU、ARP、RARP。 物理层以二进制数据的形式在物理介质上传输数据。 2

那么操作系统在完成数据传输后如何断开连接呢? 下面详细解释该连接和断开过程。

首先了解TCP协议的几种状态

:监听远程TCP端口的连接请求

SYN-SENT:再次发送连接请求后,等待匹配的连接请求。

SYN-:接收并发送另一个连接请求后,等待对方对连接请求的确认。

:代表打开连接

FIN-WAIT-1:等待远程TCP连接中断请求,或确认先前的连接中断请求

FIN-WAIT-2:等待来自远程TCP的连接中断请求

CLOSE-WAIT:等待本地用户的连接中断请求

:等待远程TCP确认连接中断

LAST-ACK:等待发送到远程TCP的原始连接中断请求的确认

TIME-WAIT:等待足够的时间以确保远程TCP收到连接中断请求的确认

:无连接状态

发起连接请求

服务器()不会主动发起连接请求。 服务器始终监听80端口(设定的端口),一旦有连接请求就会响应请求。

所以每个连接都是从浏览器(客户端)发起的。 该关闭连接请求可以是服务器向浏览器发送的,也可以是浏览器向服务器发送的。

浏览器发起连接关闭请求

什么情况下浏览器会发起连接关闭请求?

1. 所有数据传输完成。

2.关闭浏览器

3.其他

浏览器发起连接关闭请求时的TCP协议状态转换图

每个步骤的说明:

1. 浏览时输入URL并开始连​​接服务器。 此时浏览器的状态是,状态是。

2、收到连接请求后,开始一些准备工作,比如为连接开辟内存空间,建立进程,回复浏览器确认连接等。 此时浏览器的状态是,状态是。

3、浏览器收到连接确认,连接成功建立,开始请求所需数据。 此时浏览器的状态是,状态是。

4、收到数据请求后,将相应的数据发送给浏览器。 这时候浏览器的状态是,状态也是如此。

5. 浏览器继续请求所需数据。 这时候浏览器的状态是,状态也是如此。

6、收到数据请求后,将响应数据发送给浏览器。 这时候浏览器的状态是,状态也是如此。

。 。 。 。 。

。 。 。 。 。

重复5、6直至所有数据接收完成

7. 浏览器确定已接收到所有数据,并发送连接关闭请求。 此时浏览器的状态为, 的状态为。

8、收到关闭连接的请求后,开始关闭连接的工作(只是开始,并不是所有准备工作都完成),比如关闭内存空间、关闭进程等,并发送同意关闭连接联系。 此时浏览器的状态是,状态是。

9. 浏览器收到关闭连接的同意。 浏览器不会再发送任何请求,只是等待关闭工作完成,并在关闭工作完成后开始等待确认。 此时浏览器的状态是,状态是。

10、完成关闭工作、内存回收、进程关闭等,并发送最终关闭确认请求。 此时浏览器的状态是,状态是。

11、浏览器收到最终关闭确认,关闭连接,并发送最终关闭连接响应。 此时会有2* *** L秒的缓冲时间。 2* *** L 时间后连接正式关闭。 *** L 时间因操作系统而异。 *** L时间为30秒。 此时浏览器的状态为 。

12. 接收最终连接关闭响应并关闭连接。 此时也会有2* *** L秒的缓冲时间。 2* *** L后连接正式关闭。 此时浏览器的状态是,状态是。

13.当浏览器状态为2* *** L秒后,状态也为。

发起关闭连接请求

什么情况下会发起连接关闭请求?

1、http.conf中有一个参数。 该值是前一个请求响应完成与下一个请求到达之间的时间差。 如果在完成对上一个请求的响应后等待数秒后仍未收到第二个连接,则会主动断开连接。

2.内存耗尽,或者其他一些原因

发起连接关闭请求的TCP状态转换图

每个步骤的说明:

1. 浏览时输入URL并开始连​​接服务器。 此时浏览器的状态是,状态是。

2、收到连接请求后,开始一些准备工作,比如为连接开辟内存空间,建立进程,回复浏览器确认连接等。 此时浏览器的状态是,状态是。

3、浏览器收到连接确认,连接成功建立,开始请求所需数据。 此时浏览器的状态是,状态是。

4、收到数据请求后,将相应的数据发送给浏览器。 这时候浏览器的状态是,状态也是如此。

5. 浏览器继续请求所需数据。 这时候浏览器的状态是,状态也是如此。

6、收到数据请求后,将响应数据发送给浏览器。 这时候浏览器的状态是,状态也是如此。

。 。 。 。 。

。 。 。 。 。

重复5、6直至所有数据接收完成

7、等待数秒后未收到下一个请求,故主动发起连接请求。 此时浏览器的状态是,状态是。

8、浏览器收到关闭连接的请求,开始关闭连接(只是开始,还没有完成所有准备工作),比如关闭内存空间、关闭进程等,并发送同意关闭连接。 此时浏览器的状态是,状态是。

9、收到关闭连接的同意后,不再发送请求,而只是等待,开始等待浏览器的关闭工作完成,浏览器完成关闭工作后开始等待确认。 此时浏览器的状态是,状态是。

10、浏览器完成关闭工作、内存回收、进程关闭等,并发送最终的关闭确认请求。 此时浏览器的状态是,状态是。

11.收到最终关闭确认后,关闭连接并发送最终关闭连接响应。 此时会有2* *** L秒的缓冲时间。 2* *** L 时间后连接正式关闭。 此时浏览器的状态为 。

12、浏览器收到最终的连接关闭响应,浏览器关闭连接。 此时也会有2* *** L秒的缓冲时间。 2* *** L后连接正式关闭。 这时候浏览器的状态是,状态也是如此。

13.当浏览器状态为2* *** L秒后,状态也为。

查看连接状态

Linux下查看所有连接状态的命令是:

#-nat

查看Linux下所有TCP连接的统计信息:

# -nat|awk '{print awk $NF}'|sort|uniq -c|sort –n

查看Linux下80端口连接数统计:

# -nat|grep “:80”|awk '{print $5}' |awk -F: '{print $1}' | 排序| uniq -c|排序 -n

Linux下查看连接状态的命令为:

# -nat|grep –i '80'

Linux下查看某个状态的命令是:

# -nat|grep

# -nat|grep

# -nat|grep

。 。 。 。 。 。 。 .对应的TCP协议状态

Linux下查看所有相关连接状态的命令为:

# -n |awk '/^tcp/ {++S[$NF]} END {for(a in S)print a,S[a]}'

这个命令非常有用,会列出所有连接状态信息的统计。 如果某种状态下没有连接,则不会显示。

补充:

本文是以后写mysql并发优化的辅助文章,这是最基本的知识。 这是我对浏览器与浏览器之间的TCP连接状态的理解。 难免会出现一些错误。 但作为一名程序员,了解以上内容就足够了。 更多细节应该留给建筑师。

未经允许不得转载! 作者:admin,转载或复制请以超链接形式并注明出处天心神途传奇手游发布网

原文地址:《浏览器与apache通信时TCP连接状态迁移》发布于:2024-02-20

发表评论

表情:
验证码
评论列表 (暂无评论,39人围观)

还没有评论,来说两句吧...