1.无连接的
2.尽最大努力交付,即不保证可靠交付
3.面向报文的
4.UDP没有拥塞控制
5.支持一对一、一对多、多对一和多对多的交互通信;
6.首部开销小(只有四个字段:源端口、目的端口、长度、检验和)。
1.面向连接的,使用TCP协议前建立连接,传送数据完毕后,释放已经建立的TCP连接
2.每一条TCP连接只能有两个端点(两个套接字),每一条TCP连接只能是点对点的
3.TCP提供可靠交付的服务
4.TCP提供全双工通信
5.面向字节流的
UDP和TCP都是传输层协议
第一次:不能携带数据,消耗掉一个序号,TCP客户进程进入SYN-SENT(同步已发送)状态 SYN(同步位)
第二次:不能携带数据,消耗掉一个序号,TCP服务器进程进入SYN-RCVD(同步收到)状态
第三步:可以携带数据,不携带数据则不消耗序号。TCP连接已经建立。
为什么A还要发送一次确认呢? 防止已失效的连接请求突然传给了B,因而产生错误。
第一步:A把连接释放报文段首部(控制位FIN=1,序号seq=u),等于前面已传送过的数据最后一个字节的序号加1。A进入FIN-WAIT-1(终止状态一)。FIN报文段即使不携带数据,也消耗掉一个序号
第二步:B收到连接释放后发出确认,然后B进入CLOSE-WAIT(关闭等待)状态。此时TCP连接处于半关闭(half-close)状态,即A不用发送数据了,但B可以发送数据并且A仍要接受。A接收到B的确认后,就进入到FIN-WAIT(终止等待2)状态
第三步:B没有要向A发送的数据,B把连接释放报文段首部(控制位FIN=1,序号seq=w,ack=u + 1,ACK=1),然后B进入LAST-ACK(最后确认)状态,等待A的确认。
第四步:A收到B的释放报文段后,对此发出确认。然后进入TIME-WAIT(时间等待)状态。此时TCP连接还没有释放掉。
为什么A在TIME-WAIT状态必须等待2MSL(最长报文段寿命)的时间?
1.为了保证A发送的最后一个ACK报文段能够到达B。ACK可能丢失,导致B在LAST-ACK状态收不到确认。这时B超时重传FIN+ACK报文段,而A就能在2MSL时间内收到重传的FIN+ACK报文段,接着A重传一次确认,重启2MSL计时器。
2.防止上一次的“已失效的连接请求报文段”出现在本连接中。因为经过2MSL的时间,上一次连接产生的报文段都从网络中消失
参考资料:计算机网络[第7版][谢希仁]