关于传输层那点事

    xiaoxiao2022-06-24  201

    1. 传输层是干啥的?

    传输层协议为运行在不同主机上的应用进程之间提供逻辑通信(logic communication), 使通信双方不用关心对方的物理位置。运输层协议是在端系统中而不是在路由器中实现的。 ![数据往外发送的历程](https://img-blog.csdnimg.cn/20190522071243971.png)

    2. 运输层与网络层啥关系?

    网络层提供的主机之间的逻辑通信,而运输层为运行在不同主机上的进程之间提供的逻辑通信。 运输层协议能够提供的服务,常常受制于底层网络层协议的服务模型,但是即使底层网络协议是不可靠的,也就是说网络层协议会使分组丢失篡改和冗余,运输层协议,也能为应用程序提供可靠的数据传输服务。 什么是运输层多路复用与多路分解?,是将由网络层提供的主机到主机交付服务,延伸到为运行在主机上的应用程序,提供进程到进程的交互服务,一个进程有一个或多个套接字,这个套接字是应用层与运输层的接口,将运输层报文段中的数据交付到正确的套接字的工作称为**多路分解***,在原主机从不同套接字中收集数据块儿,并为每个数据块封装上首部信息,从而生成报文段,然后将报文传输到网络层,所有这些工作称为多路复用***。 无连接的多路复用与多路分解实现: Udp套接字是由一个二元组来全面标识的,该二元组包含一个目的IP地址和一个目的端口号,如果两个udp报文段有不同的源IP地址和源端口号,但具有相同的目的IP地址和目的端口号,这两个报文段将通过相同的目的套接字,被定向到相同的目的进程。 那么源端口号与源IP地址有什么用呢?他们是会被用作返回地址的一部分,当server端需要向client端发送数据时,会提取报文段中的源IP和源端口号作为发送的目的端。 面向连接的多路复用与多路分解, TCP套接字由一个4元组标示,这个4元组包括源IP地址,源端口号,目的IP地址及目的端口号。两个具有不同源IP地址和源端口号的到达TCP报文段,将被定向到两个不同的套接字。 在Web server 端,连接套镜字与进程之间并不总是存在着一一对应的关系,因为一套系统进程的资源是有限的,所以在当今高性能的web服务器通常只有一个进程,但是会为每一个新的客户连接,创建一个具有新连接套接字的新线程。

    无连接运输:UDP

    Udp除了复用/分解功能及少量的差错检测(校验和)外,几乎没有对IP增加别的东西----udp从应用进程得到数据,附加用于多路复用,分解服务的源和目的端口号字段以及两个其他小子段(长度,检验和),然后将形成的报文交给网络层。 udp是在发送报文段之前,发送方和接收方的运输层实体之间没有握手,正因为如此udp被称为是无连接的。 Udp虽然无连接状态,不可靠,但是为什么很多应用程序还是选择使用udp呢?原因如下: 关于何时发送什么数据,应用层控制更为精细。采用udp时只要应用程序将数据传送给udp, udp就会将此数据打包进udp报文段并立即将其传递给网络层。一些实时应用通常要求最小的发送速率,不希望过分的延迟,报文段和发送和传送,而且能容忍一些数据丢失。TCP服务模型就不是非常适合这种应用。无需建立链接。因此udp不会引入建立连接的时间。无连接状态,TCP需要在系统维护连接状态,但是有UDP不需要,也不需要追踪这些维护状态需要的参数。所以相比TCP来说需要更少的资源开销。分组首部开销小,每个TCP报文段都有20个字节的首部开销,而udp只有8个字节的首部开销。 UDP报文段结构如下: UDP的检验和提供了差错检测功能,用于确定UDP报文段从源到达目的 过程中比特是否发生变化。

    可靠数据传输

    一步一步完善传输协议 版本1:假定底层信道完全可靠,即无 bit error,无 package lost,发送端与接收端各只有一个状态机。 版本2:为了处理Bit 受损,设计出版本 2, 增加 ACK NAK 反馈机制,—但是如果 ACK NAK本身出错了怎么办—发送方重传—接收方如何识别是新报还是重传包—对发送数据进行排序。 一旦ack1,或者pkt1 loss,sender端就需要等待超时,这样影响效率,浪费时间。 所以这叫停等协议。 为了提高效率,引入流水线可靠数据传输协议, 流水线协议的特点:

    增加了序号范围,因为流水线相当于同时传输多个分组,而每个分组需要一个唯一端序号。sender 和 receiver 需要缓存多个分组。解决流水线差错恢复有两种方式: (go-back-N) (selective repeat). 什么是go-back-N 和 selective repeat,呢,见下篇。

    最新回复(0)