TCP 如 何 保 证 可 靠 传 输 ?
1、链接前进行三次握手
2、应用数据被分割成 TCP 认为最适合发送的数据块(按字节编号,合理分片)。这和 UDP 完 全不同,应用程序产生的数据报长度将保持不变。 (将数据截断为合理的长度)
3、当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不 能及时收到一个确认,将重发这个报文段。(超时重发)
4、当 TCP 收到发自 TCP 连接另一端的数据,它将发送一个确认。这个确认不是立即发送, 通常将推迟几分之一秒 。(对于收到的请求,给出确认响应)
5、TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传 输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到 此报文段。 (校验出包有错,丢弃报文段,不给出响应,TCP 发送数据端,超时时会重发 数据)
6、既然 TCP 报文段作为 IP 数据报来传输,而 IP 数据报的到达可能会失序,因此 TCP 报 文段的到达也可能会失序。如果必要,TCP 将对收到的数据进行重新排序,将收到的数据 以正确的顺序交给应用层。 (对失序数据进行重新排序,然后才交给应用层)
7、既然 IP 数据报会发生重复,TCP 的接收端必须丢弃重复的数据。(对于重复数据,能够 丢弃重复数据)
8、TCP 还能提供流量控制。TCP 连接的每一方都有固定大小的缓冲空间。TCP 的接收端 只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲 区溢出。(TCP 可以进行流量控制,防止较快主机致使较慢主机的缓冲区溢出)
TCP 使用的 流量控制协议是可变大小的滑动窗口协议。
9、TCP 还能提供拥塞控制。当网络拥塞时,减少数据的发送
TCP 存在的缺陷有哪些?
1.TCP 三次握手可能会出现 SYN Flood 攻击。
2.TCP 三次握手可能会出现 Land 攻击。
2.Connection Flood 攻击。
TCP 与 UDP 的区别
1、 基于连接 vs 无连接
TCP 是面向连接的协议,而 UDP 是无连接的协议
2、可靠性保障:
TCP 提供交付保证,这意味着一个使用 TCP 协议发送的消息是保证交付给客户端的, 如果消息在传输过程中丢失,那么它将重发。UDP 是不可靠的,它不提供任何交付的保证, 一个数据报包在运输途中可能会丢失。
3、顺序:
TCP 协议将会为你排好序。UDP 不提供任何 有序性的保证。
4、速度
TCP 速度比较慢,而 UDP 速度比较快,因为 TCP 必须创建连接,以保证消息的可靠 交付和有序性,他需要做比 UDP 多的事。这就是为什么 UDP 更适用于对速度比较敏感的 应用。TCP 适合传输大量数据,UDP 适合传输少量数据。
5、重量级 vs 轻量级
TCP 是重量级的协议,UDP 协议则是轻量级的协议。
6.流量控制或拥塞控制
TCP 有流量控制和拥塞控制。UDP 没有流量控制和拥塞控制。
7.TCP 面向字节流,UDP 是面向报文的。
8.TCP 只能单播,不能发送广播和组播;UDP 可以广播和组播
UDP 为何快?
1.不需要建立连接
2.对于收到的数据,不用给出确认
3.没有超时重发机制
4.没有流量控制和拥塞控制
TCP 如何实现流量控制和拥塞控制。tcp 是怎么做错误处理的?
流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。利用滑动窗口 机制可以很方便地在 TCP 连接上实现对发送方的流量控制。原理这就是运用 TCP 报文段中 的窗口大小字段来控制,发送方的发送窗口不可以大于接收方发回的窗口大小。
说下 TCP 的黏包 ?
本来发送的是多个 TCP 报文,但是在接收端收到的却是一个报文, 把多个报文合成了一个报文。