TCP:面向连接,字节流,和可靠传输
使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须要为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,即双方的数据可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。
TCP:发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系。
TCP如图所示:
UDP如图所示:
TCP传输是可靠的。首先TCP采用发送应答机制,即发送端发送的每个TCP报文段都必须得到接收方的应答,才认为这个TCP报文段传输成功。其次TCP协议采用超时重传机制,发送端在发送出一个TCP报文段之后启动定时器,如果在定时时间内未收到应答,它将重发该报文段。最后因为TCP报文段最终是以IP数据报发送的,而IP数据报到达接收端可能乱序,重复,所以TCP协议还会对接收到的TCP报文段重排,整理,再交付给应用层。
TCP头部结构如图所示:
TCP连接:三次握手,四次挥手
TCP的半关闭状态:TCP连接是全双工的,所以它允许两个方向的数据传输被独立关闭。换言之,通信的一端可以发送结束报文段给对方,告诉它本端已经完成了数据的发送,但允许继续接收来自对方的数据,直到对方也发送结束报文段以关闭连接。
TIME_WAIT:客户端连接在收到服务器端的结束报文段之后,并没有立即进入CLOSED状态,而是转移到TIME_WAIT状态。在这个状态,客户端连接要等待一段长为2MSL(Max Segment Life 报文段最大生存时间)的时间,才能完全关闭。当一个TCP连接处于该状态时,我们将无法立即使用该连接占用着的端口来建立一个新连接。
该状态存在的原因:
1. 可靠的终止TCP连接
2. 保证让迟来的TCP报文段有足够的时间被识别并丢弃。
半打开连接状态:服务器(或客户端)关闭或者异常终止了连接,而对方没有收到结束报文段(比如发生了网络故障),此时,客户端(或服务器)还维持着原来的连接,而服务器(或客户端)即使重启,也已经没有该连接的任何信息了。如果客户端(或服务器)往半打开状态的连接写入数据,则对方将回应一个复位报文段。
TCP连接交换的应用程序数据按照长度分为:交互数据和成块数据。