关于UDP与TCP的几点心得
被大家都知道UDP是Connectionless oriented. TCP是Conenction Oriented
UDP的包头只有源端口,目标端口,包长度,校验位。也就是说,UDP只需要把包发出去即可,不需要建立连接,关闭连接。不关心对方是否收到。
而TCP的包头则比较复杂,有许多控制位,TCP需要建立连接,按顺序发送数据包,接收方需要向发送方确认数据包收到,当然确认消息可以跟数据发送合并(打开SYN,ACK控制位即可)。TCP具有超时重传等机制。
另外TCP的包头没有长度字段,TCP封装在IP包里,应该就是IP包的数据部分的长度-TCP包头的长度=TCP数据长度
UDP的数据长度用16bit表示,那么最大就是64K。IP包的长度用32bit表示,TCP的包头最多几十个字节。因此TCP包的最大长度基本为UDP包的2倍了。
UDP的优点:速度快 缺点:网络较差的时候容易丢消息。
TCP的优点:数据传输可靠 缺点:建立连接,确认包,速度比较慢。
适合应用UDP的场合:比如局域网内的消息传送,DNS协议,RTP类协议(用于实时传送的,比如看网络电视,如果网络较差的话,总不能因为一个包丢失了一直在那儿等,得继续往下收发,中间缺少的包可以通过插值的方式近似计算出来)等
适合TCP的场合:UDP不适合的场合应该都是TCP的天下啦。比如HTTP,FTP等,你总不能看个网页中间缺了内容,FTP下载的数据不完整,对吧。
当然UDP也可以自己来保证一下可靠性,这需要上层应用自己来做了,与对方约定有回包,若没有收到对方的回包,再重发。而TCP协议是协议本省实现了。UDP如果这样实现的话,那性能就下降了,哈哈。