计算机网络篇---在浏览器输入网址后发什么了什么

                         在浏览器输入网址后发什么了什么

           这个问题是一个比较经典的面试题目了,考察的知识也比较全面,非常值得学习,尤其是像博主这样刚刚毕业的学生,非常需要把自己的知识做一个梳理,为面试做准备。加油

1.浏览器查找当前的url是否存在缓存,并比较缓存是否过期

2.DNS解析url,获得对应的ip地址

3.根据ip地址建立tcp链接(三次握手)

4.http发送请求

5.服务器处理请求,浏览器接受http响应

7.渲染界面,构建dom树

8.关闭tcp链接(四次挥手)

下面详细讲解一下三报文握手和四次挥手 

     三次握手认真来讲其实是在一次握手的过程中交换了三个报文,可以理解为一次握手,他们的手摇晃了三次。

               tcp报文段的首部各个字段的作用,有时间的同学,可以把所有的首部字段都看一看,因为tCP的全部功能都体现在他的首部字段的作用,只有理解了首部字段才能了解tcp的工作原理,这里就介绍一下会用到的

   序号:tcp是面向字节流的。在一个字节流中的每一个字节都是按序号编号,首部中的序号字段值指的是本报文段所发送的数据的第一个数据字节的序号,这里是seq表示

   确认号:是期望收到对方下一个报文段的第一个数据字节的序号,这里是ack表示

  确认ACK:仅当ACK=1时,确认号字段(ack)才有效,TCP规定,在连接建立后,所有传送的报文段都必须把ACK置为一

  同步SYN:在建立链接时用来同步序号。SYN=1的报文段不能携带数据,但是需要消耗一个序号

              SYN=1.ACK=0  :表示这是一个连接请求报文段

              SYN=1,ACK=1:表明这是同意连接报文段

 

      

 

前戏做完了,下面详细讲解一下TCP连接的过程

首先服务器先创建传输控制模块TCB,准备接受客户进程的连接请求,然后服务器就处于监听状态,等待客户端的连接请求、

客户端发送连接请求:客户进程也创建传输控制块,向服务器端发送连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x;,此时客户端进程进入SYN_SENT(同步发送状态 )

服务器端发送同意连接请求:服务器若同意连接,则向客户端发送确认,在确认报文段中需要把SYN位和ACK位都只置为1,确认号ack为x+1,序号seq=y;

客户端发送确认报文表示收到服务器的确认:确认报文段的ACK=1,seq=x+1,ack=y+1

 

为什么客户端最后还要发送一次确认呢?

主要是为了防止已失效的连接请求报文突然有传送到了服务器端,从而产生错误。

考虑这样一种情况,如果客户端发送的第一个连接请求报文丢失,于是又重发了一次连接请求,后来收到了确认,建立了连接,数据传输完毕就,释放了连接。

假如发送的请求连接并没有丢失而是延时到达,那么服务器收到连接请求,发送同意建立连接,连接建立,但是客户端现在并没有发出建立连接的请求,服务器就只能等待,许多资源就被浪费了。

以上就是客户端和服务器端建立连接的全过程了,下面详细讲一下四次挥手

 

 

                                          四次挥手,也就是tcp连接释放的过程

释放连接需要再理解一个首部字段

终止FIN:用来释放一个连接,当FIN=1时,表明此报文段的发送方发的数据已经发送完毕,并要求释放运输连接

TCP规定FIN报文段即使不携带数据也要消耗一个序号

 

 

数据传输结束后,通信双方都可以释放连接,此时都处于ESTABLISHED状态

1.客户端的应用进程先向TCP发出连接释放报文段,并且停止发送数据,主 动关闭TCP连接,释放报文段首部的终止控制位置为1,序号seq=u,它的值为已经传送过得数据的最后一个字节的序号加一。此时客户端进入FIN-WAIT_1状态(终止等待1),等待服务器端的确定。

2.服务器收到连接释放的报文段后发出确定,确认号是ack=u+1,而这个报文段本身的序号是v(等于服务器端之前 已经传送过得数据的最后的一个字节号加一),然后服务器就进入CLOSE-WAIT(关闭等待状态)。TCP服务器进程这时应通知高层应用进程,因而客户端到服务器端连接就关闭了,这时的TCP连接处于半关闭状态,服务器仍旧可以向客户端发送数据,而且这个状态可能会持续 一段时间。

3.客户端收到服务器端的确认后,就进入FIN-WAIT2状态,等待服务器发出连接释放报文

4.如果服务器已经没有要发送的数据其应用进程就通知TCP连接释放。这时候服务器发送的连接释放报文使FIN=1,现假定服务器发送的序号为W(在半关闭状态,服务器可能又发送了一段数据),确认号仍为ack=u+1,这时B进入LAST-ACK(最后确认状态),等待A的确认

5.客户端收到服务器端的连接释放报文后,发出确认报文,此时ACK置为1,确认号为ack=w+1,序号seq为u+1,此时进入TIME-WAIT(时间等待状态),此时TCP连接害没有释放掉,必须经过时间等待计时器设置的2MSL后,客户端才进入CLOSED状态。才能开始建立下一个新的TCP连接

时间MSL:最长报文段寿命,

为什么A在TIME-WAIT状态必须等待2MSL时间呢?

    1,为了客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK报文段可能会丢失,因而处于LAST-ACK状态的服务器收不到客户端的确认,服务器就会超时重传这个连接释放报文段,接着A重传一次,重新启动2MSL计时器。最后服务器和客户端都进入CLOSED状态。

如果客户端在TIME-wait状态不停留一段时间,而是在发送ACK报文段之后立即断开连接,那么就无法收到服务器端重传的连接释放报文段,那么 服务器就无法进入CLOSED状态

2.为了防止“已失效的连接请求报文段”出现在本连接中,客户端在发送完最后一个ACK报文段之后,在经过时间2MSL就可以使本连接持续时间内产生的所有报文段都从网络中消失。这样就可以使下一个新连接中不会出现这种旧的连接请求片段。

同时我们应该注意到服务器端结束TCP连接的时间要比客户端早。

到这里,一次TCP连接中的三次握手和四次挥手就结束了,身为科班出身,现在才算对此有一点认识,非常惭愧,希望有同样在学习这门课的学弟学妹好好听老师讲课,自己学习还是比不得有人带。加油!

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值