TCP和UDP都是传输层协议,他们都属于TCP/IP协议族
目录
一、TCP协议
TCP(Transmission Control Protocol),传输控制协议。是一种面向连接的、可靠的、基于字节流的传输层通信协议,使用三次握手和四次挥手的连接管理机制。
传输数据时,可靠性和效率成反比,越可靠 效率越低,效率越高 可靠性越低。
TCP是综合考虑了两者,在可靠性和效率之间 取了一个平衡:不是保证绝对意义上的可靠,也不是保证绝对意义上的效率最高。
1.1 TCP协议的主要特点:
- 面向连接的;
- 可靠的;
- 基于字节流的方式;
- 提供拥塞控制;
- 一对一通信,每一条TCP连接只能有两个端点
- TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据;
- TCP连接的两端都设有发送缓冲区和接收缓冲区,用来临时存放双方通信的数据。
1.2 TCP的连接和断开:三次握手和四次挥手
关于TCP的连接与断开(三次握手与四次挥手)以及相关问题写于另一篇博客,博客链接如下:TCP的连接管理机制:三次握手与四次挥手
1.3 TCP的适用场景:
- 浏览器:HTTP、HTTPS协议
- 传输文件:FTP协议
- 基于邮件传输:STMP协议
- QQ文件传输等
1.4 基于TCP的协议:
HTTP、HTTPS、FTP等传输文件的协议,SMTP(简单邮件传输协议) Telnet
1.5 TCP可靠性机制:
确认应答机制、超时重传机制、连接管理机制、流量控制机制、拥塞控制机制。
(1)确认应答机制:
发送的数据,接收端需要返回确认接收到数据报的应答。
(2)超时重传机制:
发送端超过一定的时限,没有接收到ack应答包,就会进行重传。
- “一定的时限”——》动态变化的,跟网络环境(网速)有关,重传达到一定的次数,就会表示对方出现异常,关闭连接。
- “没有收到ack应答包”——》可能出现:(1)发送数据丢包(2)ack应答包丢包
- “重传”——》发送的数据包进行重新传输
(3)连接管理机制:
因为TCP的连接管理机制很重要且常考,所以重点写于另一篇链接如下:TCP的连接管理机制:三次握手与四次挥手 及相关问题
(4)流量控制机制:
背景:发送端发送速度 如果快于 接收端 程序读取速度,就可能导致接收端缓冲区被打满,进而引起一系列丢包,重传再次丢包的问题。
- “程序读取速度”——》程序从缓冲区读取接受的数据
- TCP协议首部:协议格式里面规定有16位窗口大小——>流量窗口大小
- 接收端接收能力有限,主动地告诉发送端,自己的接收能力。
- 接收能力——》接收端:接收缓冲区,剩余空间大小——》返回ack应答包,还会使用“窗口大小”字段来设置这个值
(5)拥塞控制机制:
背景:网络状态不明的情况下,贸然发送大量的数据报,就可能产生网络拥塞。类似于发快递,不清楚交通状况,就贸然发送大批量的货物,可能导致交通阻塞。
- 大概的含义:发送端在发送数据前,先根据”拥塞窗口“来探探路。
- “拥塞窗口”——》动态变化的
1.6 TCP效率机制:
滑动窗口、延迟应答机制、捎带应答机制。
(1)滑动窗口
作用:以并行的方式来发送数据报,减少等待的时间,提高效率。
- “减少等待的时间”——》叠加等待的时间
- “提高效率”——》提高数据传输的效率
这个过程类似于:
没有滑动窗口之前,网上购物只能收到一个再买下一个。
但是,有了滑动窗口之后:网上购物的 时候,可以同时买n个。
(2)延迟应答机制
背景:接收端返回流量窗口代表接收缓冲区的可用空间大小,如果立即返回,就不划算(立即返回的流量窗口大小就比较小);接收端可能接收速度还是比较快的,读走以后就可以设置的更大。
接收端返回的流量窗口,不是立即返回的,而是等待一定时间,这样返回的流量窗口大小就可能更大。
- “等待一段时间”——》延迟应答的由来
- “流量窗口”——》流量窗口的大小,是滑动窗口大小的决定因素之一;而滑动窗口的大小又是网络吞吐量的决定因素之一;所以,延迟应答是效率机制——延迟一定的时间,效率就更高。
- 窗口越大,网络的吞吐量就越大,传输效率就越高。
(3)捎带应答机制
背景:不管是客户端还是服务端,每一端,既可以是发送端,也可以是接收端。
不管是客户端还是服务端,在某一端,接收到数据后,返回的ack应答包(作为接收端),可以和发送的数据报(作为发送端)合并在一起(捎带的方式)一起发送给对方。
二、UDP协议
UDP(User Datagram Protocol),用户数据报协议。是无连接的,基于报文的传输层协议,提供面向事务的 简单不可靠信息传送服务,UDP协议主要作用是将数据网络流量压缩成数据包的形式。
UDP的传输过程类似于“寄信”,只管发,不管是否能收到。
2.1 UDP协议的主要特点:
- 无连接;
- 不可靠。尽最大努力交付,不保证可靠性服务;
- 传输速度快,因为头部开销小 只有8字节;
- 没有拥塞控制,即使出现网络拥塞也不会降低发送速率;
- 支持一对一、一对多、多对多通信;
- 面向数据报,对应用层交下来的报文,不合并不拆分,保留原报文的边界。(不会出现粘包问题)
2.2 UDP的适用场景:
- 适用于对通信的质量要求不高,但实时性要求高的地方:
- QQ语音,QQ视频,直播,视频传输等等;
- 可以用于广播;
2.3 基于UDP的协议:
- DNS(域名解析协议)
- DHCP(动态主机配置协议)
- TFTP(简单文件传输协议)
- NFS(网络文件系统)
- BOOTP(启动协议---用于无盘设备启动)
三、TCP和UDP的区别(重点)
1,连接:
- TCP是面向连接的,而UDP是无连接的。(TCP发送前需要先建立连接,而UDP不需要)
- TCP是面向连接的传输控制协议,而UDP提供了无连接的数据报服务。
2,可靠性:
- TCP是可靠的,而UDP是不可靠的。
- TCP提供可靠性服务,而UDP只是尽最大可能努力交付,不保证可靠性交付服务。
3,传输方式:
- TCP是面向字节流的,而UDP是面向数据报的。(流模式与数据报模式)
- TCP是流式传播的,没有边界,但保证顺序和可靠;UDP是一个包一个包发送的,有边界的,但可能会出现丢包和乱序
- 所以TCP可能会产生粘包问题,而UDP不会。
4,逻辑信道:
- TCP的逻辑信道是全双工的可靠信道,而UDP则是不可靠信道
5,连接对象个数:
- TCP只能一对一通信,而UDP支持一对一、一对多、多对一和多对多的交互通信。
6,拥塞控制和流量控制:
- TCP有拥塞控制和流量控制,保证了数据传输的安全性,而UDP没有,即使网络非常拥堵了,也不会影响UDP的发送效率。
7,接收和发送缓冲区:
- TCP接收缓冲区和发送缓冲区都有,而UDP只有接收缓冲区 没有发送缓冲区。
- 为什么UDP没有发送发送缓冲区?--UDP只管发,不管是否丢包。
8,首部开销:
- 首部开销不同,TCP的首部开销最小20字节,开销大,而UDP的首部开销仅需要8字节,开销小。(所以UDP的传输速度比TCP快)
9,系统资源:
- TCP对系统资源要求较多,UDP对系统资源要求较少。
10,传输大小限制:
- TCP传输的大小是不限的,而UDP传输的大小是受限的。
- TCP对数据包的大小没有限制,不需要自己切分数据包,TCP底层程序已经做好切分,而UDP是基于数据包构建,有大小限制,需要自己切割,不切割导致太大容易丢包;
11,应用场景不同:
- TCP适用于对数据传输的质量有较高的要求、但是对实时性要求不高的场景。(适用于可靠性比较高的地方)比如HTTP、HTTPS、FTP等传输文件的协议以及POP、SMTP等邮件传输的协议,应用TCP协议。
- UDP适用于实时性要求高,允许少量丢包的场景。(只对数据传输的 实时性要求较高,但不对传输质量有要求)比如视频传输、实时通信、语音电话、直播、语音广播等场景,应用UDP协议。
12,安全性:
- TCP传输机制多,容易被利用,例如:DOS、DDOS攻击,因此在安全性上不如UDP
- UDP没有TCP这么多机制,被利用的机会就会少很多,但是UDP也不是绝对安全的,也会被攻击。
- UDP比TCP更加安全。
五、TCP和UDP的优缺点:
TCP的优点:可靠、稳定。
TCP的缺点:速度慢,效率低;占用系统资源高;容易被攻击;可能出现粘包问题。
UDP的优点:快,比TCP安全,不会出现粘包问题。
UDP的缺点:不可靠;不稳定。