TCP和UDP之间有什么区别？解释TCP如何处理可靠交付(解释ACK机制)，流量控制(解释TCP发送器/接收器窗口)及拥塞控制。
TCP(传输控制协议)：TCP是一个面向连接的协议。从客户端到服务器可以建立一个连接，然后数据通过这个连接进行传输。TCP协议具有以下特点：
可靠的。当你沿着一个TCP套接字发送消息，只要连接没有完全中断，你就有把握它会到达目的地。如果数据包在传输过程中丢失了，服务器将重新请求丢失的数据包。这意味着服务器将接收到完整而没有损坏的数据。
有序的。TCP数据包中包括序号和确认，所以未按照顺序收到的包可以被排序。你不必为数据包的到达顺序而担心。
重量级的。当TCP字节流以错误的顺序到达，计算机将发出重新发送请求。序列中已经发出的部分必须一起放回，这个需要一些工作量。
UDP(用户数据报协议)：UDP是无连接的协议。UDP以数据块的形式在网络中发送消息/数据包。UDP协议的特点如下：
不可靠的。当你发送一个消息，你并不能确保它会到达。它有可能在传输中丢失。
无序的。当你发送出两个消息。你无法确保哪一个会先到达。
轻量的。不会考虑发送消息的顺序，没有连接跟踪，仅仅是发送出去，然后就不管它了。这也意味着它非常快速，网卡和操作系统只需要做很少的工作来数据包中的数据。
对于每个TCP数据包，如果接收者收到了数据包，那么它必须发出确认。发送方如果没有收到确认，会重新发送数据包。这个机制保证每个数据包都被传送到接收方。ACK是TCP协议中用于确认收到数据包的数据包。TCP窗口是发送方在得到接收方的确认前，在特定连接上能够发送的数据量。
例如，一对主机在TCP连接上进行通信，其中TCP窗口大小是64KB。那么，发送方发送完64KB的数据后就必须等待接收方的确认，接收方发送确认时可能已经收到了全部数据，也可能只收到了部分数据。如果接收方发出确认所有的数据都已经接收到，那么发送方就会发送另外64KB的数据。如果发送方收到的确认中表明接收方只收到了32KB的数据(另外32KB的数据可能还在传输，或者已经丢失)，那么发送方最多只能再发送32KB数据，因为同一时刻不能有超过64KB的未确认数据。(第二个32KB和此次发送的32KB都未确认)
TCP使用网络拥塞避免算法进行拥塞控制。有许多不同的算法可以解决这个问题。其中，Tahoe和Reno算法是最有名。为了避免拥塞，TCP使用多方位的拥塞控制策略。对于每个连接，TCP维护一个拥塞窗口，控制未确认数据包的总大小，这有点类似于TCP中用于流量控制的滑动窗口。TCP使用一种称为“慢启动”的机制来增加连接初始化后及超时后的拥塞窗口大小。一开始，拥塞窗口的大小是最大段大小(MSS)的2倍。尽管初始速率很低，但它增加得很快。每收到一个确认，拥塞窗口就增加1个MSS。这样，经过一个往返时间(RTT)，拥塞窗口就增加了一倍。当拥塞窗口的大小超过一个阈值，算法就进入一个新的状态，叫拥塞避免。