传输层 传输层作用是什么?第二章学习过,传输层是实现端到端的连接,端到端是什么概念呢?比如:一个人用QQ聊天,网络层识别IP地址,能够将信息发送到正确的主机,而主机应该使用什么应用协议接收这个信息呢?这个功能就需要传输层完成。 传输层主要有TCP和UDP协议。
传输层概述 传输层的功能 1:网络层协议只提供了点到点的连接,而传输层协议提供一种端到端的服务,即应用进程之间通信。 2:网络层协议提供不可靠,无连接和尽力投递的服务,因此,如果对于可靠性要求很高的上层协议,就需要在传输层实现可靠性保障。 传输层协议主要有 TCP (Transmission Control Protocol) UDP (User Datagram protocol ) TCP即传输控制协议,是一个可靠的、面向连接的协议。它允许网络间两台主机之间无差错的信息传递,TCP协议还进行流量控制,以避免发送过快而发生拥塞。不过这一切对用户都是透明的。 UDP即用户数据报协议,它采用无连接的方式传送数据,也就是说发送端不关心发送数据是否到达目标主机,数据是否出错等,收到数据主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保障。 这两个协议针对不同网络环境实现数据传输。各有优缺点,面向连接的TCP协议效率较低,但可靠性高,适用于网络链路好或可靠性要求高的环境,UDP面向非连接,不可靠,所以效率极高,常用语一些实时业务,也用于一些对于差错不敏感的应用。
TCP协议 它支持多种网络应用程序,TCP对下层服务没有多少要求,它假定下层只能传送不可靠的数据包服务,它可以在多种硬件构成的网络上运行。
TCP工作原理 TCP的封装格式 连接与断开 流量控制 拥塞控制 差错控制 计时器
TCP封装格式 TCP是面向连接的可靠协议,TCP协议为实现可靠传输而提供了一系列方法和手段。 TCP的数据段采取编号的方式保证数据正确顺序。 TCP数据段被封装在IP数据包中来完成传输,而IP数据包经过的路径有可能不同,那么IP数据包到达时可能会失去原有顺序,因而到达的TCP数据段也可能会失序,为了解决,TCP对数据段进行编号,对接收到的数据进行重新排序,然后正确的顺便交给应用程序。其次,由于到达的IP数据包可能发生重复,TCP接收端必须有丢弃重复数据的功能。 TCP连接的每一方都有固定大小的缓冲空间,这就要求TCP发送端只能发送接收端缓冲区能接收下的数据,这防止较快的主机导致较慢的主机缓冲区溢出。
TCP首部数据结构 0 15 16 31位
源端口号 目标端口号
32位序列号 32位确定号
4位首部长度 保留(6位) URG ACK PSH RST SYN FIN 16位窗口大小
16位校验和 16位紧急指针 可选项 数据 0-15 这16位成为源端口号;它是TCP数据段发送方进程对应的端口号,这个端口号是由发送方进程产生的随机数,它唯一地标识了发送端的一个进程。 16-31 这16位目标端口号,它对应的是接收端的进程,接收端收到数据段后,根据这个端口号来确定把数据送给那个应用程序的进程。这样才能保证数据到达正确的地方。 第2行是32位的序列号,提供0-2的32次方-1范围内的一个数字,TCP从应用程序取得数据后,会根据实际传输能力把数据划分成不同的数据段。TCP用这个数字来给数据段打上标记,当数据到达目的后,接收端会按照这个序列号把数据重新排列,保证数据正确性 3行是32位确认序列号,它提供0-2的32次方-1范围内的一个数字。被分成许多数据段的数据虽然被做了标记,但不能保证这当中的所有段都会到达目的地,然后对接收端来讲,只要有一个段没接收到,就不能保证数据的正确性,使用确认号可以更好的解决这个问题。 4行分为4个部分 1:4位首部长度,可以确定首部数据结构字节长度 2:6个保留位,作为今后扩展功能用,现在还没有使用到。 3:6个控制位,这6位有很重要的作用,TCP连接、传输和断开都是受这6个控制位的指挥。 GUR:紧急指针有效位,它和第5行的16位紧急指针配合使用,当URG=1时,TCP根据16位紧急指针确定紧急数据的最后一个字节的位置。这样接收端就可以优先准确快速地获取紧急数据,确保数据的即使到达。 ACK:只有当ACK=1时确认序列号字段才有效。当ACK=0时,确认号无效。 PSH:标志位为1时要求接收方尽快将数据段送达应用层,这个标志位是为了加快特殊数据的处理速度。 PST:值为1时通知重新建立TCP连接。 SYN:同步序列号。TCP需要建立连接时将这个位置为1. FIN:发端完成发送任务位,当TCP完成数据传输需要断开连接时,提出断开连接的一方将这个位置为1。
第4部分是16位的窗口大小,说明本地可接收数据段的数目。 第5行中的16位校验和是用来做差错控制的。发送到接收校验数据的完整性。 第5行中的16位紧急指针和URG配合使用,当URG=1时有效。用来说明紧急数据的末尾字节的位置。 第6行是可选项。一般情况下没有可选项。 第7行是数据。
一个TCP连接不仅需要端口,还需要IP地址来确定通信的主机。IP首部中的发送端IP地址加上发送端端口号就形成了连接的发送端;目的端IP地址再加上接收端端口号就确定连接的接收端。这样就唯一的确定了一个TCP连接。 在TCP/IP协议中,TCP协议是基于IP协议的。IP协议是对应于网络层的协议,他是一个不可靠的协议。TCP协议的可靠性保证给IP协议提供了可靠的环境。从而使得IP协议可以不考虑传输的可靠性,专注于网络层的功能。这也是协议分层的初衷,TCP被认为是一种流式传输层服务,表示TCP发送端从应用程序接收到字符流,并从这个流中提取适当的长度创建数据段,然后将其发送到网络上,TCP接收端则接收数据段,从中提取数据,若没有按序号到达还要对其进行排序。并将作为字符流交付给接收端应用程序,这样就完成了数据的传输。 为了进行流式交付,发送TCP和接收TCP都要利用缓冲,发送TCP使用发送缓冲来存储从发送应用程序截取的数据。发送应用程序交付数据的速率是它产生数据的速率。例如:使用网络登录。远程控制主机,用户在键盘上输入的数据就是逐个字符地交付给TCP的发送端的。
TCP的连接与断开 TCP是一个面向连接的服务,也是说在数据通信之前,发送端与接收端要先建立连接,等数据发送结束后,双方再断开连接。 1:TCP建立连接 TCP在建立连接的时候使用端口号来完成与应用程序的对应。 在计算机使用命令 netstat –n来查看目前存在的连接进程。
TCP建立连接过程称为3次握手。建立连接过程如图:
第一次握手是主机A通过将含有“同步序列号”(SYN)标志位的数据段发送给主机B而开始请求连接。通过该数据段,主机A告知主机B两点:主机A希望建立连接请求,主机B应答;主机A告诉主机B使用那个序列号作为数据传输时数据段的起始号。 第二次握手是主机B用一个带有“确认应答”(ACK)和“同步序列号”(SYN)标志位的数据段响应主机A。它也有两个目的:发送ACK通知主机A收到了数据段,通知A从那个序列号开始给数据段做标记。 第三次握手是主机A再次发送一个数据段,确认收到了主机B的数据段,并可以开始传送实际数据。 这样三次握手就完成了,数据开始传输。 3个特点: 没有应用层数据 SYN这个标志位只有TCP建立连接才被置为1 握手完成后SYN标志位被位置0
2:TCP断开连接 TCP建立一个连接时进行了3次握手,而终止一个连接要经过4次,这是由TCP的半关闭(half-close)造成的。因为一个TCP连接是全双工的(即数据可以两个方向传输),所以进行关闭时每个方向必须单独的进行关闭,这个单方向的关闭都成为半关闭。关闭方法是一方完成它的数据发送任务后,就发送一个FIN来向另一方通告将要终止这个方向连接。当一端收到一个FIN,必须通知应用层TCP连接已经终止了那个方向的数据传送,发送FIN通常是应用层进行关闭的结果。 (1) TCP连接的一端A将控制位FIN置为1,提出停止TCP连接的请求。 (2) 对端B收到FIN后对其做出响应,确认这一方向上的TCP连接将关闭。 (3) 由B端再提出反方向的关闭要求,将FIN置为1. (4) 由A端对B提出的关闭做出应答,双方向的关闭结束。
单纯的数据传输的过程出现的问题 、比如传输速度不协调、数据丢失、数据确认丢失等。对于这些,TCP使用流控制、差错控制、拥塞控制。计时器等手段来保证数据的可靠性。下面将对TCP传输数据过程中可能出现的问题予以解决。
TCP的流控机制 在TCP建立连接时,主机A与B之间就进行了窗口大小的协商,主机A在发送连接建立的请求时,就向主机B通告了自己发送窗口的大小。 TCP的拥塞控制 前面说了TCP的窗口机制,接收方可根据其缓冲区的大小指定窗口大小,发送方遵守此窗口大小的限制,接收端不会发生缓冲区溢出的问题。但是有可能由于中间传输网络的带宽较小的原因,导致拥塞的发生。TCP引入了拥塞窗口的概念。实际发送数据的窗口采用发送方和接收方协商的窗口与拥塞窗口中的最小值。 TCP的差错控制 TCP是一个端到端的连接,数据在传输过程中经过了许多的网络路径,有可能出现各种错误。所以TCP提供了差错控制来保证可靠性,TCP的差错控制包括如下一些方面:检测受损数据段、丢失数据段、失序的数据段和重复的数据段。差错控制还包括检测差错后的纠错机制。 TCP中差错检验是通过:校验和、确认和超时 校验和:每一个数据段都包含校验和字段,用来检测受损数据段。如受到损伤,就丢弃。 确认:TCP使用确认的方式来证实收到了某些数据段,它们已经无损伤的到达了目的TCP。 超时:若一个报文在超时前未被确认,则被认为是受到损伤或丢失。
TCP的计时器 为了保证实现可靠传输,合理处理超时未到或未确认的数据,TCP协议设计了4中计时器 重传计时器 坚持计时器 保活计时器 时间等到计时器 重传计时器 为了防止数据报丢失,当TCP发送一个报文时,就启动重传计时器,有2种情况: 1.若在计时器超时之前收到了特定报文的确认,则撤消这个计时器;