输入url地址并按下回车发生了什么?
-
输入url地址后,首先进行DNS解析,并将相应的域名解析为IP地址。
-
客户端根据IP地址去寻找相应的服务器。
-
与服务器进行TCP的三次握手。
三次握手:客户端请求与服务器端相连接时总共发送了三次数据包。
-
客户端通过HTTP协议发送请求。
-
服务器处理请求。
服务器接收到请求,并做出响应。
-
服务器发出一个html响应。
返回状态码200,表示服务器可以响应请求,返回报文,由于在报文中Content-Type为‘text/html’,浏览器以HTML形式呈现,而不是下载。
-
释放TCP连接,四次挥手。
-
浏览器根据自身的执行机制解析页面。(浏览器执行机制?重绘?重排?)
-
服务器将解析信息返回给客户端,进行TCP的四次挥手。
-
最后,客户端显示自己请求,即服务器端返回的东西。
三次握手和四次挥手
三次握手
定义:三次握手指建立一个TCP连接时,需要客户端和服务器总共发送3个包。
-
第一次握手(SYN=1,seq=x); (你好,服务器,在吗?我想和你建立连接,你收到我的消息了吗?)
客户端发送一个TCP的SYN标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号X。保存在包头的序列号(Sequence Number)字段中。
发送完毕后,客户端进入SYN_SEND状态。
-
第二次握手(SYN=1,ACK=1,seq=y,ACKNum= x+1)(客户端,我在呢,可以建立连接,你收到我答复的消息了吗?)
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1.服务器选择自己的ISN序列号,放到Seq域里,同时将确认序号(ACKNum)设置为客户的ISN加1,即x+1。发送完毕后,服务器进入SYN_RCVD状态。
-
第三次握手(ACK=1,ACKNum=y+1)(收到服务器的消息了,进行连接)
客户端再次发送确认包(ACK),SYN标志位为1,并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方,并且在灵气段放写ISN的+1
四次挥手:
定义:TCP的拆除需要发送四个包,因此称为四次挥手。客户端和服务端都可主动发起挥手动作。
-
第一次挥手(FIN=1,seq=x)(老弟,我这边没有数据要传了,咱们关闭连接吧)
假设客户端想要关闭连接,客户端发送一个FIN标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据。
发送完毕后,客户端进入FIN_WAIT_1状态。
-
第二次挥手(ACK=1,ACKnum=x+1)(好的,接收到了,我看看我这边还有没有要传的。)
服务端确认客户端的FIN包,发送一个确认包,表明自己接收了客户端关闭连接的请求,但是还没准备好关闭连接。
发送完毕后,服务端进入close_wait状态,客户端接收到这个确认包之后,进入FIN_WAIT_2状态,等待服务器关闭连接。
-
第三次挥手(FIN=1,seq=y)(我这边也没有数据要传了,关闭吧)
服务器准备关闭连接时,向客户端发送结束连接请求,FIN置为1.
发送完毕后服务器端进入LAST_ACK状态,等待来自客户端的最后一个ACK。
-
第四次挥手(ACK=1,ACKnum=y+1)(好的,收到,关闭)
客户端接收到来自服务器端的关闭请求,发达一个确认包,并进入TIME_WAIT状态,等待可能出现的要求重传的ACK包。
服务器端接收到这个确认包后,关闭连接,进入CLOSED状态。
客户端等待了某个固定的时间之后,没有收到服务器端的ACK,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入closed状态。