计算机网络基础(五) 运输层

从通信和信息处理的角度看:运输层向它上面的应用层提供通信服务,是面向通信的最高层,也是用户功能的最底层。

运输层的重要性:从IP层来说,通信的两端是主机,IP数据报的首部明确标志了这两个主机的IP地址。但是真正通信的实体是主机中的进程,严格的讲,两个主机的通信是两个主机中的应用进程互相通信,IP协议虽然能将数据报送到目的主机,但是仍然停留在网络层,没有交付给进程。

从运输层角度看:通信的真正端点不是主机,而是主机中的进程。

运输层与网络层的区别:网络层为主机之间提供通信,运输层为主机中的进程间提供通信。

运输层的一个重要功能:

  1. 复用:发送方不同的应用进程都可以使用同一个运输层协议传送数据
  2. 分用:接收方的运输层剥去报文首部能够把这些数据正确交付目的应用进程

运输层还要对接收的报文进行差错检测。

两个主要协议:

  1. TCP:传输控制协议
  2. UDP:用户数据报协议

UDP传输数据报前不需要建立连接,远地主机收到UDP报之后,不需给出任何确认。(不可靠服务)

TCP:面向连接服务,传输前建立连接,传输后释放连接。不提供广播或多播服务。增加了很多开销,占用了处理机资源。

进程的创建和撤销是动态的。

运输层采用协议端口来解决进程标识问题。

注:协议栈层间的抽象的协议端口号是软件端口。与硬件端口是两个概念。软件端口是应用层的各种协议与运输实体进行层间交互的一种地址。

运输层用一个16位的端口号,但端口号只具有本地意义。它只是为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口。在不同计算机中,相同的端口号是没有关联的。

运输层的端口号共分为两大类:

  1. 服务器端使用的端口号:分为熟知端口号(0-1023),分给了TCP/IP的一些重要的应用进程和登记端口号
  2. 客户端使用的端口号(49152-65535),在客户进程运行时才动态选择,又叫短暂端口。

用户数据报协议UDP

特点:

  1. 无连接的:不需要建立连接,因此减少了开销和发送数据前的时延
  2. 不可靠的:因此不需要维持复杂的连接状态表
  3. 面向报文的:UDP对应用层交下来的报文不合并,不拆分。只添加首部后就向下交付给IP层。
  4. 没有拥塞控制:因此网络出现的拥塞不会使源机的发送速率降低。
  5. 支持一对一,一对多,多对一和多对多的交互通信
  6. UDP首部开销小:只有八个字节,TCP首部至少20个字节

UDP首部:

源端口 目的端口 长度 检验和

4个部分各2字节,共八字节

UDP检验和时,需要加一个12字节的首部

源IP地址(4) 目的IP地址(4) 0(1) 17(1) UDP长度(2)

传输控制协议TCP

特点:

  1. 面向连接的运输层协议:使用TCP协议之前,先建立TCP连接,传输数据完毕后,释放已建立的TCP连接
  2. 每一条TCP连接只能有两个端点:每一条TCP连接只能是点对点的。
  3. 提供可靠的交付服务:通过TCP连接传送的数据,无差错,不丢失,不重复并且按时到达
  4. 提供全双工通信
  5. 面向字节流:“流”是指流入到进程或从进程流出的字节序列

TCP不保证接收方应用进程所收到的数据块与发送方应用程序所发出的数据块具有大小对应关系。

TCP与UDP发送报文采用方式完全不同:TCP不关心应用进程一次把多长的报文发送到TCP缓存中,而是根据对方给出的窗口值和当前网络的拥塞程度来决定一个报文段应包含多少字节

TCP连接的端点叫套接字或插口。套接字socket=(IP地址:端口号)

每一条TCP连接 唯一地通信两端的两个端点(即两个套接字)确定。

注:同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中。

可靠传输的工作原理

因为IP层是不可靠的服务,因此TCP必须采用适当的措施才能使用两个运输层间的通信更可靠。

停止等待协议

设计:发送方(A)如果一段时间内没有收到接收方(B)的确认,则认为刚才发送的分组丢失了,重传前面发送的分组,称超时传送,要实现超时重传,则在发送完一个分组设置一个超时计时器。

注:1.A在发送完一个分组后,必须暂时保留已发送分组的副本。2.分组和确认分组都需要进行编号。3.超时计时器设置的时间应当比数据在分组传输的平均往返的时间更长一些。

确认丢失和确认迟到

若B收到A的数据,B向A发送的确认丢失了,因此A在超时后,重新发送数据,B收到了重传的分组,则:

  1. 丢失这个重复的分组,不向上层交付
  2. 向A发送确认。

若出现确认迟到:A会收到重复的确认,A的处理方法:收下后丢弃。B:会收到重复分组,丢弃分组,并重新发送确认分组。

通过确认和重传机制:可以在不可靠的传输网络上实现可靠的通信。

可靠传输协议常称为自动重传请求(ARQ)

停止等待协议优点:简单

缺点:信道利用率低  U=Td/(Td+RTT+Ta)

Td=分组长度/数据率   RTT:往返时间    Ta:B发送分组需要的时间

连续ARQ协议

维持一个发送窗口,意义:位于窗口内的分组都可以连续发送出去,不需要等待对方的确认。

协议规定:发送方每收到一个确认,滑窗向前滑动一个分组的位置,并发送新的分组。接收方一般采用累计确认的方式。接收方不必对收到的分组逐个发送确认,而是对按序列到达的最后一个分组发送确认,

累积确认的优点:容易实现,即使确认丢失也不重传。

缺点:不能向发送方反映接收方已经正确收到的所有分组的信息。

TCP报文段首部格式(20字节)

  1. 源端口和目的端口:各占两个字节,分别写入源端口和目的端口号。
  2. 序号:4字节,序号范围(0~2^32-1)。序号值是指本报文段所发送的数据的第一个字节的序号
  3. 确认号:4字节,是期望收到对方下一个报文段的第一个数据字节的序号注:若确认号为N,则表明到序号N-1为止的所有数据都已正确收到
  4. 数据偏移: 4字节,指TCP报文段的数据起始处距离TCP报文段的起始处有多远,实际指出TCP报文段的首部长度。TCP首部最小长度为20字节,最长60字节(数据偏移值的最大值  4*15),即选项长度不能超过40字节。
  5. 保留:占6位(6个控制位)(6-11介绍)
  6. 紧急URG:当URG为1时,表明紧急指针字段有效,表明应当尽快发送。优先级较高。TCP把紧急数据插入到本报文段数据的最前面,与首部的紧急指针一起使用。
  7. 确认ACK:仅当ACK=1时,确认号字段才有效。TCP规定。在连接建立后,所有传送的报文段都必须把ACK置为1
  8. 推送PSH:两个进程进行交互通信时,一端的应用进程希望在键入一个命令后立即能够收到对方的响应。这时,使用PSH,这时PSH置为1,并立即创建一个报文段发送,接收方TCP收到PSH=1的报文段,会尽快交付应用进程。
  9. 复位RST:RST=1时,表明TCP连接出现严重错误,必须释放连接,然后重新建立。
  10. 同步SYN:在建立连接时,来同步序号,当SYN=1而ACK=0时,表示这是一个连接请求报文段。若对方同意连接,则在响应报文段中使SYN=1,ACK=1.因此SYN=1表示这是一个连接请求或连接接受报文
  11. 终止FIN:释放一个连接。当FIN=1时,表示报文段的发送方的数据发送完,要求释放连接。
  12. 窗口:2字节。值【0,2^16-1】间的证书。窗口是发送本报文段的一方的接收窗口。窗口值告诉对方:从确认号考试,接收方目前允许对方发送的数据量(因为接收方的数据缓存有限),并且窗口值是动态变化的。
  13. 检验和:2字节,同UDP一样,添加一个12字节的伪首部
  14. 紧急指针:2字节,仅当URG=1时才有意义。

最大报文长度MSS:MSS是TCP报文段中的数据字段的最大长度=TCP报文长度-TCP首部长度。

TCP可靠传输的实现

以字节为单位的滑动窗口:接收方只能对按序列收到的数据中的最高序号给出确认。

若A发送完发送窗口中的数据时,必须停止发送。若一段时间后(超时计时器控制)没有收到接收方的确认,则必须重传数据,直到收到B的确认号为止。若确认号在A的发送窗口中,则使A发送窗口向前移动,并且发送新的数据。

TCP的流量控制

流量控制就是让发送方的发送速率不要太快,要让接收方来得及接受。

利用滑动窗口机制可以在TCP连接上实现对发送方的流量控制。

发送方的发送窗口不能超过接收方给出的接收窗口的数值。

注:TCP的窗口单位是字节,不是报文段。

TCP为每一个连接设置了持续计时器,预防互相等待的死锁局面形成。在计时器时间到达后,发送一个零窗口探测报文段(只有1字节的数据),若窗口仍是0,则收到的一方重新设置计时器。若不是0,则死锁的局面打破了

TCP的拥塞控制

若对网络中某一个资源的需求超过了该资源所能提供的可用部分,网络性能就会变坏,则称作拥塞。

几种拥塞控制的方法:慢开始,拥塞避免,快重传和快恢复。

TCP的运输连接管理

运输连接有三个阶段:连接建立,数据传送和连接释放

三次握手协议:

  1. A向B发送连接请求报文段,这时同步位SYN=1,初始序号seq=x。TCP规定:SYN=1的报文段不能携带数据,但仍然消耗一个序号。这时,TCP客户进程进入了SYN-SENT(同步已发送)状态。
  2. B收到连接请求报文段后,向A发送确认。这时SYN=ACK都设置为1,确认号ack=x+1(希望下次A发送的序号是x+1),同时也为自己选择一个序号seq=y,这时TCP服务器进程进入SYN-RCVD(同步收到)状态
  3. TCP客户进程收到B的确认后,还要向B发送确认,确认报文段的ACK置1,确认号ack=y+1,而自己的序号seq=x+1。

可以将三次握手过程形象的归纳如下:

                                    1:A发,B收,B知道A能发;

                                    2:B发,A收,A知道B能发能收;

                                    3:A发,B收,B知道A能收。

三次握手目的:为了防止已经失效的连接请求报文段突然又传回了B。(比如A发送的延时了)

四次握手协议:

  1. 客户的应用进程向TCP发送连接释放报文段,并停止发送数据。FIN置为1,seq=u。A进入了FIN-WAIT-1(终止等待1)状态。这时客户进程只能接受,不能发送
  2. 服务器收到释放报文段后发送确认,确认号是ack=u+1。B进入了CLOSE-WAIT(关闭等待)状态
  3. 服务器没有数据要发送了,则服务器发送释放连接请求报文。FIN=1,ack=u+1,seq=w。B进入了LAST-ACK(最后确认状态)。
  4. 客户进程收到服务器的释放连接请求报文后,对此发送确认。确认报文段中ACK=1,ack=w+1,seq=u+1。然后进入到TIME-WAIT(时间等待状态)。经过时间计时器设置的时间2MSL(MSL是最长报文段寿命),进入到CLOSE状态。

 根本原因:一方发送FIN表示自己发完了所有要发的数据,但是还允许对方继续把没发完的数据发过来。

2MSL的设置:

  1. 保证客户进程发送的最后一个ACK报文能到达服务器进程,若丢失,会在2MSL时间内重传,并且重新启动计时器。
  2. 防止已失效的连接请求报文段出现在本连接中。A在发送完最后一个ACK报文段后,再经过2MSL时间,可以使得本连接持续时间内的报文段全部从网络中小时,使下一个新的连接中不会出现旧连接的请求报文段。

猜你喜欢

转载自blog.csdn.net/Evildoer_llc/article/details/88766849