网络传输也是前端开发优化的一部分,尤为是传输图片视频等资源占用带宽较大。当请求数量比较大,为了保证并发性和用户体验,了解网络传输原理,进行网络优化成为必不可少的步骤。前段时间去今日头条面试,考到了这样一道题:"UDP和TCP的区别?什么是拥塞控制?" 有不少人学过相关内容,可是未必能考虑的比较充分。因而回去以后翻阅书籍《计算机网络》(第六版)谢希仁编著,将相关内容总结摘录。前端
运输层向它上面的应用层提供通讯服务。IP协议还停留在主机中的网络层,没有交付主机中的应用程序。通讯的真正端点并非主机而是主机中的进程,也就是说端到端通讯是应用进程之间的通讯。
运输层有一个很重要的功能——复用和分用。复用是指在发送方不一样的应用进程均可以使用同一个运输层协议传递数据(固然要加上适当的首部)。分用是指接收方的运输层在剥去报文首部后可以将这些数据正确交付目的应用进程。
运输层的俩个主要协议:
(1)用户数据报协议UDP
(2)传输控制协议TCP面试
(1)UDP是无链接的
发送数据以前不须要创建链接,发送数据结束以后也没有释放。
(2)UDP使用尽最大努力交付
不保证可靠交付,主机不须要维护复杂的链接状态表。
(3)UDP是面向报文的
发送方对应用程序交下来的报文,在添加首部以后就向下交付IP层。UDP对应用层交下来的报文既不合并也不拆分,而是保留这些报文的边界。也就是说应用层交付多长的报文,UDP就照样发送,即一次发送一个报文。
(4)UDP没有拥塞控制
这样网络出现拥塞不会使源主机的发送速率下降。容许网络在拥塞时丢失一些数据的应用是能够的。
(5)UDP支持一对一,一对多,多对一,多对多的交互通讯
(6)UDP的首部开销小
只有8个字节,比TCP的20个字节的首部要短。算法
(1)TCP是面向链接的运输层协议
应用程序在使用TCP协议以前必须先创建TCP链接。数据传输完以后,必须释放已经创建的链接。
(2)每一条TCP链接只能有两个端点,每一条TCP链接只能是点对点的(一对一)
(3)TCP提供可靠交付的服务
经过TCP链接传送的数据,无差错、不丢失、不重复、而且按序到达。
(4)TCP提供全双工通讯
TCP容许通讯双方的应用进程在任什么时候候都能发送数据。TCP的两端都有发送缓存和接收缓存。
(5)面向字节流
TCP中的“流”是指流入到进程或者从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),可是TCP把应用程序交下来的数据当作仅仅是一连串的无结构的字节流。
TCP并不关心应用程序一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络的拥塞状况来决定一条报文段应包含多少字节(UDP发送的报文程度应该是应用进程给出的)。缓存
(1)拥塞控制的通常原理
在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种状况就叫拥塞。
若网络中许多资源同时呈现供应不足,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而降低。
(2)拥塞控制
所谓拥塞控制,就是防止过多的数据注入到网络中,这样可使网络中的路由器或链路不至于过载。
拥塞控制都有一个前提就是:网络可以承受现有的网络负荷。拥塞控制是一个全局过程。
(3)拥塞控制方法
①慢开始和避免拥塞
慢开始算法思路:由小到大逐渐增大拥塞窗口值cwnd。每通过一个传输轮次,拥塞窗口值cwnd就加倍。
避免拥塞算法思路:让拥塞窗口值cwnd缓慢增大,每通过一个传输轮次就加1而不是加倍。
②快重传和快恢复网络
等到工做了遇到问题的时候才发现不少东西均可以从大学里学过的一些书籍中获得解决方案,只是当时简单学习了理论知识并无和实际应用联系起来。全部建议在读大学的同窗仍是要注重理论基础知识学习,联系实际。为之后的应用打下基础。并发