TCP与UDP详解

185 阅读6分钟

TCP(Transmission Control Protocol, 传输控制协议)

TCP是传输层面向连接的可靠传输协议。TCP被称为面向连接的意思是,在接受发送数据前,TCP必须通过握手的方式与对方建立可靠的连接。 一个TCP连接必须通过三次握手才能建立起来。

三次握手的简短描述是: client向server发起一个特殊的TCP报文段,随后server以另一个特殊的TCP报文段作为响应,然后client再发送第三个特殊的TCP报文段作为回复。其中前两个报文段不带有效载荷(即不包含应用层数据),最后一个报文段可以带有效载荷。

三次握手:

  • 第一次握手:A向B发送一个含有**同步序列号(SYN)**的标志位数据段,向主机B请求建立连接。通过这个数据段,A表达两件事:1. 我需要和你通信;2.你需要用这个序列号作为起始段来回应我。
  • 第二次握手:B接收到A的消息后,用一个带有**确认应答(ACK)同步序列号(SYN)**的标志位数据段响应A,同时告诉B:1. 我已经收到你的请求,可以开始传递数据了;2. 你需要用这个序列号作为起始段来回应我。
  • 第三次握手:A收到这个数据段后,再发送一个确认应答(ACK),确认已经收到B的数据段。这样三次握手就完成了,AB之间就可以开始传递数据了。

四次断开:

  • 第一次:A完成数据传输后,提出停止TCP连接的请求。
  • 第二次:B收到请求后对其作出响应,确认这一方向上的TCP连接将关闭。
  • 第三次:B端再提出反方向的关闭请求。
  • 第四次:A对B的请求确认,同时关闭这一方向上的TCP连接。此时,双方向的关闭结束。

可靠数据传输在TCP上的体现

  1. 超时重传机制 其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
  2. 超时间隔加倍 在以太网中,带宽资源是非常紧张的,如果很简单的按照一个固定的时间阈值去处理重传,那么必然会造成不必要的资源浪费。所以TCP在遇到超时后,会把下一次的超时时间间隔增加,即每个发送方的重传都是经过越来越长的时间后进行的,从而减缓网络压力,提高资源的有效利用率。
  3. 快速重传 快速重传的设计初衷是为了避免每次都要等待发送方的定时器超时后,再去执行重传,目的是为了提高网络的吞吐量。大概原理是,发送方如果持续接受到接收方返回的同一个ACK三次,就执行一次重传,通常这个时候定时器还没有超时。 至于为什么ACK必须得是三次,而不是两次、四次?这个问题,《计算机网络: 自顶向下方法》中作者讲到,这种数值其实是一种经验值,是一种权衡。因为如果是两次,很有可能不是因为网络丢包,而是因为报文段经过重排序(重排序的原因可能是1.负载均衡 2.路由器的流量控制),而四次的话,则更有可能是丢包造成的,所以在三次的时候就可以进行发送方的数据重传。

流量控制

如果发送方发送数据太快,导致接收方来不及处理缓冲区的数据,就会造成数据分组的丢失。通过控制发送方发送数据的速度,来避免数据分组丢失,这就是流量控制。这也是一种可靠性的体现。

  1. 滑动窗口协议 接收方返回的 ACK 中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。

拥塞控制

拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况 常用的方法是:

  1. 慢启动
  2. 拥塞避免
  3. 快速恢复
  1. 慢启动 只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。这里的拥塞窗口是成指数增加的。当拥塞窗口增长到一个门限值 (ssthresh) 时,就进入了下一个阶段。
  2. 拥塞避免 此阶段的拥塞窗口是缓慢增大的,每一次拥塞窗口cwnd加1,而不是慢启动时加倍。所以可以说此时拥塞窗口按线性规律增长。
  3. 快速恢复 一般快速恢复是与快速重传成对出现的。当发送方连续收到三个重复确认ACK,就执行**“乘法减小”算法**,把慢启动门限 (ssthresh) 减半。这是为了预防网络发生拥塞。**请注意:接下去不执行慢开始算法。**由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大

UDP(User Data Protocol, 用户数据报协议)

  • UDP是一个非连接协议,传输数据之间,源端与终端不建立连接。
  • 一台服务器可同时向多个客户端传输相同消息。
  • UDP的数据包也很小,相对于TCP而言开销更小。
  • UDP尽最大努力交付,但不保证可靠交付

上层的应用(应用层协议)

OSI七层模型

  • 物理层: 以二进制数据流的形式在物理介质上传输
  • 数据链路层: 物理寻址,错误地址检测,将原有比特流转变为逻辑传输线路
  • 网络层: 控制子网运行,如为数据包选择路由
  • 传输层: 接受上一层数据,必要时候会把数据分割,并将其交给网络层,保证这些数据有效到达对端
  • 会话层: 负责在数据传输中设置并维护两台计算机间的通信连接
  • 表示层: 把数据转换为能与接收者的系统格式兼容并适合传输的格式
  • 应用层: 提供为应用软件而设的接口,以设置与另一应用软件之间的通信

TCP/IP协议簇模型

  • 应用层: 参考OSI
  • 传输层: 参考OSI
  • 网络互联层(网际层IP): 因特网协议(IP),如ICMP (应用层的应用: ping命令)、IGMP
  • 网络访问层: 例如以太网,WiFi