一、运输层协议概述
1、(1)进程之间的通信:
运输层向它上面的应用层提供通信服务。
当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。
两个主机进行通信实际上就是两个主机中的应用进程互相通信。应用进程之间的通信又称为端到端的通信。
“运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。
图1 运输层为相互通信的应用进程提供了逻辑通信
(2)运输层的主要功能
运输层为应用进程之间提供端到端的逻辑通信
运输层需要有两种不同的运输协议,即面向连接的TCP(传输控制协议)和无连接的UDP(用户数据报协议)。
图2 TCP/IP 体系中的运输层协议
(3)运输层的端口
提出的原因:两个主机之间(同一主机不同进程)进行通讯,应该以PID号作为寻找标准,但该进程再次运行时,PID号会发生变化,需要一种不变的方式标记进程,这就用到端口。
解决方法:在运输层使用协议端口号(protocolport number),或通常简称为端口(port)。只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由 TCP 来完成。
端口用一个16 位端口号进行标志。
端口号只具有本地意义,在因特网中不同的计算机相同的端口号是没有联系的。
三类端口:
熟知端口,数值一般为 0~1023。
登记端口号,数值为1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA登记,以防止重复。
客户端口号或短暂端口号,数值为49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
端口复用:端口复用允许一个应用程序可以把 n 个套接字绑在一个端口上而不出错。
二、用户数据报协议UDP
(1)UDP的主要特点:
UDP 是无连接的,即发送数据之前不需要建立连接。
UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
UDP 是面向报文的。UDP没有拥塞控制,很适合多媒体通信的要求。
UDP 支持一对一、一对多、多对一和多对多的交互通信。
UDP的首部开销小,只有8个字节。
(2)UDP首部格式
图3 UDP用户数据报的首部和伪首部用户数据报 UDP
有两个字段:数据字段和首部字段。首部字段有8 个字节,由 4 个字段组成,每个字段都是两个字节。在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。
三、传输控制协议TCP
1、TCP最主要的特点
TCP 是面向连接的运输层协议。
每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。
TCP 提供可靠交付的服务。
TCP 提供全双工通信。
面向字节流。
TCP 连接是一条虚连接而不是一条真正的物理连接。
TCP 对应用进程一次把多长的报文发送到TCP 的缓存中是不关心的。
TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
TCP 可把太长的数据块划分短一些再传送。TCP 也可等待积累有足够多的字节后再构成报文段发送出去。
2、TCP 的连接
TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP连接的端点叫做套接字(socket)或插口。
用IP找主机,用port找程序(进程)。
端口号拼接到(contatenatedwith) IP 地址即构成了套接字。
套接字socket = (IP地址: 端口号)
每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
TCP 连接 ::= {socket1,socket2} = {(IP1: port1), (IP2: port2)}
3、TCP报文段的首部格式
源端口和目的端口字段——各占2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。一方面快速确认数据是否丢失,若丢失则告诉发送方哪部分丢失,再重发。另一方面,保证数据有序显示。
确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
数据偏移(即首部长度)——占 4 位,它指出TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)。
保留字段——占 6 位,保留为今后使用,但目前应置为 0。
紧急 URG—— 当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
确认 ACK—— 只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。TCP规定,在连接建立后所有的传送报文段都必须把ACK置1。
推送 PSH (PuSH)—— 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
复位 RST (ReSeT) —— 当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
同步 SYN—— 同步 SYN = 1 表示这是一个连接请求或连接接受报文。
终止 FIN (FINis) —— 用来释放一个连接。FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
窗口字段—— 占2 字节,用来让对方设置发送窗口的依据,单位为字节。
紧急指针字段—— 占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
选项字段—— 长度可变。TCP 最初只规定了一种选项,即最大报文段长度MSS。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。
填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。
发送缓存与接收缓存的作用:
发送缓存用来暂时存放:
发送应用程序传送给发送方 TCP 准备发送的数据;
TCP 已发送出但尚未收到确认的数据。
接收缓存用来暂时存放:
按序到达的、但尚未被接收应用程序读取的数据;
不按序到达的数据。
4、TCP 的运输连接管理
运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。
TCP 连接的建立都是采用客户服务器方式。
主动发起连接建立的应用进程叫做客户(client)。
被动等待连接建立的应用进程叫做服务器(server)。
用三次握手建立 TCP 连接的各状态
四次挥手