UDP与TCP

一:前言

网络传输也是前端开发优化的一部分,尤其是传输图片视频等资源占用带宽较大。当请求数量比较大,为了保证并发性和用户体验,了解网络传输原理,进行网络优化成为必不可少的步骤。前段时间去今日头条面试,考到了这样一道题:”UDP和TCP的区别?什么是拥塞控制?” 有很多人学过相关内容,但是未必能考虑的比较充分。于是回去之后翻阅书籍《计算机网络》(第六版)谢希仁编著,将相关内容总结摘录。

二:主要内容

1.运输层

运输层向它上面的应用层提供通信服务。IP协议还停留在主机中的网络层,没有交付主机中的应用程序。通信的真正端点并不是主机而是主机中的进程,也就是说端到端通信是应用进程之间的通信。
运输层有一个很重要的功能——复用和分用。复用是指在发送方不同的应用进程都可以使用同一个运输层协议传递数据(当然要加上适当的首部)。分用是指接收方的运输层在剥去报文首部后能够将这些数据正确交付目的应用进程。
运输层的俩个主要协议:
(1)用户数据报协议UDP
(2)传输控制协议TCP

2.UDP特点

(1)UDP是无连接的
发送数据之前不需要建立连接,发送数据结束之后也没有释放。
(2)UDP使用尽最大努力交付
不保证可靠交付,主机不需要维护复杂的连接状态表。
(3)UDP是面向报文的
发送方对应用程序交下来的报文,在添加首部之后就向下交付IP层。UDP对应用层交下来的报文既不合并也不拆分,而是保留这些报文的边界。也就是说应用层交付多长的报文,UDP就照样发送,即一次发送一个报文。
(4)UDP没有拥塞控制
这样网络出现拥塞不会使源主机的发送速率降低。允许网络在拥塞时丢失一些数据的应用是可以的。
(5)UDP支持一对一,一对多,多对一,多对多的交互通信
(6)UDP的首部开销小
只有8个字节,比TCP的20个字节的首部要短。
《UDP与TCP》

3.TCP特点

(1)TCP是面向连接的运输层协议
应用程序在使用TCP协议之前必须先建立TCP连接。数据传输完之后,必须释放已经建立的连接。
(2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)
(3)TCP提供可靠交付的服务
通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达。
(4)TCP提供全双工通信
TCP允许通信双方的应用进程在任何时候都能发送数据。TCP的两端都有发送缓存和接收缓存。
(5)面向字节流
TCP中的“流”是指流入到进程或者从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但是TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。
TCP并不关心应用程序一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络的拥塞情况来决定一条报文段应包含多少字节(UDP发送的报文程度应该是应用进程给出的)。

4.拥塞控制

(1)拥塞控制的一般原理
在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。
若网络中许多资源同时呈现供应不足,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。
(2)拥塞控制
所谓拥塞控制,就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。
拥塞控制都有一个前提就是:网络能够承受现有的网络负荷。拥塞控制是一个全局过程。
《UDP与TCP》
(3)拥塞控制方法
①慢开始和避免拥塞
慢开始算法思路:由小到大逐渐增大拥塞窗口值cwnd。每经过一个传输轮次,拥塞窗口值cwnd就加倍。
避免拥塞算法思路:让拥塞窗口值cwnd缓慢增大,每经过一个传输轮次就加1而不是加倍。
②快重传和快恢复

三:后记

等到工作了遇到问题的时候才发现很多东西都可以从大学里学过的一些书籍中得到解决方案,只是当时简单学习了理论知识并没有和实际应用联系起来。所有建议在读大学的同学还是要注重理论基础知识学习,联系实际。为以后的应用打下基础。

    原文作者:TCP
    原文地址: https://segmentfault.com/a/1190000009564095
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞