从输入域名到最后呈现经历的过程:
域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户 --> 四次挥手结束
1.域名解析
首先浏览器会解析 www.zipackage.com 这个域名对应的IP地址。
① 浏览器 会首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否有www.zipackage.com 对应的条目,而且没有过期,如果有且没有过期则解析到此结束。
② 如果浏览器自身的缓存里面没有找到对应的条目,那么浏览器会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束.
③ 如果在Windows系统的DNS缓存也没有找到,那么尝试读取hosts文件(位于C:\Windows\System32\drivers\etc),看看这里面有没有该域名对应的IP地址,如果有则解析成功。
④ 如果在hosts文件中也没有找到对应的条目,浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器(一般是电信运营商提供的)发起域名解析请求(通过的是UDP协议向DNS的53端口发起请求,这个请求是递归的请求,也就是运营商的DNS服务器必须得提供给我们该域名的IP地址),运营商的DNS服务器首先查找自身的缓存,找到对应的条目,且没有过期,则解析成功。如果没有找到对应的条目,则有运营商的DNS代我们的浏览器发起迭代DNS解析请求,它首先是会找根域的DNS的IP地址(这个DNS服务器都内置13台根域的DNS的IP地址),找到根域的DNS地址,就会向其发起请求(请问www.zipackage.com这个域名的IP地址是多少啊?),根域发现这是一个顶级域com域的一个域名,于是就告诉运营商的DNS我不知道这个域名的IP地址,但是我知道com域的IP地址,你去找它去,于是运营商的DNS就得到了com域的IP地址,又向com域的IP地址发起了请求(请问www.zipackage.com这个域名的IP地址是多少?),com域这台服务器告诉运营商的DNS我不知道www.zipackage.com这个域名的IP地址,但是我知道zipackage.com这个域的DNS地址,你去找它去,于是运营商的DNS又向zipackage.com这个域名的DNS地址(这个一般就是由域名注册商提供的,像万网,新网等)发起请求(请问www.zipackage.com这个域名的IP地址是多少?),这个时候zipackage.com域的DNS服务器一查,诶,果真在我这里,于是就把找到的结果发送给运营商的DNS服务器,这个时候运营商的DNS服务器就拿到了www.zipackage.com这个域名对应的IP地址,并返回给Windows系统内核,内核又把结果返回给浏览器,终于浏览器拿到了www.zipackage.com 对应的IP地址,该进行一步的动作了。
2.发起TCP的3次握手
拿到域名对应的IP地址之后,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接请求。这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序。
1) Client首先发送一个连接试探,ACK=0 表示确认号无效,SYN = 1 表示这是一个连接请求或连接接受报文,同时表示这个数据报不能携带数据,seq = x 表示Client自己的初始序号(seq = 0 就代表这是第0号帧),这时候Client进入syn_sent状态,表示客户端等待服务器的回复
2) Server监听到连接请求报文后,如同意建立连接,则向Client发送确认。TCP报文首部中的SYN 和 ACK都置1 ,ack = x + 1表示期望收到对方下一个报文段的第一个数据字节序号是x+1,同时表明x为止的所有数据都已正确收到(ack=1其实是ack=0+1,也就是期望客户端的第1个帧),seq = y 表示Server 自己的初始序号(seq=0就代表这是服务器这边发出的第0号帧)。这时服务器进入syn_rcvd,表示服务器已经收到Client的连接请求,等待client的确认。
3) Client收到确认后还需再次发送确认,同时携带要发送给Server的数据。ACK 置1 表示确认号ack= y + 1 有效(代表期望收到服务器的第1个帧),Client自己的序号seq= x + 1(表示这就是我的第1个帧,相对于第0个帧来说的),一旦收到Client的确认之后,这个TCP连接就进入Established状态,就可以发起http请求了。
3.建立TCP连接后发起http请求
进过TCP3次握手之后,浏览器发起了http的请求(第4帧),使用的http的方法 GET 方法,协议是HTTP/1.1
4.服务器端响应http请求,浏览器得到html代码
服务器端WEB程序接收到http请求以后,就开始处理该请求,处理之后就返回给浏览器html文件。
前面3个tcp包为3次握手的过程,主机向服务器发送一个http应用请求,服务器收到请求后,返回一个tcp确认帧(第5帧),接着发送一个http应答给主机(载有实际数据,第6,7帧,由于数据较大,分成多个包传输),主机收到服务器的http应答数据后,又发送一个tcp确认帧(第8帧),确认收到了数据,反复进行传输,应答,直到所有数据传输完成(6到18帧)。
第4号包是http请求包,第19号包是http响应包
以下是数据传输包含的内容:
5. 浏览器解析html代码,并请求html代码中的资源
浏览器拿到index.html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样),这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序。
浏览器在请求静态资源时(在未过期的情况下),向服务器端发起一个http请求(询问自从上一次修改时间到现在有没有对资源进行修改),如果服务器端返回304状态码(告诉浏览器服务器端没有修改),那么浏览器会直接读取本地的该资源的缓存文件。
PS:HTTP1.0和HTTP1.1的区别
在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。
HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。
PS:一个web页面中,使用img标签引用了三幅图片,当客户端访问服务器中的这个web页面时,客户端总共会访问几次服务器,即向服务器发送了几次HTTP请求。
6.浏览器对页面进行渲染呈现给用户
浏览器利用自己内部的工作机制,把请求到的静态资源和html代码进行渲染,渲染之后呈现给用户。
7.传输完成,断开四次挥手
断开连接端可以是Client端,也可以是Server端。假设Client端发起中断连接请求:
第一次挥手:客户端先发送FIN报文(第24帧),用来关闭主动方到被动关闭方的数据传送,也就是客户端告诉服务器:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,客户端依然会重发这些数据),但此时客户端还可以接受数据。
第二次挥手:Server端接到FIN报文后,但是如果还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以服务器端先发送ACK(第25帧),告诉Client端:请求已经收到了,但是我还没准备好,请继续等待停止的消息。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。
第三次挥手:当Server端确定数据已发送完成,则向Client端发送FIN报文(第26帧),告诉Client端:服务器这边数据发完了,准备好关闭连接了。
第四次挥手:Client端收到FIN报文后,就知道可以关闭连接了,但是他还是不相信网络,所以发送ACK后进入TIME_WAIT状态(第27帧), Server端收到ACK后,就知道可以断开连接了。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,最后,Client端也可以关闭连接了至此,TCP连接就已经完全关闭了!
下图是个完整的过程,便于理解和记忆。
http://blog.csdn.net/sinat_21455985/article/details/53508115
相关推荐
Wireshark 抓包分析 TCP“三次握手,四次挥手” Wireshark 是一个功能强大的网络抓包...通过 Wireshark 抓包分析 TCP“三次握手,四次挥手”过程,我们可以更好地理解 TCP/IP 传输的机理,提高自己的计算机网络知识。
在TCP/IP通信中,TCP连接的建立和关闭过程分别称为三次握手和四次挥手,这两个过程对于理解TCP连接的工作原理至关重要。 首先,我们来详细讲解TCP的三次握手过程: 1. **第一次握手**:客户端(Client)发送一个...
在深入理解Wireshark抓包分析TCP三次握手及四次挥手之前,我们首先需要了解OSI七层模型与TCP/IP四层/五层模型的基础概念,这有助于我们更好地理解数据在网络中的传输过程。 1. **物理层**:负责通过物理介质传输...
#### 四、使用Wireshark观察TCP三次握手 为了更好地理解TCP三次握手的过程,我们可以通过Wireshark来进行实际的观察与分析。 ##### 4.1 准备工作 - **安装Wireshark**:首先确保您的计算机上已经安装了最新版本的...
在HTTP通信过程中,TCP的三次握手和四次挥手起着至关重要的作用,确保了连接的建立和终止的正确性。下面将详细解释这两个过程。 ### 三次握手 三次握手是为了在客户端和服务器之间建立一个可靠的连接。具体步骤...
在实际应用中,如本案例所示,可以通过编写C语言的服务器端程序和C#的客户端程序来模拟TCP的连接和断开过程,同时使用Wireshark这样的网络抓包工具,可以直观地观察到三次握手和四次挥手的网络交互细节,这对于理解...
wireshark抓包图解TCP三次握手四次挥手详解
标题中的“wireshark tcp三次握手”指的是使用Wireshark这一网络封包分析软件来观察和理解TCP(传输控制协议)的三次握手过程。在TCP/IP通信协议中,三次握手是一种建立连接的方法,确保双方都能正常通信。在这个...
在IT行业中,理解TCP(传输控制协议)的三次握手和四次挥手是至关重要的,因为它们是TCP连接建立与关闭的关键过程。本篇文章将深入探讨这两个概念,并结合Wireshark对数据包的解析来详细阐述。 首先,我们来看TCP的...
"TCP/IP 协议族详解 wireshark 抓包图解 TCP 三次握手四次挥手详解" TCP/IP 协议族是指由 TCP 和 IP 两个主要协议组成的协议簇,负责管理计算机之间的通信。该协议族分为四个层次:链路层、网络层、运输层和应用层...
用wireshark实际操作来分析tcp三次握手的整个过程,看完会对三次握手有更深入了解
标题“Wireshark基本介绍和学习TCP三次握手”表明我们将探讨Wireshark的基本用法以及TCP连接中的三次握手概念。TCP(传输控制协议)是互联网协议栈中最核心的部分之一,负责在两个设备之间建立可靠的数据传输。 ...
TCP 三次握手及四次挥手详细图解 TCP 三次握手是指建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包。三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号并交换 TCP 窗口...
为了更好地理解TCP的三次握手过程,可以通过Wireshark进行抓包分析。具体步骤如下: 1. **启动Wireshark**:打开Wireshark软件,准备捕获网络数据包。 2. **访问目标网站**:在浏览器中访问一个网站(例如...
Wireshark 分析 TCP 三次握手原理 Wireshark 是一个功能强大且广泛使用的网络封包分析软件,能够捕获网络封包,并尽可能地显示出最为详细的网络封包信息。Wireshark 广泛应用于网络管理员、网络安全工程师、开发者...
TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,它通过三次握手来建立连接,而通过四次挥手来断开连接。在计算机网络的参考模型中,TCP 属于传输层,与应用层(如HTTP、FTP)、网络层...
TCP 三次握手过程是 TCP 连接建立的过程,包括客户端的 SYN 请求、服务器的 SYN-ACK 应答和客户端的 ACK 确认。Wireshark 可以捕获和显示这个过程中的每个数据包,帮助用户了解 TCP 协议的工作机制。 Wireshark 是...
用wireshark抓取的tcp的三次握手和四次挥手的包,适用于初学者了解tcp连接建立和断开的流程
对于TCP三次握手的分析,Wireshark是一个非常有用的工具。 TCP(传输控制协议)是互联网上广泛使用的面向连接的协议,它的三次握手是建立可靠连接的关键步骤。使用Wireshark,我们可以清晰地观察到这个过程: 1. *...
通过Wireshark这样的网络嗅探工具,可以清晰地观察到TCP三次握手和四次挥手的过程,以及每个阶段的数据包细节,帮助理解TCP连接的生命周期和可靠性机制。在实际网络应用中,了解这些基本原理对于问题排查和性能优化...