浏览器原理学习--如何保证页面文件能被完整地送达浏览器

在前后端交互过程中,前端页面所需要的一些页面信息是通过浏览器和后台服务器之间建立的TCP连接传输的。TCP连接就好比实实在在的运输通道,好比基础的交通设施,好比道路和桥梁,网络数据就在这些道路上运输,到达指定的目的地。

数据的运输之前,双方必须达成协议,就好比买卖双方必须提前沟通好信息:价格是多少,要几斤几两,要哪种成色的货物等。双方都达成共识了之后,交流才会是无障碍的。

如果传输数据太大,数据会被拆成一个个小的数据包分别发送,每个数据包会被标上描述顺序的标识,等到接收方拿到后,可以按照顺序重新组装成完成的数据。

数据发送之前,首先需要知道数据要发给谁,这就需要网际协议(Internet Protocol,简称 IP)来识标,互联网上每一台设备都有唯一的IP地址,就和我们的居住地址和门牌一样,必须唯一才能精确定位。

数据在传输前需要经过一层层的处理才能发送,首先需要把目标IP添加到数据包上,还需要把自己的IP也添加上去,这样目标处理好数据后才知道该把处理好的数据返回给谁。服务器拿到数据后会反向操作数据,即先拆开数据拿到IP相关信息,然后才拿到最里面的数据包。

浏览器上一般会运行多个程序,而区分这些程序的一个标准就是端口号,请求回来的数据应该给到哪个程序去消费,这就需要UDP来分配了,用户数据包协议(User Datagram Protocol)的作用就是把数据包送达应用程序。

UDP其中一个功能是通过给数据标识上当前程序运行的端口号,发送请求前,网络进程已经把端口号或页签标识放到数据头里了,取回数据后相关信息包括端口号一并带回来,让浏览器知道取回来的数据是从哪个程序发出的,位于哪个端口或页签上,并把数据给到对应的程序消费。

IP和端口号组合在一起共同起到了程序定位的作用,数据就有了明确的传输目的了。

UDP传输数据的一个缺点就是容易丢包,且不重传;并且分包数据不是按顺序到达时,UDP无法智能地组装数据,形成完整的数据流,可靠性不是很高。所以主要功能是把数据分配到对应的端口所在程序去。

 

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议

相较于UDP传输,TCP的有点有:

  • 对于数据包丢失的情况,TCP 提供重传机制;
  • TCP 引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。

TCP传输的主要流程和UDP差不多,除此之外还提供了用于排序的序列号,以便接收端通过序号来重排数据包,这样就保证了大数据包的完整传输。

经典的三次握手四次挥手

为什么是3次握手呢?我理解的是,3次沟通是确定双方都有发送和接收信息的最少次数。第一次:a到b,能确保a有发送能力 ;第二次:b到a,能确保b有接收和发送能力;第三次:a到b,能确保a有接收能力。这样就能确保双方都有发送和接收能力,可以建立完整的连接了。

4次挥手依然是为了确保双方达成断开连接的共识的最少次数。a:我要断开连接了。b:好的,你断开吧。a(断开操作):我已经断开了。b:好的,我知道了(不在传输数据)。

TCP的数据重发:

在传输数据阶段,接收端需要对每个数据包进行确认操作,也就是接收端在接收到数据包之后,需要发送确认数据包给发送端。所以当发送端发送了一个数据包之后,在规定时间内没有接收到接收端反馈的确认消息,则判断为数据包丢失,并触发发送端的重发机制。同样,一个大的文件在传输过程中会被拆分成很多小的数据包,这些数据包到达接收端后,接收端会按照 TCP 头中的序号为其排序,从而保证组成完整的数据。

互联网中的数据都是通过一个个小的数据包来传输的,为了保证数据传输的完整性,TCP提供了重传机制,降低数据的丢失;为了能正确的把数据包组装还原,TCP采用了排序传输,给每个数据包标上序号,接收端根据序号排列组装即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章