# TCP 与 UDP 的区别

1、TCP 面向连接（如打电话要先拨号建立连接）;UDP 是无连接的，即发送数据之前不需要建立连接 2、TCP 提供可靠的服务。也就是说，通过 TCP 连接传送的数据，无差错，不丢失，不重复，且按序到达;UDP 尽最大努力交付，即不保证可靠交付 3、TCP 面向字节流，实际上是 TCP 把数据看成一连串无结构的字节流;UDP 是面向报文的 UDP 没有拥塞控制，因此网络出现拥塞不会使源主机的发送速率降低（对实时应用很有用，如 IP 电话，实时视频会议等） 4、每一条 TCP 连接只能是点到点的;UDP 支持一对一，一对多，多对一和多对多的交互通信 5、TCP 首部开销 20 字节;UDP 的首部开销小，只有 8 个字节 6、TCP 的逻辑通信信道是全双工的可靠信道，UDP 则是不可靠信道

## TCP/IP 协议

TCP/IP 协议是一个协议簇。里面包括很多协议的，UDP 只是其中的一个， 之所以命名为 TCP/IP 协议，因为 TCP、IP 协议是两个很重要的协议，就用他两命名了。

TCP/IP 协议集包括应用层,传输层，网络层，网络

其中应用层包括: 1、超文本传输协议（HTTP）:万维网的基本协议； 2、文件传输（TFTP 简单文件传输协议）； 3、远程登录（Telnet），提供远程访问其它主机功能, 它允许用户登录 internet 主机，并在这台主机上执行命令； 4、网络管理（SNMP 简单网络管理协议），该协议提供了监控网络设备的方法， 以及配置管理,统计信息收集,性能管理及安全管理等； 5、域名系统（DNS），该系统用于在 internet 中将域名及其公共广播的网络节点转换成 IP 地址。

其次网络层包括: 1、Internet 协议（IP）； 2、Internet 控制信息协议（ICMP）； 3、地址解析协议（ARP）； 4、反向地址解析协议（RARP）。

## TCP 与 UDP 连接区别

TCP(或传输控制协议) 和 UDP(或用户数据协议)

TCP 与 UDP 的主要区别在于 UDP 不一定提供可靠的数据传输. 许多程序将使用单独的 TCP 连接和单独的 UDP 连接。重要的状态信息随可靠的 TCP 连接发送，而主数据流通过 UDP 发送。

TCP 在数据包接收无序、丢失或在交付期间被破坏时，负责数据恢复。它通过为其发送的每个数据包提供一个序号来完成此恢复。为确保正确地接收数据，TCP 要求在目标计算机成功收到数据时发回一个确认（即 ACK）。如果在某个时限内未收到相应的 ACK，将重新传送数据包。如果网络拥塞，这种重新传送将导致发送的数据包重复。

TCP 协议和 UDP 协议 TCP (传输控制协议)是面向连接的协议,也就是说,在收发数据前, 必须和对方建立可靠的连接. 一个 TCP 连接必须要经过三次 "对话"才能建立起来,其中的过程非常复杂.

第一次握手：主机 A 通过向主机 B 发送一个含有同步序列号的标志位的数据段给主机 B，向主机 B 请求建立连接，通过这个数据段， 主机 A 告诉主机 B 两件事：我想要和你通信；你可以用哪个序列号作为起始数据段来回应我。

第二次握手：主机 B 收到主机 A 的请求后，用一个带有确认应答（ACK）和同步序列号（SYN）标志位的数据段响应主机 A，也告诉主机 A 两件事：我已经收到你的请求了，你可以传输数据了；你要用那个序列号作为起始数据段来回应我

第三次握手：主机 A 收到这个数据段后，再发送一个确认应答，确认已收到主机 B 的数据段："我已收到回复，我现在要开始传输实际数据了，这样 3 次握手就完成了，主机 A 和主机 B 就可以传输数据了。

TCP 建立连接要进行 3 次握手，而断开连接要进行 4 次

第一次： 当主机 A 完成数据传输后,将控制位 FIN 置 1，提出停止 TCP 连接的请求 ；

第二次： 主机 B 收到 FIN 后对其作出响应，确认这一方向上的 TCP 连接将关闭,将 ACK 置 1；

第三次： 由 B 端再提出反方向的关闭请求,将 FIN 置 1 ；

第四次： 主机 A 对主机 B 的请求进行确认，将 ACK 置 1，双方向的关闭结束.。

解析名词:

1、ACK 是 TCP 报头的控制位之一，对数据进行确认。确认由目的端发出， 用它来告诉发送端这个序列号之前的数据段都收到了。 比如确认号为 X，则表示前 X-1 个数据段都收到了，只有当 ACK=1 时,确认号才有效，当 ACK=0 时，确认号无效，这时会要求重传数据，保证数据的完整性。

2、SYN 同步序列号，TCP 建立连接时将这个位置 1。

3、FIN 发送端完成发送任务位，当 TCP 完成数据传输需要断开时,，提出断开连接的一方将这位置

### TCP 流量控制、拥塞控制

为了避免流量控制引发的死锁，TCP 使用了持续计时器。每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口，则重置该计时器继续等待；若窗口不为 0，则表示应答报文丢失了，此时重置发送窗口后开始发送，这样就避免了死锁的产生。

拥塞控制和流量控制的区别

* 拥塞控制：拥塞控制是作用于网络的，它是防止过多的数据注入到网络中，避免出现网络负载过大的情况；常用的方法就是： （ 1 ）慢开始、拥塞避免 （ 2 ）快重传、快恢复。
* 流量控制：流量控制是作用于接收者的，它是控制发送者的发送速度从而使接收者来得及接收，防止分组丢失的。

## 两者的具体应用场景

### TCP 应用场景

当对网络通信质量有要求时，比如：整个数据要准确无误的传递给对方，这往往对于一些要求可靠的应用，比如 HTTP,HTTPS,FTP 等传输文件的协议，POP,SMTP 等邮件的传输协议。常见使用 TCP 协议的应用： 1.浏览器使用的：HTTP 2.FlashFXP:FTP 3.Outlook:POP，SMTP 4.QQ 文件传输

### UDP 文件传输协议

对当前网络通讯质量要求不高的时候，要求网络通讯速度尽量的快，这时就使用 UDP 日常生活中常见使用 UDP 协议： 1.QQ 语音 2.QQ 视频 3.TFTP
