文章目录
3.1 运输层概述
- 物理层、数据链路层以及网络层共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信
- 但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程
- 如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议
- 运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道
- 根据应用需求的不同,运输层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP
3.2 运输层端口号、复用和分用
3.2.1 运输层端口号
- 运行在计算机上的进程使用进程标识符PID来标志
- 不同的操作系统(Windows、Linux、Mac OS)使用不同格式的进程标识符
- 为了使不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识。
- TCP/IP体系的运输层使用端口号来区分不同应用进程
- 端口号用16比特表示,取值范围0~65535
- 熟知端口号:0~1023,IANA把这些端口号派给最重要的一些应用协议,例如:FTP使用21/20,HTTP使用80,DNS使用53
- 登记端口号:1024~49151,为没有熟知端口号的应用进程使用。使用这些端口号必须在IANA按照规定的手续登记,以防止重复。例如:Microsoft RDP微软远程桌面使用的端口号是3389
- 短暂端口号:49152~65535,留给客户进程选择短暂使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他用户使用。
- 端口号只具有本地意义,即端口号是为了标识本计算机应用层中的各进程,在因特网中,不同计算机的相同端口号是没有联系的
- 端口号用16比特表示,取值范围0~65535
3.2.2 复用和分用
3.3 TCP和UDP的对比
用户数据报协议UDP(User Datagram Protocol)
传输控制协议TCP(Transmission Control Protocol)
3.4 TCP的流量控制
- 所谓流量控制(flow control)就是让发送方的发送速率不要太快,让接收方来得及接收。
- 利用滑动窗口机制可以很方便地实现TCP连接上对发送方的流量控制
- TCP接收方利用自己的接受窗口大小来限制发送窗口的大小
- TCP发送方收到接收方的零窗口通知时,应启动持续计时器。持续计时器超时后,向接收方发送零窗口探测报文
3.4.1 练习
3.5 TCP的拥塞控制
- 在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞(congestion).
- 在计算机网络中的链路容量(带宽)、交换结点中的缓存和处理机等,都是网络的资源
- 若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降
- 慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法(TCP Tahoe版本)
- 1990年增加了快重传和快恢复(TCP Reno版本),改进了TCP的性能
- 所谓快重传,就是让发送方尽快进行重传,而不是等超时重传计时器超时再重传
- 要求接收方不等待自己发送数据时才进行捎带确认,而是要立即发送确认
- 即使收到了失序的报文段也要立即发出对己收到的报文段的重复确认
- 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传
- 发送方一旦收到3个重复确认,就知道只是丢失了个别报文段。于是不启动慢开始算法,而执行快恢复算法。
- 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;开始执行拥塞避免算法。
- 也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一点,即等于新的ssthresh+3。
3.5.1 练习
3.6 TCP超时重传时间的选择
3.7 TCP可靠传输的实现
- TCP基于以字节为单位的滑动窗口来实现可靠传输
3.7.1 练习
3.8 TCP的运输连接管理
3.8.1 TCP的连接建立
-
TCP的连接建立要解决以下三个问题:
- 使TCP双方能够确知对方的存在
- 使TCP双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)
- 使TCP双方能够对运输实体(如缓存大小、连接表中的项目)进行分配
-
TCP使用"三报文握手"建立连接
3.8.2 TCP的连接释放
- TCP 使用"四报文挥手"进行连接释放
3.8.3 练习
3.9 TCP报文段的首部格式
- 为了实现可靠传输,TCP采用了面向字节流的方式
- 但TCP在发送数据时,是从发送缓存取出一部分或全部字节并给其添加一个首部使之成为TCP报文段后进行发送
- 一个TCP报文段由首部和数据载荷两部分构成
- TCP的全部功能都体现在它首部中各字段的作用