💻 Computer Basics
1、计算机网络
1.1 传输层:TCP和UDP
1.1.1 三次握手
1.1.2 四次挥手
1.1.3 流量控制
1.1.4 拥塞控制
1.1.5 TCP和UDP的区别
1.1.6 TCP如何保证传输的可靠性
1.1.7 TCP长连接和短连接
1.1.8 应用层提高UDP协议可靠性的方法
1.1.9 UDP和IP的首部结构
1.2 应用层:HTTP和HTTPS
1.2.1 HTTP和HTTPS的区别
1.2.2 GET和POST的区别
1.2.3 Session与Cookie的区别
1.2.4 从输入网址到获得页面的过程(越详细越好)
1.2.5 HTTP请求有哪些常见的状态码
1.2.6 什么是RIP,算法是什么
1.2.7 HTTP1.1和HTTP2.0的主要区别
1.2.8 DNS
1.2.9 HTTPS加密和认证过程
1.2.10 常见网络攻击
1.2.11 REST
1.3 计算机网络体系结构
1.4 网络层协议
1.4.1 IP地址的分类
1.4.2 划分子网
1.4.3 什么是ARP协议
1.4.4 NAT协议
2、操作系统
2.1 进程和线程
2.1.1 进程和线程的区别
2.1.2 进程间通信方式
2.1.3 同步原语
2.1.4 进程状态
2.1.5 进程调度策略
2.1.6 僵尸进程和孤儿进程
2.1.7 协程
2.1.8 异常控制流
2.1.9 IO多路复用
2.1.10 用户态和内核态
2.2 死锁
2.3 内存管理
2.3.1 分段与分页
2.3.2 虚拟内存
2.3.3 页面置换算法
2.3.4 局部性原理
2.3.5 缓冲区溢出
2.4 磁盘调度
-
+
游客
注册
登录
TCP和UDP的区别
## 1 TCP 与 UDP 的区别有哪些 1. **TCP 是面向连接的,UDP 是无连接的**: 1. 应用程序在**使用 TCP 协议之前**,必须**先[建立 TCP 连接](https://notebook.ricear.com/project-26/doc-301)**,在**传送数据完毕之后**,必须[释放已经建立的 TCP 连接](https://notebook.ricear.com/project-26/doc-302)。 2. 应用程序**使用 UDP 协议发送数据之前不需要建立连接**(当然,发送数据结束时也没有连接可释放),因此**减少了开销和发送数据之前的时延**。 2. **TCP 是可靠的,UDP 是不可靠的**: 1. TCP 提供[可靠交付](https://notebook.ricear.com/project-26/doc-306)的服务,通过 TCP 连接传送的数据**无差错**、**不丢失**、**不重复**,并且**按序到达**。 2. UDP 使用**尽最大努力交付**,即**不保证可靠交付**,因此**主机不需要维持复杂的连接状态表**。 3. **TCP 只支持点对点通信,UDP 支持一对一、一对多、多对一和多对多的交互通信**; 4. **TCP 是面向字节流的,UDP 是面向报文的**: > 面向字节流是指**发送数据时以字节为单位**,**一个数据包可以拆分成若干组进行发送**,而**UDP 一个报文只能一次发完**。 > 1. TCP 中的「**流**」指的是**流入到进程或从进程流出的字节序列**,「**面向字节流**」的含义是**虽然应用进程和 TCP 的交互是一次一个数据块**(大小不等),**但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流**,**TCP 并不知道所传送的字节流的含义**。 2. TCP**不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系**(例如,发送方应用程序交给发送方的 TCP 共 10 个数据块,但接收方的 TCP 可能只用了 4 个数据块就把收到的字节流交付上层的应用程序),**但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样**,而且,**接收方的应用程序必须有能力识别收到的字节流**,**把他还原成有意义的应用层数据**。 ![](https://notebook.ricear.com/media/202206/2022-06-15_160115_211537.png) > 上图中的 TCP 连接是一条**虚连接**(也就是逻辑连接),而不是一条真正的物理连接,TCP 报文段先要传送到 IP 层,加上 IP 首部后,再传送到数据链路层,再加上数据链路层的首部和尾部后,才离开主机发送到物理链路。 > 3. **发送方的 UDP 对应用程序交下来的报文**,**在添加首部后就向下交付 IP 层**,UDP 对应用层交下来的报文,**既不合并**,**也不拆分**,而是**保留这些报文的边界**,这就是说,应用层交给 UDP 多长的报文,UDP 就**照样发送**,即**一次发送一个报文**。 4. **在接收方的 UDP**,**对 IP 层交上来的 UDP 用户数据报**,**在去除首部后就原封不动地交付上层的应用进程**,也就是说,UDP**一次交付一个完整的报文**。 5. 因此,**应用程序必须选择合适大小的报文**,若**报文太长**,**UDP 把他交给 IP 层后**,**IP 层在传送时可能要进行分片**,**这会降低 IP 层的效率**,反之**报文太短**,**UDP 把他交给 IP 层后**,**会使 IP 数据报的首部的相对长度太大**,**这也降低了 IP 层的效率**。 ![](https://notebook.ricear.com/media/202206/2022-06-15_162625_554863.png) 5. **TCP 有[拥塞控制](https://notebook.ricear.com/project-26/doc-304)机制,UDP 没有**: 1. **使用 UDP 协议的应用程序在网络出现的拥塞不会使源主机的发送速率降低**,这对某些**实时应用**是很重要的,很多的实时应用(IP 电话、实时视频会议)**要求源主机以恒定的速率发送数据**,并且**允许在网络发生拥塞时丢失一些数据**,但却**不允许数据有太大的时延**,UDP 正好适合这种要求。 > 虽然某些实时应用需要使用没有拥塞控制的 UDP,但当很多的源主机同时都向网络发送高速率的实时视频流时,网络就有可能发生拥塞,结果大家都无法正常接收,因此,**不使用拥塞控制功能的 UDP 有可能会引起网络产生严重的拥塞问题**。 > > 还有一些使用 UDP 的实时应用,需要**对 UDP 的不可靠的传输进行适当的改进**,以**减少数据的丢失**,在这种情况下,**应用进程本身可以在不影响应用的实时性的前提下**,**增加一些[提高可靠性](https://notebook.ricear.com/project-26/doc-929)的措施**,如采用**前向纠错**或**重传已丢失的报文**。 > 6. **TCP 首部开销**(20 字节)**比 UDP 首部开销**(8 字节)**要大**。 ## 2 什么时候选择 TCP,什么时候选择 UDP 1. 对某些**实时性要求比较高**的情况,选择**UDP**,比如游戏、媒体通信、实时视频流(直播),即使出现传输错误也可以容忍。 2. 其他大部分情况下,**HTTP 都是用 TCP**,因为要求传输的内容可靠,不出现丢失。 ## 3 HTTP 可以使用 UDP 吗 1. **HTTP3.0**之前使用 TCP 协议,而 HTTP3.0 使用**基于 UDP 协议的 QUIC 协议组成**。 2. 此变化主要是为了解决 HTTP2.0 中存在的**对头阻塞**问题,由于 HTTP2.0 在单个 TCP 连接上使用了**多路复用**,受到 TCP**拥塞控制**的影响,少量的丢包就可能导致整个 TCP 连接上的所有流被阻塞。 ## 4 面向连接和无连接的区别 * **面向连接的网络服务(虚电路服务):** 1. 首先**建立连接**,所有的**数据包经过相同的路径**,**服务质量有较好地保证**。 * **无连接的网络服务(数据报服务):** 1. 每个数据包含目的地址,**数据路由相互独立**,**路径可能变化**。 2. 网络**尽最大努力交付数据**,但**不保证不丢失**、**不保证先后顺序**、**不保证在时限内交付**。 3. **网络发生拥塞时,可能会将一些分组丢弃**。 ## 参考文献 1. [TCP 与 UDP 的区别](https://github.com/wolverinn/Waking-Up/blob/master/Computer%20Network.md#TCP%E4%B8%8EUDP%E7%9A%84%E5%8C%BA%E5%88%AB)。
ricear
2022年6月20日 14:48
©
BY-NC-ND(4.0)
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码