其特点:
(1)UDP是无连接
(2)UDP使用尽最大努力交付,即不保证可靠性
(3)UDP是面向报文的
(4)UDP 没有拥塞控制,所以即使网络出现拥塞,也不会使源主机的发送速率降低。
(5)UDP 支持一对一、一对多、多对一、多对多的交互通信。
(6)UDP的首部开销小,只有8个字节,比TCP20个字节要短。
使用没有拥塞控制功能的UDP有可能会引起更严重的拥塞问题。
有时候需要保证UDP的可靠性,应用进程可以在不影响应用的前提下,增加一些可靠性措施,如采用前向纠错或重传已丢失的报文。可以在应用层实现
应用层协议使用UDP协议的有 DNS(域名系统)、TFTP(简单文件传送协议)、RIP(路由信息协议)、DHCP(动态主机配置协议)、SNMP(简单网络管理协议)、NFS(网络文件系统)
二、TCP(传输控制协议)
1、其特点:
(1)TCP是面向连接的传输层协议
(2)TCP提供可靠的服务
(3)TCP是面向字节流的
(4)TCP 提供双全工通信
(5)TCP 连接智能有两个端点,即使点对点(一对一)
(6)TCP的首部开销小,只有8个字节,比TCP20个字节要短。
应用层协议使用TCP协议的有 SMTP(简单邮件传送协议)、TELENT(远程终端协议)、HTTP(超文本传送协议)、FTP(文件传送协议)
2、TCP运输连接管理
TCP的运输连接包括三部分:连接建立、数据传输、连接释放
TCP在连接时需要解决一下是哪个问题
(1)要使每一方能够确知对方的存在
(2)要允许双方协商一些参数(如最大窗口值、是否私用窗口扩大选项和时间戳选项以及服务质量)
(3)要能够对运输实体资源进行分配(如缓存大小、连接表中的项目)
TCP的连接建立 三次握手
B的TCP服务进程先创建传输控制模块TCB,准备接受客户的连接请求。然后服务器进程就处于LISTEN状态,等待客户的连接请求。
第一次 A 的TCP客户进程也是首先创建传输模块TCB,然后向B发出连接请求报文段,这时候首部的同步位SYN=1,同时选择一个初始序号seq=x 。TCP 规定 SYN段报文不带数据,单要消耗一个序号,同时客户端进入SYN-SENT状态
第二次 B 收到连接请求报文后,如果同意连接则向A发送确认,在确认报文中把SYN ACK都置1 ,确认号是ack=x+1 ,同时也为自己选择一个初始序号seq=y , 同样这个报文段不能携带数据,但是要消耗一个序号,这时候服务器进入SYN-RECD 状态。
第三次 客户端接受到服务器的确认后,还要向服务器再确认一次,确认报文段的ACK=1 确认号为ack=y+1 ,序号为seq=x+1 ,这时候已经建立连接,客户端进入ESTABLISHED状态,当服务器接受到客户端的确认后也进入ESTABLISHED状态
三次握手 最后客户端在向服务器确认的原因:为了防止已经失效的连接请求报文突然传送到服务器,因而产生错误。
失效的连接请求报文 是这样产生的,考虑一种正常情况。A客户端发送的连接请求,单因连接请求报文丢失而未得到确认。于是A客户端再次发送连接请求,后来得到了确认,建立连接。数据传输完毕后就释放连接。A客户端工发送了两个连接请求的报文段,其中第一个丢失,第二个到达服务器, 没有“已失效的连接请求报文段”
另外一种异常情况,即A客户端发送的第一个连接请求报文段并没有丢失,而是因为在网络某一个节点长时间滞留了,以至于延误到连接释放以后的某个时间才到达服务器,这本是一个早已经失效的链接请求,但是服务器接受到以后以为是A客户端再次发送的连接请求。于是想A发送确认报文,同意建立连接,加入不采用三次握手的话,那么只要B服务器发出确认报文,新的连接就建立了。
由于A客户端并没有发送连接请求,因此不会理睬服务器的确认,也不会像服务器发送数据,但是服务器却以为新的连接已经建立,并一直等待A客户端发来数据,B服务器的许多资源就这样浪费了。
采用三次握手就可以避免上述情况发生。列如刚才的情况,A客户端不会发送确认,服务器就知道A并没有要求建立连接。
3、TCP的连接释放
TCP的了连接释放采用四次握手,数据传输结束后双方都处于ESTABLISHED状态
第一次 A客户端向服务器发送释放连接请求,并停止发送数据,主动关闭TCP连接,A把连接释放报文段首部的中止控制位置FIN值1 ,其许好为seq=u 等于前面已经传送过来的数据的最后一个字节的序号加1,这时候A进入FIN-WAIT-1状态,等待B的确认。
第二次 B服务器收到连接释放报文后即发出确认,确认号是ack=u+1 ,自己的序号为seq=v 等于B前面已经传送过来的数据的最后一个字节的序号加1 ,这时候B服务器进入CLOSED-WAIT状态(等待关闭状态),这时候TCP处于半关闭状态,即A没有数据可发送了,
单B要发送数据A仍要接受,也就是说A到B的连接断了,B到A的没有,这个状态可能会持续一段时间。
第三次 A收到B的确认后,就进入FIN-WAIT-2状态(终止等待2状态)等待B发送连接释放报文段。若B没有数据向A发送了,则通知TCP释放,发出的连接释放报文段使FIN=1 ,现在假定B的序号为w(在半关闭状态B可能又发送了一些数据)。B还必须发送上次的确认号ack=u+1
这时候B就进入LAST-ACK (最后确认)状态,等待A的确认。
第四次 A 收到B的连接释放报文后必须对此进行确认,在确认报文中把ACK置1,确认号ack=w+1 ,而自己的序号为seq=w+1 ,然后A进入TIME-WAIT(时间等待)状态。主意 此时TCP的连接没有断掉,必须经过时间等待器设置的时间2MSL后,A才进入CLOSED状态
为什么在TIME-WAIT 状态必须等待2MSL的时间?
第一 保证A发送的最后一个ACK报文段能够到达B服务器。这个报文段有可能会丢失,处在LAST-ACK状态的B收不到A发送的确认报文,B超时后会重传这个FIN+ACK报文段,A就会在2MSL时间内接受报文,重新发送确认报文,重启2MSL计时器,最后A和B都进入CLOSED状态。
如果A 发送确认后不等待一段时间就释放连接的话,则确认报文丢失后,A就接受不到B重传的FIN+ACK报文,因而也不会在发送一次确认报文,这样B就无法进入CLOSED状态
第二 防止已失效的连接请求报文段出现在本连接中,A在发送完最后一个ACK报文后,再经过2MSL后,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。