TCP、UDP协议对比
任务:掌握TCP协议、UDP协议的作用;TCP的三次握手和四次挥手;RST断开连接过程和作用。
1.TCP
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。TCP在IP报文的协议号是6。
1.1 TCP的三次握手
三次握手的目的是连接服务器指定端口,建立TCP连接。三次握手过程可同步连接双方的序列号和确认号,并交换 TCP 窗口大小等。
第一次握手:建立连接时,HostA发送SYN包(syn=0)到HostB,SYN位置1,并进入SYN_SENT状态,等待HostB确认;(SYN为同步序列编号)
第二次握手:HostB收到SYN包,必须确认客户的SYN(ack=0+1),同时自己也发送一个SYN包(syn=0),即SYN+ACK包,SYN为和ACK位置1,此时HostB进入SYN_RECV状态;
第三次握手:HostA收到HostB的SYN+ACK包,向HostB发送确认包ACK(ack=0+1),ACK位置1,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
1.2 TCP的四次挥手
四次挥手指的是TCP连接拆除时,要发四个包才能彻底断开连接。
1)HostA进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=101,此时HostA进入FIN-WAIT-1(终止等待1)状态。( TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。)
2)HostB收到连接释放报文,发出确认报文,ACK=1,ack=102,并且带上自己的序列号seq=301,此时HostB就进入了CLOSE-WAIT(关闭等待)状态。此时HostA已经没有数据要发送了,但是HostB若发送数据,HostA依然要接受。HostA收到HostB的确认请求后,HostA就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受HostB发送的最后的数据)。
3)HostB将最后的数据发送完毕后,就向HostA发送连接释放报文,FIN=1,ack=102,由于在半关闭状态,HostB很可能又发送了一些数据,假定此时的序列号为seq=301,此时HostB就进入了LAST-ACK(最后确认)状态,等待HostA的确认。
4)HostA收到HostB的连接释放报文后,HostA就进入了TIME-WAIT(时间等待)状态。此时TCP连接还没有释放,必须经过2个MSL(最长报文段寿命)的时间后,当HostA撤销相应的TCB(计算机内保护装置的总体)后,才进入CLOSED状态。而HostB只要收到了HostA发出的确认,立即进入CLOSED状态。
1.3 TCP的一些特性
面向字节流:即TCP将应用程序看成是一连串的无结构的字节流,并且可以拆分发送。
滑动窗口机制:窗口大小决定了在收到确认前可以发送的字节数,进行流量控制。
可靠传输:包括同步报文、确认机制和重传机制等。
拥塞控制:防止过多的数据注入到网络中,使路由器或链路过载。
1.4 RST标志位
RST表示复位,用来异常的关闭连接,发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。RST置位的原因:服务器端口没有打开;服务器响应太慢,用户终止连接;遭受网络攻击。
2.UDP协议
UDP 是User Datagram Protocol用户数据报协议,提供面向事物的、简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。
2.1 UDP报文结构(头部8字节)
2.2UDP的一些特性
无连接:在传输数据之前,不需要进行复杂的三次握手来建立连接;传输结束后,也不用四次握手来结束连接。
不可靠:没有拥塞控制、重传机制。
面向报文:即应用层交给UDP多长的报文,UDP就照样发送,不进行拆分合并。
3. TCP和UDP的对比
TCP应用场景:效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。例如:文件传输(FTP、HTTP对数据准确性要求高,速度可以相对慢)、接受邮件(POP 、IMAP、 SMTP 对数据准确性要求高,非紧急应用)、远程登录(TELNET、 SSH 对数据准确性有一定要求,有连接的概念)等等。
UDP应用场景:效率要求相对高,对准确性要求相对低的场景。例如:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、广播通信(广播、多播)。
扫码关注我们
图文|郑泽辉
排版|陈海心