TCP和UDP

来源:互联网 发布:vga矩阵切换器 编辑:程序博客网 时间:2024/06/15 00:34


1、定义       

 TCP  (TransmissonControl Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IEFCRFC 793定义。

 UDP (User DatagramProtocol 用户数据报协议OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

 

2、区别

(1)TCP 面向连接(三次握手机制)、通信前需建立连接;UDP面向无连接,通信前不需要建立连接

(2)TCP 保障可靠传输(按序、无差错、不丢失、不重复)UDP不保障可靠传输,使用最大努力交付

(3)TCP面向字节流的传输,UDP面向数据报的传输

(4)每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信

(5)TCP的逻辑通信信道是全双工的可靠信道;UDP则是不可靠信道

 

3、用途

TCP一般用于文件传输,发送或者接收邮件,远程登录等等

UDP一般用于即时通信,在线视频,网络语音通话等等

4TCP建立连接时,三次握手的具体过程

 

         第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;

                             注释  SYN:同步序列编号

         第二次握手:服务器收到syn包,必须确认客户的SYNack=j+1,同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

  

          第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACKack=k+1),此包发送完毕,客户端和服务器进入连接成功状态,完成三次握手。

5、TCP断开连接时,四次挥手的具体过程

           TCP四次挥手,由于TCP连接时全双工的,因此每个方向都必须单独进行关闭,这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

        (1)客户端A发送一个FIN,用来关闭客户A到服务器B的(报文段4)。

         (2)服务器B收到这个FIN,它发回一个ACK,确认序列号收到的序列加1(报文段5)。和SYN一样,一个FIN将占用一个序号。

           (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

           (4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)


  注释:为什么建立连接协议是三次握手,而关闭连接却是四次握手?

             这是因为服务端的LISTEN的状态下的SOCKET当收到SYN报文的建立连接请求后,它可以把ACK和SYN(ACK起应答作用,SYN起同步作用)放在一个报文里发送。但是关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。