运输层(五层协议)
- 什么是运输层?运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
-
当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层(网络层,数据链路层,物理层)的功能。
具体什么是网络的边缘部分和核心部分?(传送门:
https://blog.csdn.net/qq1350975694/article/details/106862987
)
运输层的作用
-
从运输层的角度讲,两台主机进行通信就是两台主机中的应用进程互相通信。
-
和
网络层(IP层)下一层
来比较,网络层为主机之间提供逻辑通信。而运输层为应用进程之间提供端到端的逻辑通信。(通俗解释一下就是网络层只为主机之间的联系提供帮助,但是运输层是提供主机内APP之间的联系。)
TCP(传输控制协议)和UDP(用户数据报协议 )
根据应用程序的不同需求,运输层需要有两种不同的运输协议,即面向连接的 TCP 和无连接的 UDP 。
TCP和UDP的区别
-
TCP是一条
面向连接
的全双工的可靠信道,且在传送数据之前需要先建立连接。UDP是一条
不面向连接
的不可靠信道,在传送数据之前不需要先建立连接。 -
TCP只能是
点对点
。UDP可以
一对一、一对多、多对一和多对多
。 -
TCP
面向字节流
。UDP
面向报文
。
UDP
虽然UDP是不可靠的传输,但是UDP同样有自己的优点。
-
UDP是无连接的
。即发送数据之前不需要先在两端建立连接。 -
UDP使用尽最大努力交付
。即不保证可靠交付,因此主机不需要维持复杂的连接状态表。 -
UDP是面向报文的(通俗来说即不拆分数据)
。
①当UDP作为发送方的时候,应用层交给UDP多长的报文,UDP发多长的报文给网络层,即一次发送一个报文。
②当UDP作为接收方的时候,网络层交上来的 UDP ,在去除首部后就原封不动地交付上层的应用进程,即一次交付一个完整的报文。 -
UDP没有拥塞控制
。因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的,很适合多媒体通信的要求,例如大家都在用的QQ。 - UDP 支持一对一、一对多、多对一和多对多的交互通信。
- UDP 的首部开销小。只有 8 个字节(源IP地址4个字节,目的IP地址4个字节),比TCP 的 20 个字节的首部要短。当运输层从 网络层收到 UDP 数据报时,就根据首部中的目的IP地址,把 UDP 数据报通过相应的端口,上交最后的终点——应用进程。
TCP
-
TCP面向字节流(通俗来讲即将数据拆分成报文段)
- TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
- TCP 可把太长的数据块划分短一些再传送。 TCP 也可等待积累有足够多的字节后再构成报文段发送出去。
TCP的连接(套接字或插口)
- 每一条 TCP 连接有两个端点,TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口,而是叫做套接字。端口号接到 (contatenated with) IP 地址即构成了套接字。
TCP的可靠传输工作原理
为什么TCP要叫可靠传输呢?什么是可靠传输?可靠传输就是发送方发送的数据接收方全部能接收到,而且不出现差错。TCP就是靠一些可靠传输协议,在不可靠的传输信道实现可靠传输。
1.停止等待协议
“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
-
无差错情况
A 发送分组 M1,发完就暂停发送,等待 B 的确认 (ACK)。B收到了 M1 向 A 发送 ACK。A 在收到了对 M1 的确认后,就再发送下一个分组 M2。
-
出现差错
在接收方 B 会出现两种情况:
(1) B 接收 M1 时检测出了差错,就丢弃 M1,其他什么也不做(不通知 A 收到有差错的分组)。
(2) M1 在传输过程中丢失了,这时 B 当然什么都不知道,也什么都不做。
如何保证 B 正确收到了 M1 呢?
解决方法:超时重传
A 为每一个已发送的分组都设置了一个超时计时器。A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2 。 -
确认迟到和确认丢失
(1) 确认迟到:传输过程中没有出现差错,但
B 对分组 M1 的确认迟到
了。
A:收到重复的确认。对重复的确认的处理很简单,收下后就丢弃
B:会收到重复的 M1,并且同样要丢弃重复的M1,并重传确认分组
(2) 确认丢失
若 B 所发送的
对 M1 的确认丢失
了,那么 A 在设定的超时重传时间内不能收到确认,但 A 并无法知道:是自己发送的分组出错、丢失了,或者 是 B 发送的确认丢失了。因此 A 在超时计时器到期后就要重传 M1。这时候B就会收到重传的M1.B可以采取两种方法:①丢弃这个重复的分组 M1,不向上层交付。 ② A 发送确认。不能认为已经发送过确认就不再发送,因为 A 之所以重传 M1 就表示 A 没有收到对 M1 的确认。
-
经过上边的停止等待协议之后,通常 A 最终总是可以收到对所有发出的分组的确认。如果 A 不断重传分组但总是收不到确认,就说明通信线路太差,不能进行通信。
使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信
。像上述的这种可靠传输协议常称为自动重传请求 ARQ(Automatic Repeat reQuest)。意思是重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组。
2.连续 ARQ 协议
-
接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是
对按序到达的最后一个分组发送确认
,这样就表示:到这个分组为止的所有分组都已正确收到了。
优点:容易实现,即使确认丢失也不必重传。
缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。 - Go-back-N (回退N)
- 如果发送方发送了前 5 个分组,而中间的第 3个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。这就叫做 Go-back-N(回退 N),表示需要再退回来重传已发送过的 N 个分组。 可见当通信线路质量不好时,连续 ARQ 协议会带来负面的影响。
(传送门)TCP的标志位以及三次握手和四次挥手
https://editor.csdn.net/md/?articleId=106657632
(传送门)TCP的流量控制(滑动窗口)和拥塞控制:
https://editor.csdn.net/md/?articleId=106715151
版权声明:本文为qq1350975694原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。