目录
1. 域名ip解析
a. 首先会搜索浏览器自身的DNS缓存中域名对应的ip地址(过期时间1分钟且只缓存1000条)
b. a若没有在浏览器缓存中找到,浏览器会搜索系统自身的DNS缓存
c. b若还未找到,那么会尝试从系统hosts文件中去查找(c:\windows\systems32\drivers\etc\hosts)
d. 若还没找到,浏览器会向本地配置的DNS服务器发送一个域名解析请求,递归去查找
2. 建立TCP连接——三次握手
TCP6种标志位:SYN(建立联机)、ACK(确认)、PSH(传送)、FIN(结束)、RST(重置)、URG(紧急)、Sequence number(顺序号码)、ACKnowledge number(确认号码)
ACK=0表示未确认,SYN=1表示这是一个连接请求或连接接受报文

第一次连接(SYN=1,seq=x):
客户端向服务器发SYN报文,表示要与服务器建立TCP连接,同时该报文数据包的序号seq=x(如:初始序号为0也就是第0号包),客户端进入syn_send状态
第二次连接(SYN=1,seq=y,ACK=1,ack=x+1):
服务器向客户端发送一个ACK报文,确认号为ack=x+1(对方的序号+1),表示确认服务器经收到客户端可序号为x开始的数据包。同时也发送一个SYN报文,该报文数据包序号为seq=y,服务器进入syn_rcvd状态
第三次连接(ACK=1,ack=y+1,seq=x+1;可携带数据,第一第二次不可以):
客户端向服务器发送确认包(ACK=1),确认号为ack=y+1(对方的序号+1),表示客户端已经收到服务器序号为y+1开始的数据包,此时客户端和服务器都进入established状态
为什么是三次握手?
因为第三次握手才能确认客户端成功接收服务端的连接响应
三次握手的目的是什么?
建立TCP通信,和对方同步序列号(seq)和确认号(ack),交换通信窗口的大小等
3. 发起http请求
a. 建立TCP连接后,发起http请求。
http的请求报文由三部分组成:请求行、请求头、请求正文
请求行:用于描述客户端的请求方式、请求的资源名称、使用的http协议的版本号(如:GET/books/list.html/1.1)
请求头:用于描述客户端请求哪台主机、客户端的环境信息等
请求正文:当使用PUT、POST等方法时,需客户端向服务器传递数据,这些数据就存储在请求正文中(GET请求是保存至url后面,不在这里)
b. 服务器响应http请求,浏览器获得html代码文件
http响应报文也有三个部分组成:状态码、响应头、实体内容
状态码:表示服务器对请求的处理结果 (如:200成功、302重定向、403没有访问权限、500服务器内部错误)
响应头:用于描述服务器的基本信息,
实体内容:服务器返回给客户端的数据、规定客户端应数和响应数据
c. 浏览器解析html代码,并请求html代码中的资源
d. 浏览器对页面进行渲染
4. 断开TCP连接——四次挥手
第一次连接(FIN=1,seq=u):
客户端向服务器发送TCP标志位FIN=1的报文,表示要断开连接。同时发送一个序号为u的数据包
第二次连接(ACK=1,ack=u+1,seq=v):
服务器向客户端发送一个确认数据包(ACK=1),确认号为ack=u+1,同时发送一个数据包序号为seq=v的数据包
第三次连接(FIN=1,ACK=1=1,ack=u+1,seq=w):
服务器发送要断开TCP连接(FIN=1)的确认数据包(ACK=1),ack=u+1(服务器两次发送确认包中间客户端并没有发送数据包给服务器,所以依旧为u+1),同时发送一个序列号为seq=w的数据包
第四次连接(ACK=1,ack=w+1,seq=u+1):
客户端向服务器发送确认包(ACK=1),同时发送一个序列号为seq=u+1的数据包
至此,客户端和服务器的TCP连接链路断开!
文章详细阐述了网络通信的过程,包括从浏览器的DNS缓存查找IP,通过三次握手建立TCP连接,发起HTTP请求,到服务器响应和浏览器渲染页面,最后通过四次挥手断开TCP连接。三次握手确保连接建立,四次挥手确保双方安全关闭连接。
2300

被折叠的 条评论
为什么被折叠?



