tcp是一种面向链接的、可靠的、基于字节流的传输层通讯协议。是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的,面向字节流。安全
udp(用户数据报协议)是iso参考模型中一种无链接的传输层协议,提供面向操做的简单不可靠的非链接传输层服务,面向报文。服务器
它们之间的区别:网络
一、tcp是基于链接的,可靠性高;udp是基于无链接的,可靠性较低;socket
二、因为tcp是链接的通讯,须要有三次握手、从新确认等链接过程,会有延时,实时性差;同时过程复杂,也使其易于被攻击;而udp无链接,无创建链接的过程,于是实时性较强,也稍安全;tcp
三、在传输相同大小的数据时,tcp首部开销20字节;udp首部开销只有8个字节,tcp报头比udp复杂,故实际包含的用户数据较少。tcp无丢包,而udp有丢包,故tcp开销大,udp开销较小;设计
四、每条tcp链接只能是点到点的;udp支持一对1、一对多、多对1、多对多的交互通讯。资源
因此对于应用这方面:it
若是对实时性要求高和高速传输的场合下须要使用udp;若是须要传输大量数据且对可靠性要求高的状况下应该使用tcp;在可靠性要求较低,追求效率的状况下应该使用udp。效率
对于tcp来讲,既然须要面向链接,就会涉及到三个阶段:链接创建、数据传送、链接释放三个过程;而“三次握手”就发生在链接创建这个阶段,下面对三次握手和四次挥手解释一下:互联网
三次握手:
第一次握手:客户端发送一个tcp的syn标志位置为1的包(链接请求),指明客户打算链接服务器的端口;
第二次握手:当服务器收到链接请求以后,返回确认包(ack)应答,即将syn和ack标志位同时致为1(授予链接),并为此次链接分配资源;
第三次握手:客户端收到服务器的授予链接请求以后,再次发送确认包(ack)(syn标志位为0,ack标志位为1),并分配资源,这样tcp就创建链接了。
四次挥手:
中断链接端能够是客户端也能够是服务端
假设是客户端发起的中断链接请求,则客户端发送fin报文,服务端接收到客户端发送的fin报文后,意思是说:“客户端已经没有数据要发送给你了”,可是这时候若是服务端有数据没有发送完成,则没必要着急关闭socket,能够继续发送数据,因此服务端先发送ack,告诉客户端,收到了客户端刚才的关闭链接请求,可是服务端尚未准备好,还有数据没有发送完,因此请客户端继续等个人消息,这个时候客户端就进入了fin_wait状态,继续等待服务端的fin报文;当服务端肯定已经发送完数据后,则想客户端发送fin报文,告诉客户端已经发送完数据,能够关闭链接了;当客户端接收到服务端的fin报文后,就知道能够关闭链接了,可是仍是不相信网络,怕服务端不知道要关闭,因此客户端发送ack给服务端后进入了time_wait状态,若是服务端没有收到ack则能够重传;服务端收到ack后,就知道能够关闭链接了;当服务端等待了2msl后依然没有收到回复,则证实服务端已经正常关闭了,那客户端也会关闭链接了,就这样,tcp链接就完成了关闭。