前言
浏览器(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





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