概述
- 之前课程所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信
- 但实际上,在计算机网络中进行通信的真正实体是位于通信两端主机中的进程
- 如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议也称为端到端协议
运输层端口号、复用与分用的概念
端口号
发送方的复用和接收方的分用
TCP/IP体系的应用层常用协议所使用的运输层熟知端口号
举例
DNS客户端发送DNS查询请求报文给DNS服务端
用户在浏览器中输入web服务器的域名www.porttest.com
用户PC的DNS客户端进程会发送一个DNS查询请求报文
内容为:域名www.porttest.com对应的IP地址是什么
DNS查询请求报文需要使用运输层的UDP协议封装成UDP用户数据报
UDP首部的源端口值在短暂端口号49151~65525中挑选一个未被占用的,用来表示DNS客户端进程,例如49152
目的端口的值设置为53,这是DNS服务器端进程所使用的熟知端口号
之后,将UDP用户数据报封装在IP数据报中,通过以太网发送给DNS服务器,DNS服务器收到该数据报后,从中解封出UDP用户数据报,
UDP目的端口为53,这表明应将UDP用户数据报的数据载荷部分,也就是DNS查询请求报文交付给本服务器中的DNS服务器端进程
DNS服务端发送DNS响应报文给DNS客户端
DNS服务器端进程解析DNS查询请求报文的内容,然后按其要求查找对应的IP地址,之后,会给用户发送DNS相应报文,其内容为“域名www.porttest.com对应的ip地址是192.168.0.3”
DNS响应报文需要使用运输层的UDP协议封装成UDP用户数据报,UDP首部的源端口值设置为53,表明这是DNS服务器端进程所发送的UDP用户数据报,目的端口字段的值设定为49152,这是之前用户PC中发送DNS查询请求报文的DNS客户端进程所使用的短暂端口号
之后,将UDP用户数据报封装在IP数据报中,通过以太网发送给用户PC,用户PC收到该数据报后,从中解封出UDP用户数据报,
UDP首部中的目的端口号为49152,这表明应将UDP用户数据报的数据载荷部分,也就是DNS响应报文交付给用户PC中的DNS客户器端进程
DNS客户端进程解析DNS响应报文的内容,就可知道自己之前所发送的Web服务器的域名所对应的ip地址为192.168.0.3
HTTP客户端发送HTTP请求报文给HTTP服务端
现在,用户PC中的http客户端进程可以向Web服务器发送HTTP请求报文了,其内容为“首页内容是什么”,HTTP请求报文需要使用运输层的TCP协议封装成TCP报文段,
其首部的源端口值在短暂端口号49151~65525中挑选一个未被占用的,用来表示HTTP客户端进程,例如49152
目的端口的值设置为80,这是HTTP服务器端进程所使用的熟知端口号
之后,将TCP报文段封装在IP数据报中,通过以太网发送给Web服务器,
Web服务器收到该数据报后,从中解封出TCP报文段,
TCP首部的目的端口号为80,这表明应该将该TCP报文段的数据载荷部分,也就是HTTP请求报文交付给本服务器中的HTTP服务器端进程
HTTP服务端发送HTTP响应报文给HTTP客户端
HTTP服务端进程解析HTTP请求报文的内容,然后按其要求查找首页内容,
之后,会给用户PC发送HTTP响应报文,其内容是HTTP客户端所请求的首页内容。HTTP响应报文需要使用运输层的TCP协议封装成TCP报文段,其首部中的源端口字段的值设置为熟知端口号80,表明这是HTTP服务器端进程所发送的TCP报文段,目的端口字段的值设定为49152,这是之前用户PC中发送HTTP请求报文的HTTP客户端进程所使用的短暂端口号,
之后,将TCP报文段封装在IP数据报中,通过以太网发送给用户PC,用户PC收到该数据报后,从中解封出TCP报文段,
TCP首部的目的端口号为49152,这表明应该将该TCP报文段的数据载荷部分,也就是HTTP响应报文交付给用户PC中的HTTP客户器端进程
HTTP客户端进程解析HTTP响应报文的内容,并在网页浏览器中进行显示,这样我们就可以在网页浏览器中看到Web服务器所提供的首页内容了
UDP和TCP的对比
UDP和TCP是TCP/IP体系结构运输层中的两个重要协议
有无连接
传播方式
处理数据报
(TCP是全双工通信)
是否可靠传输
数据报首部
TCP的流量控制
- 一般来说,我们总是希望数据传输得更快一些,但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失
- 所谓流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收
- 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制
举例说明
下一题
TCP的拥塞控制
- 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫拥塞
在计算机网络中的链路容量(带宽)、交换结点中的缓存和处理机制等,都是网络的资源 - 若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降
拥塞控制算法
下面介绍四种拥塞控制算法的基本原理,假定如下条件
- 数据是单方向传送,而另一个方向只传送确认
- 接收方总是有足够大的缓存空间,因而发送方的发送窗口的大小应该由网络的拥塞程度来决定
- 以最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位
慢开始算法
慢开始是乘法增长,不断试探接收方能接收的最大报文数
每次乘2,当到达慢开始门限值时,改用拥塞避免算法
拥塞避免
每轮传输轮次结束后,拥塞窗口值只能线性加一,
当部分报文段丢失,这必然会造成发送方对这些丢失报文的超时重传
发送方以此判断网络可能出现了拥塞,进行以下工作:
- 将慢开始门限值(ssthresh)值更新为发生拥塞时拥塞窗口cwnd值的一半
- 将cwnd值减小为1,并重新执行慢开始算法
快重传
快恢复
例题
TCP超时重传时间的选择
- 超时重传时间的选择是TCP最复杂的问题之一
因为复杂的网络环境,略大于往返时间RTT没那么好找
计算:
测量比较复杂
TCP可靠传输的实现
例题
下一题
TCP的运输连接管理
TCP连接的建立
被动打开连接:首先TCP服务进程创建传输控制块,用来存储TCP连接中的一些重要信息
,之后就准备接收TCP客户进程的连接请求。
此时TCP服务器进程就进入监听状态,等待TCP客户进程的连接请求。
TCP客户进程首先创建传输控制块,然后主动打开连接
如下图
两次握手的弊端:
例题:
注意:
- TCP的标准规定,SYN =1 的报文段不能携带数据,但要消耗一个序号
- TCP的标准规定,普通的确认报文段如果不携带数据,则不消耗序号
TCP的连接释放
TCP报文段的首部格式
端口号
序号字段、确认字段、确认标记字段ACK
数据偏移字段
保留字段
占6比特,保留为今后使用,目前应置0
窗口字段
校验和字段
同步标志位SYN
终止标志位FIN
复位标志位RST
推送标志位PSH
紧急标志位URG和紧急指针
选项部分