《计算机网络(第七版)-谢希仁》 第5章 运输层(上)
运输层协议的特点,进程之间的通信和端口等概念,UDP协议和TCP协议等相关基础概念。
运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。也就是说,端到端的通信是应用进程之间的通信。
运输层有一个很重要的功能:复用(multiplexing)和分用(demultiplexing)。
网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。运输层还要对收到的报文进行差错检测。
两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元 TPDU (Transport Protocol Data Unit)。但在TCP/IP体系中,则根据所使用的协议是TCP或 UDP,分别称之为TCP报文段(segment)或UDP用户数据报。
UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式。
TCP则提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销,这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
复用:应用层所有的应用进程都可以通过运输层再传送到IP层(网络层)
分用:运输层从IP层收到发送给各应用进程的数据后,必须分别交付指明的各应用进程
运输层使用协议端口号(protocol port number),或通常简称为端口(port)。软件端口
服务器端使用的端口号
登记端口号,数值为1024〜49151
数值为49152〜65535,仅在客户进程运行时才动态选择,因此又叫做短暂端口号。
用户数据报UDP有两个字段:数据字段和首部字段。首部字段有8个字节,由四个字段组成,每个字段的长度都是两个字节。
伪首部既不向下传送也不向上递交,而仅仅是为了计算检验和。
UDP的检验和是把首部和数据部分一起都检验。
TCP连接的端点叫做套接字(socket)或插口,端口号拼接到(concatenated with) IP地址即构成了套接字。
信道利用率
停止等待协议的优点是简单,但缺点是信道利用率太低。
当使用流水线传输时,就要使用下面介绍的连续ARQ协议和滑动窗口协议。
接收方一般都是采用累积确认的方式,在收到几个分组后,对按序到达的最后一个分组发送确认。
优点是:容易实现,即使确认丢失也不必重传。
缺点:不能向发送方反映出接收方己经正确收到的所有分组的信息。
一个TCP报文段分为首部和数据两部分,报文段首部的前20个字节是固定的,后面有4n字节是根据需要而增加的选项,因此TCP首部的最小长度是20字节。
源端口和目的端口
序号占4字节
序号范围是[0, 2^32^ - 1],共2^32^ (即4294967296)个序号。序号增加到2^32^ - 1后,下一个序号就又回到0。也就是说,序号使用mod 2^32^运算。
TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则指的是本报文段所发送的数据的第一个字节的序号。
例如,一报文段的序号字段值是301,而携带的数据共有100 字节。这就表明:本报文段的数据的第一个字节的序号是301,最后一个字节的序号是400。显然,下一个报文段(如果还有的话)的数据序号应当从401开始,即下一个报文段 的序号字段值应为401。这个字段的名称也叫做“报文段序号”。
确认号 占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。
若确认号 = N,则表明:到序号N-1为止的所有数据都已正确收到。
数据偏移 占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,实际上是指出TCP报文段的首部长度。
“数据偏移”的单位是32位字(即以4字 节长的字为计算单位)。由于4位二进制数能够表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度(即选项长度不能超过40字节)
保留 占6位,保留为今后使用,但目前应置为0
紧急URG (URGent) 当URG = 1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)
确认ACK (ACKnowledgment) 仅当ACK = 1时确认号字段才有效。当ACK = 0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。
推送PSH (PuSH) 发送方TCP把PSH置1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快地(即“推送”向前)交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
复位RST (ReSeT) 当RST = 1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。
同步SYN (SYNchronization) 在连接建立时用来同步序号,SYN置为1就表示这是一个连接请求或连接接受报文
终止FIN(FINis) 用来释放一个连接。当FIN = 1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
窗口 占2字节。窗口值是[0, 2^16^ - 1]之间的整数。窗口指的是发送本报文段的 一方的接收窗口(而不是自己的发送窗口)。
窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据。
窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化着。
检验和 占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
紧急指针 占2字节。紧急指针仅在URG = 1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据),即使窗口为零时也可发送紧急数据。
选项长度可变,最长可达40字节。当没有使用“选项“时,TCP的首部长度是20字节。
最大报文段长度MSS (Maximum Segment Size)、窗口扩大选项、时间戳选项、选择确认(SACK)等。