计算机网络(第8版)-第5章 运输层

5.1 运输层协议概述

5.1.1 进程之间的通信

图5-1 中两个运输层之间有一个深色双向粗箭头,写明"++运输层提供应用进程间的逻辑通信++"。

图5-1 运输层为相互通信的应用进程提供了逻辑通信

5.1.2 运输层的两个主要协议

5.1.3 运输层的端口

请注意,这种在协议栈层间的抽象的协议端口是软件端口 ,和路由器或交换机上的硬件端口是完全不同的概念。硬件端口是不同硬件设备 进行交互的接口,而++软件端口是应用层的各种协议进程与运输实体进行层间交互的地点++。

客户在发起通信请求时,必须先知道对方服务器的 IP 地址(用来找到目的主机)和端口号(用来找到目的进程)。因此运输层的端口号分为下面的两大类。

(1)服务器端使用的端口号 这里又分为两类,最重要的一类叫作++熟知端口号++ (well-known port number)++或全球通用端口号 ,数值为 0~1023++

应用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP SNMP(trap) HTTPS
熟知端口号 21 23 25 53 69 80 161 162 443
[表5-2 常用的熟知端口号]

另一类叫作登记端口号,数值为 1024~49151。这类端口号是为没有熟知端口号的应用程序使用的。

(2)客户端使用的端口号 数值为 49151~65535。由于这类端口号仅在客户进程运行时才动态选择,因此又叫作短暂端口号

5.2 用户数据报协议 UDP

5.2.1 UDP 概述

++UDP 的主要特点是++:简单方便,但不可靠(多应用类型)

(1)UDP 是++无连接++ ,即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。

(2)UDP 使用++尽最大努力交付++,即不保证可靠交付,因此主机不需要维持复杂的连接状态表(这里面有许多参数)。

(3)UDP 是++面向报文++ 的。发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界

(4)UDP ++没有拥塞控制++,因此网络出现的拥塞不会使源主机的发送速率降低。

(5)UDP ++支持一对一、一对多、多对一和多对多的交互通信++。

(6)++UDP 的首部开销小,只有 8 个字节++,比 TCP 的 20 个字节的首部要短。

5.2.2 UDP 的首部格式

UDP 计算检验和的方法和计算 IP 数据报首部检验和的方法相似。但不同的是:IP 数据报的检验和只检验 IP 数据报的首部,但 ++UDP 的检验和是把首部和数据部分一起都检验++

5.3 传输控制协议 TCP 概述

5.3.1 TCP 最主要的特点

(1)TCP 是**++面向连接++的运输层协议**。

(2)每一条 TCP 连接++只能有两个端点++ (endpoint),每一条 TCP 连接只能是++点对点++的(一对一)。

(3)TCP 提供**++可靠交付++** 的服务。++通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达++。

(4)TCP 提供**++全双工++通信**。TCP 允许通信双方的应用进程在任何时候都能发送数据。

(5)面向字节流 。TCP 中的" "(stream)指的是流入到进程或从进程流出的++字节序列++ 。"面向字节流"的含义是:虽然应用程序和 TCP 的交互式一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流

5.3.2 TCP 的连接

5.4 可靠传输的工作原理

5.4.1 停止等待协议

全双工通信的双方既是发送方也是接收方。 下面为了讨论问题的方便,我们仅考虑 A发送数据而 B 接收数据并发送确认。因此 A 叫做发送方 ,而 B 叫做接收方 。因为这里是讨论可靠传输的原理,因此把传送的数据单元都称为分组,而并不考虑数据是在哪一个层次上传送的 。"停止等待"就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。

1. 无差错情况

2. 出现差错

3. 确认丢失和确认迟到

4. 信道利用率 (优点:简单**;**缺点:信道利用率太低)

5.4.2 连续 ARQ 协议

5.5 TCP 报文段的首部格式

++TCP 报文段首部的前 20 个字节是固定的++ (如图5-13 所示),++后面有 4n 字节是根据需要而增加的选项(n 是整数)++ 。因此 ++TCP 首部的最小长度是 20 字节++。

首部固定部分各字段的意义如下:

(1)源端口目的端口

(2)序号

++首部中的序号字段 值则指的是本报文段 所发送的数据的第一个字节的序号++

(3)++确认号 占 4 字节,是期望收到 对方下一个报文段的第一个 数据字节序号**++。

若确认号 = N,则表明:到序号 N-1 为止的所有数据都已正确收到。

(4)数据偏移

(5)保留

(6)紧急 URG(URGent)

(7)确认 ACK(ACKnowledgment)

(8)推送 PSH(PuSH)

(9)复位 RST(ReSeT)

(10)同步 SYN(SYNchronization)

(11)终止 FIN(FINish,意思是"完了""终止")

(12)窗口

(13)检验和

(14)紧急指针

(15)选项

TCP 最初只规定了一种选项, 即最大报文段长度 MSS (Maximum Segment Size) [RFC879]。请注意MSS这个名词的含义。++MSS是每一个 TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段++。

5.6 ++TCP 可靠传输的实现++

5.6.1 ++以字节为单位的滑动窗口++

5.6.2 超时重传时间的选择

5.6.3 选择确认 SACK

5.7 TCP 的流量控制

5.7.1 利用滑动窗口实现流量控制

++流量控制++ (flow control)++就是让发送方的发送速率不要太快,要让接收方来得及接收++。

5.7.2 TCP 的传输效率

5.8 TCP 的拥塞控制

5.8.1 拥塞控制的一般原理

在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。++在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫作拥塞(congestion)++。可以把出现网络拥塞的条件写成如下的关系式:

Σ对资源的需求 > 可用资源 (5-7)

拥塞控制 就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不至于过载 。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷 。++拥塞控制是一个++ **++全局性的过程++,**涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。

5.8.2 TCP 的拥塞控制方法

TCP 进行拥塞控制的算法有四种:即慢开始 (slow-start)、拥塞避免 (congestion avoidance)、快重传 (fast retransmit)、快恢复(fast recovery)(见草案标准 RFC 5681)。下面就介绍这些算法的原理。为了集中精力讨论拥塞控制,我们假定:

(1)数据是单方向传送的,对方只传送确认报文。

(2)接收方向总是有足够大的缓存空间,因而发送窗口的大小由网络的拥塞程度来决定。

1. 慢开始和拥塞避免

拥塞避免 算法的目的是让拥塞窗口 cwnd 缓慢地增大(具体算法见[RFC 5681])。执行算法后的结果大约是这样的:每经过一个往返时间 RTT,发送方的拥塞窗口 cwnd 的大小就加1,而不是像慢开始阶段那样加倍增长。因此在拥塞避免阶段就称为"加法增大 "AI (Additive Increase),++表明在拥塞避免阶段,拥塞窗口 cwnd 按线性规律缓慢增长++。

但请注意,++"拥塞避免"并非完全避免拥塞,而是让拥塞窗口增长得缓慢些,使网络不容易出现拥塞++。

5.8.3 主动队列管理 AQM

5.9 TCP 的运输连接管理

5.9.1 TCP 的连接建立

++TCP 建立连接的过程叫作握手,握手需要在客户和服务器之间交换三个 TCP 报文段++。图5-28 画出了三报文握手建立 TCP 连接的过程。

图5-28 用三报文握手建立 TCP 连接

上面给出的++连接 建立过程叫作三报文握手++ 。请注意,在图5-28 中 B 发送给 A 的报文段,也可拆成两个报文段。可以先发送一个确认报文段(ACK = 1,ack = x + 1),然后再发送一个同步报文段(SYN = 1,seq = y)。++这样的过程就变成了四报文握手(释放连接)++,但效果是一样的。

为什么 A 最后还要发送一次确认呢?这主要是++为了防止已失效的连接请求报文段突然又传送到了 B,因而产生错误++。

5.9.2 TCP 的连接释放

5.9.3 TCP 的有限状态机

本章的重要概念

习题

相关推荐
哲伦贼稳妥36 分钟前
一天认识一个硬件之机房地板
运维·网络·经验分享·其他
qq_421833671 小时前
计算机网络——ftp
计算机网络
ZachOn1y2 小时前
计算机网络:物理层 —— 物理层下的传输媒体
计算机网络·传输媒体·知识点汇总
hgdlip2 小时前
如何快速切换电脑的ip地址
网络·tcp/ip·电脑
程序员-珍4 小时前
虚拟机ip突然看不了了
linux·网络·网络协议·tcp/ip·centos
4647的码农历程4 小时前
Linux网络编程 -- 网络基础
linux·运维·网络
向李神看齐4 小时前
RTSP协议讲解
网络
Death2005 小时前
使用Qt进行TCP和UDP网络编程
网络·c++·qt·tcp/ip
魏大橙5 小时前
linux RCE本地/公网测试
网络·网络协议·udp
陈逸轩*^_^*5 小时前
Java 网络编程基础
java·网络·计算机网络