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?

  1. TCP面向连接,UDP无连接。建立TCP连接需要经过3次握手,释放TCP连接需要经过4次挥手。UDP是无连接的,即发送数据前不需要建立连接。
  2. TCP提供可靠的服务,UDP尽最大努力交付,不提供可靠的服务。TCP提供可靠的服务,通过TCP连接传输的数据,无差错,不重复,不丢失,且按顺序到达。UDP尽最大努力交付,不保证可靠交付。Tcp通过校验和重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
  3. UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
  4. 每一条TCP连接只能是点对点的,UDP可以是一对一,一对多,多对多的交互通信
  5. TCP对系统资源要求比较多,UDP对系统资源要求比较少(这里主要是首部开销)。
  6. TCP面向字节流,UDP面向报文
  7. TCP提供全双工通信。
  8. 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数据模拟三次握手和四次挥手,然后补全其他的确认机制等。
  实现方式:

  1. 将实现放到应用层,然后类似TCP,实现确认机制,重传机制,和窗口确认机制,即在应用层实现确认重传这些。
  2. 给数据包进行编号,按顺序接收并存储,接收端收到数据包后发送确认信息给发送端,发送端接收到确认信息后继续发送,若接收端接收的数据不是期望的顺序编号,则要求重发;(主要解决丢包和包无序的问题)。

TCP如何保证可靠传输?

  TCP通过序列号、检验和、确认应答信号、重发控制、连接管理、窗口控制、流量控制、拥塞控制实现可靠性。

  1. 应用数据被分割成TCP认为最适合发送的数据块。
  2. TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。用于进行顺序控制
  3. 检验和:TCP包首部和数据计算得到的检验和,接收方会对这个检验和进行验证,如果有差错,TCP将丢弃这个报文段,并且不对这个报文段进行确认。
  4. TCP的接收端会丢弃重复接收的数据。但是会发送确认,属于停止等待协议。
  5. 流量控制:针对高效传输,TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。(TCP利用滑动窗口实现流量控制)
  6. 拥塞控制:当网络拥塞时,减少数据的发送。开始启动时,有慢启动算法,防止启动时发送大量数据造成网络拥塞。
  7. 停止等待协议:它的基本原理就是每发完一个分组就- 停止发送,等待对方确认。在收到确认后再发下一个分组。
  8. 超时重传:针对数据包丢失或者定时器超时。当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

URL访问网站时全过程?

浏览器输入URL到响应页面的全过程

  这个过程基本分为:

  1. 输入URL域名[www.baidu.com]
  2. 域名解析成IP地址
    1. 查找浏览器缓存,返回IP地址
    2. 查找系统缓存,返回IP地址(hosts文件)
    3. 路由器查找路由器缓存,返回IP地址
    4. 递归查询,本地域名服务器查询缓存,返回IP
    5. 迭代查询,本地域名服务器向跟域名查询
    6. 根域名服务器不返回直接的IP地址,根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址。
    7. 本地域名服务器向顶级域名服务器dns.com进行查询。
    8. 顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.baidu.com的IP地址。
    9. 本地域名服务器向权限域名服务器dns.baidu.com进行查询。
    10. 权限域名服务器dns.baidu.com告诉本地域名服务器,所查询的主机www.baidu.com的IP地址。
    11. 本地域名服务器将查询结果返回客户主机,并加入自己的缓存。
  3. 与目的主机进行TCP连接(三次握手建立连接)
    1. 客户主机发出建立连接的请求
    2. 目的主机发出确认及建立连接的信息
    3. 客户主机发出确认信息
  4. 发送与收取数据
    1. 发送Http Request请求
    2. 应用服务器响应处理请求返回页面数据
  5. 断开TCP连接(四次挥手释放连接)
    1. 客户主机发送释放连接的请求
    2. 目的主机发出确认信息
    3. 目的主机发出释放连接的请求
    4. 客户主机发出确认信息,等待一段时间后释放链家
  6. 客户端显示解析渲染