计算机网络——运输层
概述和运输层服务
运输层和网络层的关系
首先,运输层会将应用层报文进行分块(应用层报文小的话不会分块),然后将分成的块加上运输层首部信息并编以号码,然后发送给位于其之上的网络层。
经运输层处理过后的报文称之为报文段。
网络层将运输层发送的报文段封装成数据报传递给数据链路层,网络路由器仅作用于数据包的网络层字段,不对运输层字段进行检查。
网络层位于运输层之上,为不同的主机之间提供逻辑通信;而运输层为不同主机上的不同进程提供逻辑通信。
正是因为网络层位于运输层之上,因此运输层协议能够提供的服务常常受制于网络层协议的服务模型。如,若网络层不提供时延和带宽保证的话,运输层就不能保证时延和带宽保证。
运输层概述
运输层协议为运行在不同端系统上的应用进程之间提供了逻辑通信功能。即应用层协议直需要告诉运输层要发送的内容,具体的传输过程由运输层来实现。
运输层协议分为两种:TCP协议和UDP协议。每种协议都能为调用的应用程序提供一组不同的运输层服务。
- TCP协议(传输控制协议):为调用它的应用程序提供可靠的、面向连接的服务
- UDP协议(用户数据报协议):为调用它的应用程序提供不可靠的、无连接的服务
RFC文档中将TCP协议的运输层分组称为报文段,而将UDP协议的运输层分组称为数据报,但是将网络层的分组也称为数据报,因此,此文中将TCP协议分组和UDP协议分组统称为报文段。
IP协议尽力而为地交付服务,即它尽最大的能力交付报文段,但是不保证报文段的按序交付,也不保证报文段中数据的完整性。因此IP协议被称为不可靠服务
UDP和TCP的基本职责是:将两个端系统间IP的交付服务扩展为端系统上两个进程的交付服务,称之为运输层的多路复用和多路分解。
UDP和TCP可以通过在其报文首部中包括差错检查字段而提供完整行检查。
进程之间的数据交付和就差错检查是两种最低限度的运输层服务,也是UDP仅有的服务。
TCP还提供可靠数据传输和拥塞控制。
- 通过使用流量控制、序号、确认和定时器来确保正确的、按序的将数据从发送进程交付给接收进程
- TCP通过调节控制TCP连接的发送进网络的流量速率来实现拥塞控制。TCP拥塞控制防止任何一条TCP连接用过过多流量来淹没通信主机之间的链路和交换设备,力求为每一条通过一条拥塞网络链路的连接平等地共享网络链路带宽。
端口号
定义
MAC地址用来表示同一链路中不同的计算机
IP地址用来表示网络互联中的主机和路由器
端口号用来识别同一台计算机中不同的应用程序,因此也被称为程序地址。
通过IP地址、端口号、协议号进行通信识别
- 端口号不同
- 端口号相同
- IP地址相同
- 协议号(表示上层是TCP还是UDP的一种编号)相同
- 协议号不同
- IP地址不同
- IP地址相同
- IP地址不同,端口号相同
- 网络通信中通过源IP地址、源端口号、目的IP地址、目的端口号、协议号来唯一标识一个通信,只有当这五个值完全相同时,才会被认为是同一个通信,否则会被认为是两个不同的通信
端口号的确定
端口号是一个16比特的数,大小在0-65535之间
- 0-1023范围内的端口号不能使用,被称为周知端口号或者知名端口号,已经被其他周知的应用程序所使用,如邮件服务器的25号端口和web应用程序的80端口号以及FTP的21端口号
- 1023-49151之间的端口号可能被正式注册,但是这些端口号可用于任何通信用途
- 49152-65535之间的端口号为操作系统动态分配的端口号
端口号与协议
端口号由其所使用的协议决定
不同的协议可以使用相同的端口号,但使用目的不同,因为端口号上的处理是根据每个传输协议的不同而进行的
知名端口号与传输层协议没有关系,只要端口一致都分配同一种程序进行处理
多路复用和多路分解
将运输层报文段中的数据交付到正确的套接字的工作称为多路分解
在源主机从不同的套接字中接收报文并将报文进行封装处理生成报文段,然后将报文段传递到网络层的工作称为多路复用
要求:
- 套接字由唯一标识符
- 每个报文段由特殊字段来只是该报文段要交付到的套接字,如,源端口号字段,目的端口号字段。
UDP套接字是由一个二元组全面标识的,该二元组包含一个目的端口号和源端口号。
而TCP套接字是由一个四元组全面标识的,该四元组由目的IP、目的端口号、源IP、源端口号构成。
源端口号的作用:在由A到B的报文段中作为源端口号,然后当B向A返回报文中作为目的端口号。请求报文和回应报文中目的端口号和源端口号互换。
只要目的IP地址和目的端口号相同,这两个报文段就会通过相同的目的UDP套接字而被定为到相同的进程;
只有当源端口号、源IP、目的端口号、目的IP都相同时才会被相同的TCP套接字接收从而被定位到相同的进程,否则会由两个不同的TCP套接字接收而被定位到两个不同的进程。
UDP
简介
UDP不提供复杂的控制模式,利用IP提供面向无连接的通信服务,接收数据后立即发送
不具有可靠性,可以确保发送消息的大小,但是不保证数据一定会到达接收方
典型应用:
- 包总量较少的通信(DNS、SNMP等)
- 视频、音频等多媒体通信(即时通信)
- 限定于LAN等特定网路中的应用通信
- 广播通信(广播、多播)
UDP报文
UDP报文由报文首部和数据组成,数据部分为应用层报文
UDP报文首部解析:
- 源端口号:发送端应用的端口号,字段长16位。该字段也可能不设置,此时为0,用于不需要返回的通信中
- 目的端口号:接收端应用的端口号,字段长16位。该字段的值必须设置。
- 包长度:首部长度+数据部分长度,单位为字节
- 校验和:为了提供可靠性数据传输而设计,用来进行差错校验。每16位数据相加之和的结果的反码作为校验和。UDP伪首部、UDP首部、UDP数据都算。超出16位会进行回卷操作。
- 接收端可以通过校验和来检验数据的完整性和正确性。将UDP伪首部、UDP首部、UDP数据以16位为单位进行相加,将检验和与该结果按位相与的结果应该全为1,若不全为1则证明数据错误。
- UDP伪首部
TCP
特点
- 面向连接的、可靠的流协议,流即不间断。
- 可以进行丢包时的重发控制
- 对乱序的分组进行顺序控制
- 只有确定通信对端存在时才会发送数据、从而控制通信流量的浪费
- TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输
TCP要理解的内容:可靠性传输,流量控制,拥塞控制。