本章重点:
计算机网络体系结构中的物理层、数据链路层以及网络层 共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信。
实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程。
如何为运行在不同主机 上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。
运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。
根据应用需求的不同, 因特网的运输层为应用层提供了两种不同的运输协议,即 面向连接的TCP 和 无连接的UDP,这两种协议是重点。
复用:
分用:
■ 运行在计算机上的进程使用进程标识符PID来标志。
■ 因特网上的计算机并不是使用统一的操作系统,不同的操作系统(windows, Linux, Mac OS)又使用不同格式的进程标识符。为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识。
■ TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程。
应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP | SNMP(trap) | HTTPS |
---|---|---|---|---|---|---|---|---|---|
熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 | 162 | 443 |
用户数据报协议UDP:
(User Datagram Protocol)
传输控制协议TCP:
(Transmission Control Protocol)
同 UDP和TCP的对比
用户数据报有两个字段:数据字段和首部字段。首部字段只有 8 个字节,并由 4 个字段组成,每个字段的长度都是 2 个字节。
理想的传输条件:
“ 停止等待 ”:每发送完一个分组就停止发送,等待对方确认。确认收到后再发送下一个分组。
出现差错,B没有给A反馈,所以需要A设置一个超时重传计时器,进行超时重传。
三点注意:
1.A必须暂时保留已发送分组的副本
2.分组和确认分组都必须进行编号
3.超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。
使用上述的确认和重传机制,可以在不可靠的传输网络上实现可靠的通信。
这种可靠传输协议称为自动重传请求ARQ。
ARQ的优点是简单,但信道利用率太低。
信道利用率U = TD / (TD + RTT + TA)
TD : A发送分组的时间
TA: B发送确认分组需要的时间
连续ARQ协议:发送方每收到一个确认,就把发送窗口向前滑动一个分组。
接收方采用累积确认的方式,对按序到达的最后一个分组发送确认。
优点:容易实现,即使确认丢失也不必重传
缺点:不能向发送方及时反应接收方已经正确收到所有分组的信息。
所以当通信线路质量不好时,连续ARQ协议会带来负面的影响。
滑动窗口协议是TCP的精髓,当然是放到TCP的可靠传输那里啦。
同 UDP和TCP的对比
为了实现可靠传输,TCP采用了面向字节流的方式。
但TCP在发送数据时,是从发送缓存取出一部分或全部字节并给其添加一个首部使之成为TCP报文段后进行发送。
一个TCP报文段由首部和数据载荷两部分构成;
源端口:占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程。
目的端口:占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程。
序号:占32比特,取值范围[0, 232 -1],序号增加到最后一个后,下一个序号就又回到0。
指本TCP报文段数据载荷的第一个字节的序号。
确认号:占32比特,取值范围[0, 232 -1],确认号增加到最后一个后,下一个确认号就又回到0。
指期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号, 同时也是对之前收到的所有数据的确认。
若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据。
数据偏移:占4比特,并以4字节为单位。
指TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远。
这个字段实际上是指出了TCP报文段的首部长度。
首部固定长度为20字节,因此数据偏移字段的最小值为(0101)2
首部最大长度为60字节,因此数据偏移字段的最大值为(1111)2
保留:占6比特,保留为今后使用,但目前应置为0。
确认标志位ACK:取值为1时确认号字段才有效;取值为0时确认号字段无效。
TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1。
同步标志位SYN:在TCP连接建立时用来同步序号。
SYN = 1 且 ACK = 0:连接请求报文段
SYN = 1 且 ACK = 1:同意建立连接,响应报文段
复位标志位RST:用来复位TCP连接。
当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接。
RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接。
复位标志位RST:用来复位TCP连接。
当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接。
RST置1还用来拒绝一个非法的报文段或拒绝打开-一个TCP连接。
紧急标志位URG:取值为1时紧急指针字段有效;取值为0时紧急指针字段无效。
紧急指针:占16比特,以字节为单位,用来指明紧急数据的长度。
当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。
窗口:占16比特,以字节为单位。指出发送本报文段的一方的接收窗口。
窗口值作为接收方让发送方设置其发送窗口的依据。
窗口字段明确指出了现在允许对方发送的数据量,窗口值经常在动态的变化着
这是以接收方的接收能力来控制发送方的发送能力,称为流量控制。
校验和:占16比特,检查范围包括TCP报文段的首部和数据载荷两部分。
在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。
选项:
■ TCP基于以字节为单位的滑动窗口来实现可靠传输。
■ 虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大。
■ 对于不按序到达的数据应如何处理,TCP并无明确规定。
■ TCP要求接收方必须有累积确认和捎带确认机制,这样可以减小传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。
■ TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此,每一方都有自己的发送窗口和接收窗口。在谈到这些窗口时,一定要弄清楚是哪一方的窗口。
TCP 使用超时重传来实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。
一个报文段从发送再到接收到确认所经过的时间称为往返时间 RTT,加权平均往返时间 RTTs 计算如下:
其中,0 ≤ a < 1,RTTs 随着 a 的增加更容易受到 RTT 的影响。
超时时间 RTO 应该略大于 RTTs,TCP 使用的超时时间计算如下:
其中 RTTd 为偏差的加权平均值。
一般来说, 我们总是希望数据传输得更快一些。
但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。
流量控制(flow control):让发送方的发送速率不要太快,要让接收方来得及接收。
利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
做拥塞(congestion):对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。
在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。
假定如下条件:
TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。
■ 发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化。
■ 发送方将拥塞窗口作为发送窗口swnd,即swnd = cwnd。
■ 维护一个慢开始门限ssthresh状态变量:
慢开始:是指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增长速度慢;
拥塞避免:并非指完全能够避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞;
下图是快重传
快重传:使发送方尽快进行重传,而不是等超时重传计时器超时再重传。
TCP的运输连接管理就是使运输连接的建立和释放都能正常地进行。