进程间的通信
从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,也是用户功能中的最低层。
通信的真正端点不是主机而是主机中的进程。网络层为主机之间提供逻辑通信,运输层提供应用进程间端到端的逻辑通信。
运输层的两个主要协议
两个对等运输实体在通信时传送的数据单元叫做运输协议数据单元。
用户数据报协议 UDP:一个数据包就能完成数据通信,不建立会话,支持多播。
传输控制协议 TCP:提供可靠的、面向连接的服务,分段传输、编号、流量控制、建立会话,增加了很多开销,比如:确认、流量控制、计时器及连接管理。
TCP/IP 体系中的运输层协议
运输层的端口
在协议栈层间的抽象的协议端口是软件端口,和硬件端口是完全不同的。硬件端口是不同硬件设备进行交互的端口,而软件端口是应用间的各种协议进程与运输实体进行层间交互的一种地址。
服务器端使用的端口
分为两类:
一类是熟知端口号或者说系统端口号,常用的熟知端口号有:
应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP | SNMP(trap) | HTTPS |
---|---|---|---|---|---|---|---|---|---|
熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 | 162 | 443 |
另一类叫做登记端口号,数值在 1024~65535
客户端使用的端口号
数值是 49152~65535,又称为短暂端口号。
查看自己计算机侦听的端口:netstat -an
测试远程计算机打开的端口:telnet IP 地址
UDP 的首部格式
用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段很简单,只有 8 个字节,由四个字段组成,每个字段的长度都是两个字节。各字段有:
TCP 最主要的特点
TCP 的连接
TCP 把连接作为最基本的抽象
每一条 TCP 连接有两个端点。TCP 连接的端点不是主机、IP 地址、应用程序,而是套接字。
套接字 socket=(IP 地址:端口号)
TCP 连接::={socket, socket}={(IP1: port1), (IP2: port2)}
停止等待协议
确认丢失和确认迟到
使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。这种可靠传输协议常称为自动重传请求 ARQ。
ARQ 表明重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组。
信道利用率
停止等待协议的优点是简单,但是缺点是信道利用率太低。
信道利用率 U=TD/TD+RTT+TA。
流水线传输
发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。
由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率。
连续 ARQ 协议
TCP 报文首部的前 20 个字节是固定的。
发送缓存用来暂时存放
接收缓存用来暂时存放
以字节为单位的滑动窗口
重传时间的选择
TCP 采用了一种自适应算法,记录一个报文段发出的时间,以及收到相应确认的时间。这两个时间差就是报文段的往返时间 RTT。TCP 保留了 RTT 的一个加权平均往返时间 RTTs(平滑的往返时间)。
新的 RTTs=(1 - a)*(旧的 RTTs)+a+(+(新的 RTT 样本)
超时计时器设置的超时重传时间 RTO应略大于上面得出的加权平均往返时间 RTTs。RFC6298 建议使用下式计算 RTO:
RTO=RTTs+4*RTTD
Karn 提出了一个算法:在计算加权平均 RTTs 时,只要报文段重传了,就不采用其往返时间样本。这样得出的加权平均 RTTs 和 RTO 就较准确。
所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
发送方的发送窗口不能超过接收方给出的接收窗口的数值。TCP 的窗口单位是字节,不是报文段。
利用可变窗口进行流量控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞。即对资源的需求 > 可用资源
网络拥塞往往是由多种因素引起的。例如,当某个结点缓存的容量太小时,到达该结点的分组因无存储空间暂存而不得不丢弃。
拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。并且拥塞是一个全局性的过程。流量控制往往是指点对点通信量的控制,是一个端到端的问题。
下图中横坐标是提供的负载,表示单位时间内输入网络的分组数目。纵坐标是吞吐量,表示单位时间内从网络输出的分组数目。
拥塞控制所起的作用
发送方维持一个 拥塞窗口 cwnd:
慢开始算法的原理
慢开始和拥塞避免算法的实现
慢开始门限的初始值设置为 16 个报文段,即 ssthresh=16
但是“拥塞避免”并非指完全能够避免了拥塞,只是在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
快重传
当接收方发现没有按顺序接收时,就判断出现了丢包现象,有可能出现了拥塞,立即通知发送方重新发送,连续发送三个重复的确认。
从连续收到三个重复的确认转入拥塞避免
一旦出现了拥塞,发送方调整门限值,ssthresh=cwnd/2,拥塞窗口直接从新的慢开始门限开始加法增加,即设置拥塞窗口 cwnd=ssthresh,这就是快恢复。
发送方的发送窗口的上限值应当取为接收方窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确认:发送窗口的上限值 =Min[rwnd, cwnd]
最简单的情况下,路由器的队列通常是按照“先进先出”的规则处理到来的分组。
为了避免发生网络中的全局同步现象,1998 年提出了主动队列管理 AQM。所谓“主动”就是不要等到路由器的队列长度已经达到最大值时才不得不丢弃后面到达的分组。可以有不同的时限方法,可以使用随机早期检测 RED。
运输连接有三个阶段,即连接建立、数据传送、连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。
TCP 连接的建立采用客户服务器方式。主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫做服务器。
TCP 的连接建立:三次握手
例如:
三次握手建立 TCP 连接的各状态
TCP 连接释放:四次挥手
释放连接的各状态(TCP 连接必须经过时间 2MSL 后才真正释放掉)