- 运输层是面向通信功能中的最高层,又是面向用户功能中的最底层。
一、运输层的作用
AP~n~
代表各个进程,(通讯并不是主机和主机之间的通信,实际上是应用进程之间的通信)IP协议
的作用范围:主机和主机之间进行通信端口
:端口实际上是一个标识符,标志着是哪个进程发送的数据,或要交给哪个进程。运输层协议
TCP和UDP的作用范围:从进程到进程网络层(IP协议)
是为主机之间提供逻辑通信,而运输层(TCP/UDP协议)
是为应用进程之间提供端到端的逻辑通信
运输层的功能和协议:
- 在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信,这表明运输层有两个很重要的功能 :
复用
和分用
- 根据应用程序的不同需求,运输层需要两种不同的运输协议,即
面向连接的TCP
和无连接的UDP。
基于端口的分用和复用
- TCP协议和UDP协议面对不同通信需求的进程产生不同的报文,它们最终都会被封装成IP数据报,到达目的地再拆分,拆分根据IP数据报的首部中的协议字段来拆分,分出TCP和UDP
屏蔽作用
运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑,所采用的的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道
二、TCP/IP运输层的两种协议
- 运输层这条逻辑通信信道对上层的表现因运输层使用不同的协议而又很大的差别
用户数据报协议UDP
:- 特点: 快速、简单、不可靠
- 当运输层采用
无连接的UDP协议
时,这种逻辑通信信道是一条不可靠信道
,因为对于UDP来说,它是无连接的,所以这里无所谓是全双工的半双工的概念。
传输控制协议TCP
:- 可靠
- 提供面向连接的服务:前面网络层讲了虚电路和数据报,数据报是无连接的,这是网络层的概念,运输层不用下层是如何实现的。在运输层看来是有一个连接的,而且是一对一的连接!
- 不提供广播和多播服务,虽然下层的网络不是可靠传输,底层也不是全双工,但这种逻辑通信信道相当于一条
全双工可靠信道
(不用管下层怎么样
,另外TCP如何保证可靠传输,在后面会提)
应用程序如何选择哪种协议呢?
三、端口的概念
- 计算机中的进程使用
进程标识符
来标志的。但各个进程不应该让计算机的操作系统来指派它的进程标识符,这是因为不同的操作系统会导致标识符格式太多,不易处理。所以端口号一般用同一方法分配 - 端口用一个16位端口号进行标志,它只具有本地意义,仅仅为了标志
本计算机各个应用进程
,不同计算机的相同名称的端口号是没有任何联系的(非互相通信的计算机)。因此两台计算机在通信时,需要知道IP地址和端口号才可以。
两大类端口号:
服务器端使用的端口号
- 熟知端口,数值一般为0-1023 (常用)
- 登记端口号,数值为1024-49151。这个范围的端口号必须在IANA等级,以防止重复。 (用来登记将来
有可能
称为熟知端口号的端口号。)
客户端使用的端口号
- 又称为短暂端口号,数值为49152-65535,留给客户进程选择暂时使用。(通讯结束后,这个端口号就被释放掉了)
四、用户数据报协议UDP
- 协议传送单元叫做UDP报文或用户数据报
特点
:- 快速、不可靠、简单。
- UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。
- UDP使用最大努力交付,不保证可靠交付,也不考虑数据量拥堵程度,发了就完事了。
UDP是面向报文的
,将整个应用层报文交给IP数据报。- 应用层交给UDP多长的报文,UDP就发送多长的报文,不用管它多长,不拆分,不分组,一次发完。因此应用程序自己必须选择合适大小的报文。
- 应用层交给UDP多长的报文,UDP就发送多长的报文,不用管它多长,不拆分,不分组,一次发完。因此应用程序自己必须选择合适大小的报文。
- UDP支持一对多、一对一、多对一、多对多的交互通信
- UDP的首部开销小,只有8个字节。
- UDP只在IP数据报服务至上增加了很少一点的功能:
- 复用和分用的功能
- 差错检测的功能
- IP数据报首部中有一个首部校验和,它只完成对首部的检验。
- UDP也可以检测错误
优点:
虽然UDP只提供不可靠的交付,但UDP在某些方面具有其特殊的优点。适用于高实时性
且对安全要求不是很高
的场合,比如直播、视频。()
UDP首部格式
- UDP有两个字段:首部字段和数据字段。首部字段:8个字节,分为4个字段,每个字段2个字节。其结构如下:
- 伪首部: 在计算检验和时,临时把“伪首部”和UDP用户数据报连接在一起。为了计算检验和。
五、TCP协议
特点
- TCP要实现的功能很多,比如可靠传输、流量控制、拥塞控制、建立连接、释放连接等
- 协议传送单元叫做
TCP报文段
- TCP设计面向连接的运输层协议。
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是
点对点的
(一对一) - 提供可靠谱传输,全双工通信(收发两端都有缓存???) 、面向字节流(UDP是面向报文的)
面向字节流的概念
- 其过程如下图所示,发送方向接收方进程发送和的字节流是:0123456……21
TCP的连接
- TCP连接的端点不是主机,也不是主机的IP地址,也不是应用进程,也不是运输层的协议端口(端口和应用进程没啥区别),TCP连接的端点叫做
套接字或插口
。 - 套接字实际上表明了是哪台主机上的哪个应用进程。
- 每一条TCP连接有两个端点,因此TCP连接的端口有两个套接字组成:
- TCP的连接是一条
虚连接
而不是一条真正存在的物理连接。(双方都承认有这么一条连接,但实际上木有) - TCP对于 应用程序 一次把多长的报文发送到TCP的缓存中是不关心的,应用程序该这么发就怎么发,只要缓存存的下就行。但当把缓存中的数据向外发的时候就是由TCP决定的了。
- TCP根据对方给出的
端口值和当前网络拥塞的程度
来决定一个报文段应该包含多少个字节。它可以将太长的数据块分短一点,也可以先将字节存储积累一会再一起转发。(UDP发送的报文是完全由进程决定的)
- TCP根据对方给出的