TCP(Transmission Control Protocol)) 是面向连接的传输层协议,所谓面向连接就是真正的数据传输开始前要建立连接的过程,否则不会进入真正的数据传输阶段。
三次握手(过程):请求端(客户端)发送一个SYN段指明客户打算连接服务器端口,以及初始序号(ISN)。SYN 段为报文段1。
服务器发回包含服务器的初始序号的SYN 报文段(报文段2)作为应答。同时,将确认序号设置为客户端的ISN加1以对客户的SYN 报文段进行确认。一个syn将占用一个序号。
客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段(报文段3)进行确认
自此,这三个报文段完成连接的建立
如下图所示:
发送第一个SYN的一端将执行主动打开(active open)。接收这个SYN并发回下一个SYN的另一端执行被动打开(passive open)
当一端为建立连接而发送它的SYN时,它为连接选择一个初始序号。ISN随时间而变化,因此每个连接都将具有不同的ISN。
一个TCP连接是全双工(即数据在两个方向上能同时传递)的,因此每个方向必须单独进行关闭,当一方完成它的数据发送任务后就发送一个FIN来终止这个方向连接。当一端收到一个FIN,它必须通知应用层另一段已终止了那个方向的数据传送。所以TCP终止连接的过程需要四次握手
UDP(User Datagram Protocol,用户数据报协议)是一个简单的无连接的传输层协议,UDP 不提供可靠性,它把应用层传给IP层数据发送出去,但是并不保证数据能否到达目的地和传说过程是否有数据丢失。
UDP和TCP 首部中有校验和,UDP的校验和是可选的,而TCP的校验和是必须的
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则是不可靠信道