【小白入计网】第一章_计算机网络概述
【计算机网络】第二章_物理层(基本概念轻松拿下!)
【计算机网络】第三章_数据链路层(五千字详细易懂!)
【计算机网络】第四章_网络层(连夜爆肝千字文学习必备)【计算机网络】第六章_应用层
以上都是计网学习过程中做的其他几个章节笔记,传送门放这里啦!!
文章目录
学习参考视频:计算机网络微课堂-湖科大
第五章 运输层
5.1 运输层概述
在网络层及其下层它们共同解决了将主机通过异构网络互连起来所面临的问题,实现主机到主机的通信。
实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程。
传输层(Transport Layer)是OSI中最重要, 最关键的一层,是唯一负责总体的数据传输和数据控制传输的一层.传输层提供端到端的交换数据的机制.
根据应用的需求不同,因特网的运输层为应用层提供了两种不同的运输协议:
- 面向连接的TCP
- 无连接的UDP
5.2 运输层端口号、复用与分用的概念
-
运输层端口号
计算机上的进程使用进程标识符PID来标识,而不同操作系统间的进程标识符格式又有不同,为了能使两台不同操作系统上的进程之间可以通信,就必须使用统一的标识符。
由此,TCP/IP体系的运输层使用端口号来区分应用层的不同进程。
-
端口号使用16比特表示,取值范围为
0~65535
-
端口号只具有本地意义,即端口号只是为了标识本计算机应用层的各进程,在因特网中,不同计算机中的相同端口号是没有联系的。
-
-
发送方的复用和接收方的分用
传输层有两种协议分别是TCP和UDP。
- 应用报文交给下层服务时,会根据自己进程端口号选择不同协议,如下图所示:
- 应用层常用协议所使用的运输层熟知端口号
5.3 UDP和TCP的对比
用户数据报协议UDP | 传输控制协议TCP |
---|---|
无需建立连接,直接传输数据 | 需要建立连接 |
支持单播、多播和广播 | 仅支持单播 |
应用报文形式传输 | 字节流传输 |
提供不可靠传输服务 | 提供可靠传输服务 |
根据上述特点,可以很轻松猜出UDP适合IP电话,和视频会议等;而TCP适合文件传输等
5.4 TCP的流量控制
一般来说,我们总希望数据传输的快一些。但是如果发送方把数据发送的过快,接收方可能就来不及接收,这就会造成数据丢失。
所谓流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。
利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
-
TCP接收方利用自己的接收窗口的大小来限制发送窗口的大小。
-
TCP发送方接收到零窗口通知后,会重启持续计时器。计时器超时后会,发送零窗口探测报文。
但实际的发送窗口大小等于流量控制窗口和拥塞控制窗口的最小者。
5.5 TCP的拥塞控制
在某段时间,若对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫拥塞。
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降,也很可能导致网络瘫痪。
由此,有了以下四种拥塞控制算法
-
慢开始
在建立连接完成后,拥塞窗口默认开始值为1,发送数据报;收到确认后,拥塞窗口为原先拥塞窗口值的两倍,然后再发送数据报;
直到达到慢开始门限值(ssthresh=16)进入拥塞避免状态。
-
拥塞避免
到拥塞避免状态后,每次收到确认后拥塞窗口+1,发送数据报;
如果在某一次(假设此时拥塞窗口为24),发送的数据报未收到确认,导致了重传计时器超时,开始重传。
这时判断网络可能出现了拥塞会进行一下工作:
- 将ssthresh值更新为发生拥塞时拥塞窗口值的一半
- 将拥塞窗口值
=1
重新执行慢开始算法
-
快重传
但是,有时数据报丢失并不是因为网络拥塞。
- 这将导致发送方超时重传,并误认为网络发生了拥塞。
- 发送方把拥塞窗口cwnd又设置为最小值为1,并错误的启动了慢开始算法,因而降低了传输效率。
所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。
-
要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认;
-
即使收到了失序的报文段也要立即发出对收到的报文段的重复确认。
-
发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传。
发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法。
-
快恢复
-
发送方将拥塞窗口值和慢开始门限值调整为当时拥塞窗口值的一半。开始执行拥塞避免算法。
-
5.6 TCP超时重传时间的选择
-
超时重传计时器的选择是TCP最复杂的问题之一
当超时重传时间RTO过大,会使网络的空闲时间增大,降低了传输效率。
当超时重传时间RTO过小,可能来不及接收 接收方的确认,导致执行重传,从而浪费了网络资源。
于是有了以下解决办法:
-
但是往返时间RTT的测量比较复杂
因此,提出了解决方法是:报文段每重传一次,就把超时重传时间RTO增大一些。典型的做法是将新RTO的值取为旧RTO值的2倍。
-
5.7 TCP可靠传输的实现
5.8 TCP的运输连接管理
5.8.1 TCP的连接建立
- TCP是面向连接的协议,它基于运输连接来传送TCP报文
- TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程
- TCP运输连接有以下三个阶段:
- 建立TCP连接
- 数据传送
- 释放TCP连接
- TCP的l连接建立要解决以下三个问题:
- 使TCP双方能够确知对方的存在;
- 使TCP双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);
- 使TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
其中,SYN表示同步位;ACK表示确认位;seq表示序号字段
注意:
-
为什么是三次报文握手不是两次呢?
如果是两次报文握手,可能上一次的TCP连接请求在网络中滞留了,导致了超时重传,进行完数据传送,断开连接。紧接着上一次的连接到达服务器后,向客户端发送确认,而此时客户端端口一直处于关闭状态,而服务器端却是连接已建立状态,这就会造成资源浪费。
-
TCP的标准规定,SYN=1的报文段不能携带数据,但要消耗掉一个序号。
-
TCP的标准规定,普通的确认报文如果不携带数据,则不消耗序号。
5.8.2 TCP的连接释放
若在连接过程中,客户端出现故障。服务端如何发现,从而自动断开连接呢?
- TCP服务进程每收到一次TCP客户端进程数据,就重新设置并启动保活计时器(2小时定时)、
- 若保活计时器定时周期内未收到TCP客户进程发来的数据,则当保活计时器到时后,TCP服务器进程就向TCP客户端进程发送一个探测报文段,以后则每隔75s发送一次。若一连发送10个探测报文段后仍无TCP客户进程的响应,TCP服务器进程就认为TCP客户进程所在主机出了故障,接着就关闭这个连接。
5.9 TCP报文段的首部格式
-
TCP报文的首部格式
-
数据偏移
报文首都长度,以4字节为单位
-
保留
占6比特,保留为今后使用,但目前应置为0
-
紧急标志位URG
取值为1时紧急指针字段才有效。
-
确认标志ACK
取值为1时确认号字段才有效;TCP规定,在连接建立以后所有传送的TCP报文段都必须把ACK置为1。
-
推送标志位PSH
接收方的TCP收到标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存填满后再向上交付。
-
复位标志位RST
当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接。
RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接。
-
同步位SYN
在TCP连接建立时用来同步序号。
-
终止标志位FIN
用来释放连接。
-
窗口
占16比特,以字节为单位。指出发送本报文段的一方的接收窗口。
窗口值作为接收方让发送方设置其发送窗口的依据;
这是以接收方的接收能力来控制发送方的发送能力,称为流量控制。
-