一个用户从发起请求到接收到响应,中间经过哪些服务,每个服务做什么事情
1.先来看看一张概要图
2.分析过程
(1)用户输入url,浏览器内部代码将url进行拆分解析,如下图所示:
(2) 浏览器首先去找本地的hosts文件,检查在该文件中是否有相应的域名、IP对应关系,如果有,则向其IP地址发送请求,如果没有就会将domain(域)发送给 dns(域名服务器)进行解析(解析如下图),将域名解析成对应的服务器IP地址,发回给浏览器
第一次握手:host1发送一个TCP标志位 SYN=1、ACK=0的数据包给host2,并随机会产生一个Sequence number=1110,当host2接受到这个数据后,host2由SYN=1可知客户端是想要建立连接
第二次握手:host2要对客户端的联机请求进行确认,向host1发送应答号ACK=1、SYN=1、确认号Acknowledge number =1111,此值是host1的序列号+1,还会产生一个随机的序列号Sequence number = 22222,这样就告诉host1可以进行连接;
第三次握手:host1收到数据后检查Acknowledge number 是否是1110 + 1的值,以及ACK的值是否为1,若为1,host1会发送ACK = 1、确认号码Acknowledge number = 22222,告诉host2,你的请求连接被确认,连接可以建立
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
在运用此协议进行数据传输前都会进行连接的建立工作(三次握手)
当数据传输完毕,连接的双方都会通知对方要释放此连接(四次挥手)
tcp标志位有6种标志位
1.SYN(synchronous )建立联机
2.ACK(acknowledgement)确认
3.PSH(push)传送
4.FIN(finsh)结束
5.RST(reset)重置
6.URG(urgent)紧急
第一次挥手:当传输的数据到达尾部时,host1向host2发送FIN = 1标志位;可理解成,host1向host2说,我这边数据传送完成了,我准备断开连接了
第二次挥手:因TCP的连接是全双工的双向连接,关闭也是要从两边关闭;当host2收到host1发来的FIN=1的标志位后,host2不会立刻向host1发送FIND=1的请求关闭信息,而是先向host1发送一个ACK=1的应答信息,表示:你请求关闭的请求我已经收到,但我可能还有数据没有完成传送,你再等下,等我数据传输完成了我就告诉你
第三次挥手:host2数据传输完成,向host1发送FIN=1,host1收到请求关闭 连接的请求后,host1就明白host2的数据已经传输完成,现在可以断开连接了
第四次挥手:host1收到FIN = 1后,host1还是怕由于网络不稳定的原因,怕host2不知道他要断开连接,于是向host2发送ACK = 1确认信息进行确认,把自己(host1)设置成TIME_WAIT的状态并启动2MSL定时器,如果host2没有收到ACK,host2端重传定时器触发,会重发FIN = 1,要求host1重新发送ACK,当host2收到ACK后,host2就断开连接;;当host1等待2MSL(2倍报文最大生存时间)后,仍然没有收到host2的重传请求,他就知道 host2已经收到了ACK,所以 host1此时才关闭连接,否则会重复上述过程,如果被动一方始终没能收到ACK,最终会超过最大重传次数,连接被关闭 这一点设计地很巧妙