TCP与UDP
介绍
TCP是传输控制协议,UDP是用户数据报协议,均处在传输层。
TCP&UDP
TCP
TCP的目的是提供可靠的数据传输,并在相互进行通信的设备或服务之间保持一个虚拟连接。
TCP在数据包接收无序、丢失或在交付期间被破坏时,负责数据恢复。它通过为其发送的每个数据包提供一个序号来完成此恢复。
为确保正确地接收数据,TCP要求在目标计算机成功收到数据时发回一个确认(即 ACK)。如果在某个时限内未收到相应的 ACK,将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复。但是,接收计算机可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它。
UDP
UDP 与 TCP 的主要区别在于 UDP 不一定提供可靠的数据传输。
该协议不能保证数据准确无误地到达目的地。
许多程序将使用单独的TCP连接和单独的UDP连接。重要的状态信息随可靠的TCP连接发送,而主数据流通过UDP发送。
区别
TCP和UDP、流量控制和拥塞控制
TCP、UDP区别和联系
怎么用 UDP 实现 TCP?
- TCP面向连接,UDP无连接。建立TCP连接需要经过3次握手,释放TCP连接需要经过4次挥手。UDP是无连接的,即发送数据前不需要建立连接。
- TCP提供可靠的服务,UDP尽最大努力交付,不提供可靠的服务。TCP提供可靠的服务,通过TCP连接传输的数据,无差错,不重复,不丢失,且按顺序到达。UDP尽最大努力交付,不保证可靠交付。Tcp通过校验和重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
- UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
- 每一条TCP连接只能是点对点的,UDP可以是一对一,一对多,多对多的交互通信。
- TCP对系统资源要求比较多,UDP对系统资源要求比较少(这里主要是首部开销)。
- TCP面向字节流,UDP面向报文。
- TCP提供全双工通信。
- UDP没有拥塞机制,即网络拥塞不会使源主机的发送效率降低。
应用
对实时性要求比较高,网络质量要求不高,或者多点通信的时候就需要使用UDP。
当对网络通信质量要求比较高的时候就需要用TCP。
应用 | 应用层协议 | 传输层协议 |
---|---|---|
名字转换 | DNS域名系统 | UDP |
文件传送 | TFTP简单文件传送协议 | UDP |
路由选择协议 | RIP路由信息协议 | UDP |
IP地址管理 | DHCP动态主机配置协议 | UDP |
网络管理 | SNMP简单网络管理协议 | UDP |
远程文件服务器 | NFS网络文件系统 | UDP |
多播 | IGMP网际组管理协议 | UDP |
电子邮件 | SMTP简单邮件传送协议 | TCP |
远程终端接入 | TELNET远程终端协议 | TCP |
万维网 | HTTP超文本传送协议 | TCP |
文件传送 | FTP文件传送协议 | TCP |
问题
如何用UDP实现TCP?
根据TCP于UDP的区别进行补全即可。
采用三次或者四次UDP数据模拟三次握手和四次挥手,然后补全其他的确认机制等。
实现方式:
- 将实现放到应用层,然后类似TCP,实现确认机制,重传机制,和窗口确认机制,即在应用层实现确认重传这些。
- 给数据包进行编号,按顺序接收并存储,接收端收到数据包后发送确认信息给发送端,发送端接收到确认信息后继续发送,若接收端接收的数据不是期望的顺序编号,则要求重发;(主要解决丢包和包无序的问题)。
TCP如何保证可靠传输?
TCP通过序列号、检验和、确认应答信号、重发控制、连接管理、窗口控制、流量控制、拥塞控制实现可靠性。
- 应用数据被分割成TCP认为最适合发送的数据块。
- TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。用于进行顺序控制。
- 检验和:TCP包首部和数据计算得到的检验和,接收方会对这个检验和进行验证,如果有差错,TCP将丢弃这个报文段,并且不对这个报文段进行确认。
- TCP的接收端会丢弃重复接收的数据。但是会发送确认,属于停止等待协议。
- 流量控制:针对高效传输,TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。(TCP利用滑动窗口实现流量控制)
- 拥塞控制:当网络拥塞时,减少数据的发送。开始启动时,有慢启动算法,防止启动时发送大量数据造成网络拥塞。
- 停止等待协议:它的基本原理就是每发完一个分组就- 停止发送,等待对方确认。在收到确认后再发下一个分组。
- 超时重传:针对数据包丢失或者定时器超时。当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
URL访问网站时全过程?
这个过程基本分为:
- 输入URL域名[www.baidu.com]
- 域名解析成IP地址
- 查找浏览器缓存,返回IP地址
- 查找系统缓存,返回IP地址(hosts文件)
- 路由器查找路由器缓存,返回IP地址
- 递归查询,本地域名服务器查询缓存,返回IP
- 迭代查询,本地域名服务器向跟域名查询
- 根域名服务器不返回直接的IP地址,根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址。
- 本地域名服务器向顶级域名服务器dns.com进行查询。
- 顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.baidu.com的IP地址。
- 本地域名服务器向权限域名服务器dns.baidu.com进行查询。
- 权限域名服务器dns.baidu.com告诉本地域名服务器,所查询的主机www.baidu.com的IP地址。
- 本地域名服务器将查询结果返回客户主机,并加入自己的缓存。
- 与目的主机进行TCP连接(三次握手建立连接)
- 客户主机发出建立连接的请求
- 目的主机发出确认及建立连接的信息
- 客户主机发出确认信息
- 发送与收取数据
- 发送Http Request请求
- 应用服务器响应处理请求返回页面数据
- 断开TCP连接(四次挥手释放连接)
- 客户主机发送释放连接的请求
- 目的主机发出确认信息
- 目的主机发出释放连接的请求
- 客户主机发出确认信息,等待一段时间后释放链家
- 客户端显示解析渲染
相关文章