udp和tcp区别?为什么快,分清楚目的和手段
- tcp是传输控制协议,是面向连接的协议,发送数据前需要先在发送方和接收方之间建立连接,tcp提供可靠的服务,传输的数据无差错、不重复、不丢失、且按序到达。
- udp是用户数据报文协议,是面向无连接的协议,发送数据前不需要建立连接,是不可靠的协议。不能保证传输数据是否到达目的地,到达时间以及数据正确性。
- tcp面向字节流,udp面向数据报文。面向字节流指的是发送数据以字节为单位,一个数据包可以拆分成若干分组进行发送,而udp一个报文只能一次发完。
- tcp支持点对点通信,udp支持一对一,一对多,多对多
- tcp报文首部20个字节,udp报文首部8个字节
- tcp有拥塞控制机制,udp没有
- 对于实时性要求高的情况使用udp,如游戏、直播、媒体通信;其他大部分情况使用的都是tcp,如http,要求传输的内容可靠,不出现丢包。
tcp与udp优点缺点分析
Tcp的优点: 可靠,稳定
TCP的可靠性体现在传输数据之前,三次握手建立连接(四次挥手释放连接),并且在数据传递时,有确认、窗口、重传、拥塞控制机制,数据传完之后,断开连接用来节省系统资源。
TCP的缺点:慢,效率低,占用系统资源高,易被攻击
传数据之前建立连接,这样会消耗时间,而且在消息传递时,确认机制、重传机制和拥塞控制机制都会消耗大量的时间,而且要在每台设备上维护所有的传输连接。而每个连接都会占用系统的CPU、内存等硬件软件资源。并且TCP的取而机制、三次握手,这些也导致TCP容易被人利用,实现DOS,DDOS攻击。
UDP的优点 :快,比TCP稍安全
UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,udp是一个无状态的传输协议,所以他在传输数据时非常快。M没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。UDP也是无法避免攻击的,比如:UDP flood攻击。
UDP的缺点:不可靠,不稳定
因为UDP没有TCP的那些可靠机制,在网络质量不好时很容易丢包。
基于以上优点,那么:
UDP 是一种面向无连接,且不可靠的协议,在通信过程中,它并不像 TCP 那样需要先建立一个连接,只要(目的地址,端口号,源地址,端口号)确定了,就可以直接发送信息报文,并且不需要确保服务端一定能收到或收到完整的数据。它仅仅提供了校验和机制来保障一个报文是否完整,若校验失败,则直接丢弃报文,不做任何处理。
包头区别:
TCP包头结构 源端口16位 目标端口 16位 序列号 32位 回应序号 32位 TCP头长度 4位 reserved 6位 控制代码6位 窗口大小16位 偏移量16位 校验和16位 选项 32位(可选) 这样我们得出了TCP包头的最小大小.就是20字节.
UDP包头结构 源端口16位 目的端口16位 长度 16位 校验和 16位 UDP的包小很多.确实如此.因为UDP是非可靠连接.设计初衷就是尽可能快的将数据包发送出去.所以UDP协议显得非常精简.
tcp与udp应用场景?
什么时候应该使用TCP:
当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于—些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。
在日常生活中,常见使用TCP协议的应用如下:浏览器,用的HTTP,FlashFXP,用的FTP
Outlook,用的POP、SMTPPutty,用的TeInet、SSHQQ文件传输
什么时候应该使用UDP:
当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。
比如,日常生活中,常见使用UDP协议的应用如下:
QQ语音,QQ视频,TFTP
怎么把udp变为可靠传输,超时重传(定时器)和丢包重传(连续三个)分别应该怎么实现
把udp和tcp差异说出来
TCP如何实现可靠性传输?(先分析为什么tcp可靠)
确认机制、重传机制、滑动窗口。
udp如何实现可靠性传输?
传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。
实现确认机制、重传机制、窗口确认机制。
如果你不利用linux协议栈以及上层socket机制,自己通过抓包和发包的方式去实现可靠性传输,那么必须实现如下功能:
发送:包的分片、包确认、包的重发
接收:包的调序、包的序号确认
目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。
tcp和ip层关系
ip层只负责主机与主机之间的通信,tcp需要绑定端口实现进程间的通信。tcp是可靠传输的,ip只能尽力交付
仅考虑主机与主机之间的通信?没有可靠保证,是不是就会有大量丢包呢?整个网络的可靠性全部由传输层来保证吗?
可靠这个概念不仅仅是包是都按序全部到达,每一层都有自己的差错控制机制
差错控制这个概念呢?
主要是校验,保证接受到的包和发送的包的数据是一致的
常用头部字段
SYN表示建立连接,
FIN表示关闭连接,
ACK表示响应,
PSH表示有 DATA数据传输,
RST表示连接重置。
11个状态
LISTEN:侦听来自远方TCP端口的连接请求
SYN-SENT:发送连接请求后等待匹配的连接请求
SYN-RECEIVED(syn已经收到的):收到和发送给一个连接请求后等待对连接请求的确认
ESTABLISHED(已建立的):代表一个打开的连接,数据可以传送给客户
FIN-WAIT-1:等待远程TCP的连接中断请求,或者先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSEING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来发向远程TCP的连接中断请求的确认
TIME-WAIT:等待足够的时间一确保远程TCP接受到连接中断请求的确认
CLOSED:没有任何连接状态