TCP/UDP 详解 (可靠传输、流量控制、连接管理等核心章节的详解)
如果有需要PDF文档的,可到下载专栏进行下载;
一、 传输层概述
1、传输层存在的必要性
由于网络层的分组传输是不可靠的,无法了解数据到达终点的时间,无法了解数据未达终点的状态。因此有必要增强网络层提供服务的服务质量。
2、引入传输层的原因
面向连接的传输服务与面向连接的网络服务类似,都分为建立连接、数据传输、释放连接三个阶段;编址、寻址、流控制也是类似的。无连接的传输服务与无连接的网络服务也非常类似。一个很显然的问题:既然传输层的服务与网络层的服务如此相似,那么为什么我们还要两个独立的层呢?
原因在于:传输层的代码完全运行在用户的机器上,但是网络层主要运行在由承运商控制的路由器上。试想以下几种情况?
① 网络层提供的服务不够用;
② 频繁的丢失分组;
③ 路由器时常崩溃。
用户在网络层上并没有真正的控制权,所以他们不可能用最好的路由器或者在数据链路层上用更好的错误处理机制来解决服务太差的问题。唯一的可能是在网络层之上的另一层中提高服务质量。这就是传输层存在的必要性。
传输层的任务:在源机器和目标机器之间提供可靠的、性价比合理的数据传输服务,并且与当前使用的物理网络完全独立。
3、传输层的功能
数据传送,不关心数据含义,进程间通信。
弥补高层(上3层)要求与网络层(基于下3层)数据传送服务质量间的差异(差错率、差错恢复能力、吞吐率、延时、费用等),对高层屏蔽网络层的服务的差异,提供稳定和一致的界面。
4、传输层协议与网络层协议的主要区别
网络层(IP层)提供点到点的连接即提供主机之间的逻辑通信,传输层提供端到端的连接——提供进程之间的逻辑通信。
5、传输层的用途
传输层将数据分段,并进行必要的控制,以便将这些片段重组成各种通信流。在此过程中,传输层主要负责:
① 跟踪源主机和目的主机上应用程序间的每次通信;
② 将数据分段,并管理每个片段;
③ 将分段数据重组为应用程序数据流;
④ 标识不同的应用程序。
6、端口的概念
运行在计算机中的进程是用进程标识符来标志的。运行在应用层的各种应用进程却不应当让计算机操作系统指派它的进程标识符。这是因为在因特网上使用的计算机的操作系统种类很多,而不同的操作系统又使用不同格式的进程标识符。为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对TCP/IP体系的应用进程进行标志。
解决这个问题的方法就是在运输层使用协议端口号(protocol port number),或通常简称为端口(port);当传输层从网络层收到数据后,根据传输层协议中的端口号将数据交付给相应的应用进程。
虽然通信的终点是应用进程,但我们可以把端口想象是通信的终点,因为我们只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由 TCP来完成。
在通常情况下,端口好被划分为三段:
端口范围 |
端口类别 |
0到1023 |
公认的端口号,一般为服务端使用 |
1024到49151 |
已注册的端口号 |
41952到65535 |
动态或者私用端口号,一般为客户端使用 |
二、 DUP的基本原理
1、UDP概述
UDP 是一个简单的面向数据报的传输层协议(用户数据报协议),UDP在传输数居前不需要先建立连接,远程主机在收到数据后也无需返回任何确认信息。 基于UDP进程的每个输出操作都产生一个UDP数据报,并封装成一份待发送的IP数据报。如下图(UDP的封装)
在网络层协议的数据服务上加上数据包的分用、复用以及差错检测即为用户数据报协议(UDP协议),主要有以下特征:
(1) 无连接,;
(2) 尽最大阻力交付,不需要维持复杂的链路信息;
(3) 面向报文,不对应用层的数据进行合并和拆分;
(4) 没有拥塞控制,即发送端不会考虑网络传输的情况;
(5) 支持n:n的交付通信(n >= 1);
(6) 首部开销小,有利用提高数据传输效率。
2、UDP的首部格式
(1) 源端口号,表示本地的应用层进程;
(2) 目的端口,报文交付目的进程;
(3) 用户数据报长度,最小值为8个字节(仅有首部);
(4) 检验和,用于检验UDP数据报在传输的过程中是否有错。
3、UDP客户端/服务器程序的交互过程
三、 TCP的基本原理
1、TCP概述
TCP是提供的面向连接的服务,即在传送数据之前要先建立连接,数据传输结束后要释放连接。TCP与UDP不同,不提供广播和多播服务,由于TCP要提供可靠的、面向连接的运输服务,故不可避