TCP/IP之传输层

作者: 我系哆啦 | 来源:发表于2016-11-08 22:59 被阅读595次

    传输层的作用

    按照OSI参考模型的划分,传输层负责管理两个节点之间的数据传输。更具体的,网络层能够根据IP地址,将数据发送到指定的目标主机,而传输层则需要将数据发送到更为具体的某一个具体的应用程序。
    传输层中有两个非常具有代表性的传输层协议,他们分别是TCP和UDP。TCP是面向连接的,负责可靠的通信传输,而UDP则是不具有可靠性的,常被用于广播和细节控制交给应用的通信传输。

    端口号

    数据链路和IP中的地址,分别指的是MAC地址和IP地址,前者用来识别同一链路中不同的计算机,后者用来识别TCP/IP网络中互连的主机和路由器。在传输层中,也有类似于地址的概念,那就是端口号。端口号用来识别同一台计算机中进行通信的不同应用程序,因此,它也被称为程序地址。

    • 端口号的作用
      一台计算机上同时运行多个程序,例如浏览器,email客户端,ssh客户端等程序都可以同时运行,传输层正是利用这些端口号识别本机中正在进行通信的应用程序,并准确的将数据传输。
    根据端口号识别应用
    • 如何进行通信识别
      TCP/IP中,要识别一个通信,通常要5个要素:源地址IP,目标地址IP,协议号,源端口号,目标端口号,只有这5个信息完全一致,才能识别他们是否为同一个通信。
    识别通信
    • 端口号如何确定
      在实际进行通信时,要事先确定端口号。确定端口号的方法主要有两种:
    • 标准既定的端口号:一般0-1023的为知名端口号。
    • 时序分配法:服务端有必要监听端口号,接受服务的客户端没有必要确定端口号,这种方法下,客户端应用程序可以完全不用自己设置端口号,而全权交给操作系统进行分配。操作系统可以为每个应用程序分配互不冲突的端口号。
    • 端口号与协议
      端口号由其使用的传输层协议决定。因此,不同的传输协议可以使用相同的端口号。

    UDP

    UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。因此,UDP不提供拥塞控制,丢包重发,顺序控制等功能,但能够简单高效的发送数据,通常用于以下几方面:

    • 包总量较少的通信(DNS、SNMP等)
    • 视频、音频等多媒体通信(即时通信)
    • 限定于LAN等特定网络中的应用通信
    • 广播通信(广播、多播)

    TCP

    相对于UDP的面向无连接快速简单高效,TCP则是一种面向连接的,具备顺序控制、重发控制、拥塞管理等机制的可靠的通信传输协议。
    TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

    • 通过序列号与确认应答提高可靠性
      在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知。这个消息叫做确认应答(ACK)。另外,为了避免接收重复的数据,TCP中会给每个数据添加序列号,接收端查询接收数据TCP首部中的序列号和数据的长度,将自己下一步应该接收的序列号作为确认应答返送出去。通过序列号和确认应答,TCP可以实现可靠传输。
    序列号与确认应答
    • 重发超时确定
      重发超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔。如果超过这个时间仍未收到确认应答,发送端将进行数据重发。那么,这个重发超时的具体时间长度是如何确定的呢?
      TCP中,在每次发包时都会计算往返时间及其偏差。将这个往返时间(报文段的往返时间)和偏差时间相加,重发超时的时间就是比这个总和稍大一点的值。
    重发超时的确认
    • 连接管理(三次握手和四次握手)
      TCP提供面向连接的通信传输,连接是指各种设备、线路,或网络中进行通信的两个应用程序为了相互传递信息而专有的、虚拟的通信线路,也叫虚拟电路。一旦建立了连接,进行通信的应用程序只使用这个虚拟的通信线路发送和接收数据,就可以保障信息的传输。建立一个TCP连接需要发送三个包,也称为三次握手,断开一个了解需要发送四个包,也称为四次握手。
    TCP的连接与断开
    • TCP以段为单位发送数据
      在建立TCP连接的同时,也可以确定发送数据包的单位,我们称之为“最大消息长度(MSS)”。TCP在传送大量数据时,是以MSS的大小将数据进行分割传送。进行重发也是以MSS为单位。
      MSS是在三次握手的时候,在两端主机之间被计算得出的。两端主机在发出建立连接的请求时,会在TCP首部中写入MSS选项。告诉对方自己的接口能够适应的MSS的大小,然后会在两者之间选择一个较小的值投入使用。
    TCP以段为单位发送数据
    • 利用窗口控制提高速度
      TCP以段为单位,每发一个段,进行一次确认应答的处理,不过,这种方式下,包的往返时间越长通信性能越低。为了解决这个问题,TCP引入了窗口这个概念。即使在往返时间较长的情况下,它也能够控制网络性能的下降。如下图所示,确认应答不再是以每个分段,而是以更大的单位进行确认时,转发时间将会被大幅的缩短。也就是说,发送端主机,在发送了一个段以后,不必要一直等待确认应答,而是继续发送。
      窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。这个机制实现了使用大量的缓冲区,通过对多个段同时进行确认应答的功能。
    TCP窗口
    • 窗口控制与重发机制
      在使用窗口控制中,如果出线段丢失该怎么办?考虑两种情况:
    • 数据已经到达对端,但是,确认应答未能返回,这种情况下,是不需要进行重发的,在未使用窗口控制的情况下,没有收到确认应答的数据也是会被重发,而使用了窗口控制以后,某些确认应答即便丢失也无需重发。
    IMG_5674.PNG
    • 某个报文段丢失了,如下图所示,当1001~2000的报文段丢失以后,发送端会一直收到序号为1001的确认应答,而发送端主机如果连续3次收到同一个确认应答,就会将其所对应的数据进行重发。这种机制比之前的超时管理更加高效,因此被称为高速重发机制。
    Paste_Image.png
    • 流控制
      TCP提供了一种机制,可以让发送端根据接收端的实际接收能力控制发送的数据量,这就是流控制。他的具体操作是,接收端主机向发送端主机通知自己可以接收数据的大小,发送端发送不超过这个限度的数据,该大小限度就是窗口大小。TCP首部中,专门有一个字段用来通知窗口大小。
    流控制
    • 拥塞控制
      有了TCP的窗口控制,收发主机之间能够连续的发送大量数据包,然而,如果在通信刚开始是就发送大量数据,也可能会引发其他问题。
      计算机网络处于一个共享环境,因此,可能会因为其他主机之间的通信使得网络拥堵。在网络拥堵时,如果突然发送大量的数据,极有可能会导致整个网络的瘫痪。TCP为了防止该问题的出现,在通信一开始就会通过一个叫做慢启动的算法得出的数值,对发送数据量进行控制。
      为了在发送端调节所要发送数据的量,定义了一个叫做“拥塞窗口”的概念。再慢启动的时候,将这个拥塞窗口的大小设置为1个数据段(1MSS)发送数据,之后每一次收到一次确认应答(ACK),拥塞窗口的值就加1.在发送数据包时,将拥塞窗口的大小和接收端主机通知的窗口大小做比较,然后按照他们当汇总较小的那个值,发送比其还要小的数据量。
    拥塞控制

    TCP和UDP首部的格式

    • UDP首部的格式
    UDP首部格式

    如图所示:UDP首部由源端口号,目标端口,包长和校验组成。

    • TCP首部的格式
    TCP首部格式

    TCP首部主要包括源端口号,目标端口号,序列号,确认应答号,数据偏移,控制位,窗口大小,校验和等字段组成,但没有表示包长度和数据长度的字段。可由IP层获知TCP的包长,由TCP的包长可知数据的长度。

    相关文章

      网友评论

      本文标题:TCP/IP之传输层

      本文链接:https://www.haomeiwen.com/subject/dzlbuttx.html