计算机网络03-传输层、可靠数据传输、UDP与TCP

计算机网络03缓存

第三章 传输层服务器

1、传输层概述

1 · 传输层与应用层的关系

网络层提供主机之间的逻辑通讯机制,而传输层提供应用进程之间的逻辑通讯机制。它创建在网络层之上,依赖于网络层服务,同时运输协议可以提供的服务经常受制于网络层协议的服务模型。网络

2 · 进程到进程的数据交付

TCP与UDP做为两种运输层协议,其责任是将两个端系统间IP的交付服务扩展为运行在端系统两个进程之间的交互服务。tcp

  • TCP
    是可靠、按序的交付服务。它提供拥塞控制、流量控制、链接创建。
  • UDP
    不可靠的交付服务,基于“尽力而为(Best-effort)”的网络层,没有作可靠性方面的扩展。

3 · 复用和分用

将主机之间交付扩展到进程间交付被称为运输层的多路复用和多路分解。函数

  • 什么是套接字
    源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。用于表示客户端请求的服务器和服务。
    套接字是支持TCP/IP的网络通讯的基本操做单元,能够看作不一样主机本身建的进程进行双向通讯的断点,即通讯两房的一种约定,用套接字中的相关函数来完成通讯过程。
  • 接收端进行多路分解
    传输层检查报文段中的字段,标识出接收套接字后将报文段定向到套接字,最后交付数据。
  • 发送端进行多路复用
    在源主机从不一样套接字中收集数据块,并未每一个数据块封装上首部信息从而生成报文段,而后将报文段传递到网络层。

4 · UDP

UDP协议全称是用户数据报协议,在网络中它与TCP协议同样用于处理数据包,是一种无链接的、基于Internet IP协议的协议。计算机网络

  • 特色
    • 无链接:
      知道对端的IP和端口号就直接进行传输, 不须要创建链接。而TCP须要TCP在发送数据前进行三次握手创建链接。
      同时所以也不须要维护链接状态,包括收发状态等, 一台服务机可同时向多个客户机传输相同的消息。
    • 不可靠:
      没有确认机制, 没有重传机制,没有拥塞机制; 若是由于网络故障该段没法发到对方, UDP协议层不会给应用层返回任何错误信息而致使丢包。
      同时不关心发送端是否收到了数据,也对数据进行校验与备份,但应用可更好地控制发送时间和速率。
    • 面向报文:
      不可以灵活的控制读写数据的次数和数量,应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并,而是保留这些报文的边界。所以,应用程序须要选择合适的报文大小。
    • 有单播,多播,广播的功能:
      UDP 不止支持一对一的传输方式,一样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。
    • !头部开销:
      UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要少得多。
      UDP 头部包含了如下几个数据:
      1)两个十六位的端口号,分别为源端口(可选字段)和目标端口。
      2)整个数据报文的长度(十六位)。
      3)整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误(十六位)。
      所以 UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的。
  • 适用场景
    对当前网络通信质量要求不高的时候,实时性要求高的地方均可以看到 UDP 的身影,要求网络通信速度尽可能的快,这时就使用UDP。
  • 如何在UDP上实现可靠数据传输
    • 在应用层增长可靠性机制
    • 应用特定的错误恢复机制
  • UDP校验和
    提供了检测UDP段在传输中是否发生错误的功能。
    • 发送方将段的内容视为16-bit整数,计算全部整数的和进位加在和的后面,将获得的值按位求反,获得校验和。同时发送方将校验和放入校验和字段。
    • 接收方计算所收到段的校验和,将其与校验和字段进行对比。

2、可靠数据传输

1 · 流水线可靠数据传输原理

可靠数据传输协议的基本结构是接口,它依靠渐
进地设计可靠数据传输协议的发送方和接收方,并只考虑单向数据传输。
本次咱们并不详细展开rdt原理,可是须要明白什么是重传。设计

在自动重传请求协议中,使用接收方反馈协议(ARQ)使得发送方了解接收方状况。ACK表示“确定确认”,NCK表示“否认确认”,他们一般用一个分组决定,用0/1表明其值。视频

当发送方不知道是一个数据分组丢失仍是ack丢失或者该分组ack过分延时时便进行重传。

当因为ack丢失或者过分延时致使的重传中,第一次的数据报依旧会正确的传递到接收方,只是发送方因为接收不到ack而误觉得第一次的数据报未正确传递而进行重传。所以rdt2.0版本中为了防止接收方因重传致使的冗余数据,引入了冗余数据分组来处理冗余数据。
而在rdt3.0版本中,为了实现基于时间的重传机制,则规定了一个倒计数定时器对象

流水线可靠数据传输则是为了提升数据传输的资源利用率。它不要求每一个数据报正确传递后再传递下一个数据报,而容许发送方发送多个数据分组而无需其他分组的等待确认。于是它要求:blog

  • 对每一个分组增长惟一的序号(seq),此时ack的值一般为(seq+0/1)
  • 协议的发送方和接收方两端分别要缓存已经发送但未确认的分组与已经接受的分组。
  • 对丢失、损坏的分组进行回退N步选择重传

2 · 回退N步与选择重传

  • 回退N步协议(GRB协议)
    假设某个序号为n的分组因为传输中丢失致使接收失败的时候,那么当n以后的序列的分组抵达接收方的时候,接收方将因为未接收到n而丢弃掉全部n+1以后的数据包,并不断返回ack(n-1),让发送方在计时器超时后从新从n包发送数据。
  • 选择重传(SR协议)
    SR协议中为接收方设置了缓存机制,用于缓存乱序到达的分组。此协议中发送方与接收方都拥有窗口,即表明发送方已经发送但未确认的分组长度与接收方已经接收但乱序的分组长度
  • 各自的缺点
    grb丢弃已经接收的分组会显得有些浪费。而sr协议中若接收方返回的ack包在传输中丢失,发送方将没法对已经发送的包进行确认,致使没法进行下一个包的发送。

3、TCP协议和TCP的拥塞控制

TCP协议全称是传输控制协议是一种面向链接的、可靠的、基于字节流的传输层通讯协议,由 IETF 的RFC793定义。

1 · TCP报文段格式

  • 源端口 16位;目标端口 16位;序列号 32位;回应序号 32位;TCP头长度 4位;reserved 6位;控制代码 6位;窗口大小 16位;偏移量 16位;校验和 16位;选项 32位(可选);
  • 这样咱们得出了TCP报头的最小长度,为20字节。

2 · TCP可靠数据传输

因为应用层提供的数据服务是不可靠的,ip服务运输的数据报不保证其交付与按序交付,所以TCP在ip的不可靠尽力为之服务上建立了可靠数据传输服务。
上一节中咱们已经介绍了DBN协议与SR协议,而TCP的差错恢复机制为GBN协议和SR协议的混合体,它提出的一种修改意见是选择确认,容许TCP接收方有选择地确认失序报文段,而不是累积确认最后一个正确接收的有序报文段,并与选择重传进行结合使用。

3 · TCP创建链接过程

三次握手特色:

  • 没有应用层的数据 ,SYN这个标志位只有在TCP创建链接时才会被置1 ,握手完成后SYN标志位被置0。

第一次握手:

  • 客户端向服务端发送链接请求报文段(SYN J,seq = x)。该报文段中包含自身的数据通信初始序号。请求发送后,客户端便进入 SYN-SENT(请求链接)状态。

第二次握手:

  • 服务端收到链接请求报文段后,若是赞成链接,则会发送一个应答,该应答中也会包含自身的数据通信初始序号(SYN K,ACK = 1,seq = y,ack=x+1),发送完成后便进入 SYN-RECEIVED 状态。

第三次握手:

  • 当客户端收到链接赞成的应答后,还要向服务端发送一个确认报文(ACK = 1,seq = x+1,ack=y+1)。发送完毕,客户端和服务端都进入ESTABLISHED状态,此时链接创建成功。

Question:为何 TCP 创建链接须要三次握手,而不是两次:
1.防止出现失效的链接请求报文段被服务端接收的状况,从而产生错误
2.客户端连接超时,会从新发送一次链接请求。当两个SYN都抵达发送了ACK时,虽然第一个ACK会被放弃,可是服务器端会分配资源并一直维持这个资源,形成浪费。

4 · TCP断开链接过程

挥手特色:

  • TCP 是全双工的,在断开链接时两端都须要发送 FIN 和 ACK。

第一次挥手:

  • 当主机A(客户端) 完成数据传输后,将控制位FIN置1,提出中止TCP链接的请求

第二次挥手:

  • B(服务端) 收到链接释放请求后,会告诉应用层要释放 TCP 连接。而后会发送 ACK 包(ack M+1),并进入 CLOSE_WAIT 状态。
  • 此时代表 A 到 B 的链接已经释放,再也不接收 A 发的数据了。可是由于 TCP 链接是双向的,因此 B 仍旧能够发送数据给 A。

第三次挥手:

  • B果此时还有没发完的数据会继续发送,完毕后会向 A 发送链接释放请求(FIN N),而后 B 便进入 LAST-ACK 状态。

第四次挥手:

  • A 收到释放请求后,向 B 发送确认应答,此时 A 进入 TIME-WAIT 状态。
  • 该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有 B 的重发请求的话,就进入 CLOSED 状态。当 B 收到确认应答后,也便进入 CLOSED 状态。

5 · TCP拥塞控制

拥塞的表现状况是:太多发送主机发送了太多数据或者发送速度太快,以致于网络没法处理。而拥塞将致使分组丢失或者分组延迟过大。
在TCP中拥塞控制的方法是让每个发送方根据所感知到的网络拥塞程度来限制其链接发送流量的速率。而且经过以下三个方法来确认:

  • 一个丢失的报文段意味着拥塞
  • 当先前的报文段确认到达时,可以增长发送方的速率
  • 宽带探测

6 · TCP特色

  • 面向链接的运输层协议: 发送数据以前必须在两端创建链接,即进行三次握手。
  • 可靠传输:
    • 提供拥塞控制,当网络出现拥塞的时候,TCP可以减少向网络注入数据的速率和数量,缓解拥塞。
    • 误码靠的是TCP的段编号以及确认号判断丢包。TCP为了保证报文传输的可靠,就给每一个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。而后接收端实体对已成功收到的字节发回一个相应的确认(ACK);若是发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
  • 提供全双工通讯: TCP容许通讯双方的应用程序在任什么时候候都能发送数据,由于TCP链接的两端都设有缓存,用来临时存放双向通讯的数据。固然,TCP能够当即发送一个数据段,也能够缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)
  • 仅支持单播传输: 每条TCP传输链接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。
  • 面向字节流: TCP不像UDP同样那样一个个报文独立地传输,而是在不保留报文边界的状况下以字节流方式进行传输。

7 · TCP与UDP的区别

TCP UDP
是否链接 面向链接,创建链接3次握手,断开链接4次挥手 无链接
是否可靠 可靠传输,使用流量控制和拥塞控制 不可靠传输,不使用流量控制和拥塞控制
链接对象个数 只能是一对一通讯 支持一对一,一对多,多对一和多对多交互通讯
传输方式 面向字节流 面向报文
首部开销 首部最小20字节,最大60字节 首部开销小,仅8字节
适用场景 适用于要求可靠传输的应用,例如文件传输 适用于实时应用(IP电话、视频会议、直播等)
相关文章
相关标签/搜索