运输层
运输层向它上面的应用层提供通信服务。
真正通信的主体是主机中的一个进程和另一个主机的一个进程交换数据。网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。运输层向高层用户屏蔽了下面网络核心的细节,使应用进程看见的就好像在两个运输层实体之间有一条端到端的逻辑通信信道。
运输层两种协议:面向连接的TCP和无连接的UDP。
端口:是应用层的各种协议进程与运输实体进行层间交互的一种地址。运输层用一个16位端口号标志一个端口,因此
应用程序 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP | SNMP(trap) | HTTPS |
---|---|---|---|---|---|---|---|---|---|
熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 | 162 | 443 |
UDP用户数据报协议(User datagram protocol)
无连接、尽最大努力交付、面向报文、没有拥塞控制、支持一对一一对多多对一多对多的交互通信、首部开销小。
发送数据前不需要建立连接。
不保证可靠交付。
处理报文时,既不合并也不拆分,保留报文的边界,加上首部后就向下传,或去除首部后就向上交付。因此报文数据部分长度就是应用程序发送数据的长度
首部只有8个字节。
伪首部仅仅是为了计算检验和,把首部和数据部分一起检验:二进制反码计算加法的方式。
伪首部中的17表示是UDP的协议。
TCP传输控制协议(Transmission control protocol)动画详解TCP,超级厉害
面向连接、点对点、可靠交付、全双工通信、面向字节流。
在使用TCP协议前必须先建立TCP连接。
每条TCP连接只能有两个端点。
通过TCP连接传送的数据,无差错、不丢失、不重复、按序到达。
允许通信双方的应用进程在任何时候都能发送数据。
TCP把应用程序交下来的数据看成一连串无结构的字节流。根据对方给出的窗口值和当前网络拥塞程度确定一个报文段应该包含多少个字节。
TCP连接的端点叫做套接字(Socket)。$套接字 socket=(IP地址:端口号)$
每一条TCP连接唯一地被通信两端的两个端点所确定。$TCP连接::={socket_1,socket_2}={(IP_1:port_1),(IP_2:port_2)}$
停止等待协议
正常情况:每发送完一个分组就停止发送,等待对方确定,在收到确认后再发送下一个分组。
出错情况:当发送方A发送数据M1后等待收到确认时,若B接收M1检测出了差错,就丢弃M1,A超过了一段时间(超时计时器)仍然没有收到确认,就认为刚才发送的分组丢失,因此重传前面发送过的分组(超时重传)。
确认丢失:如果B再次收到A的信息,以前正常收到过就丢弃重复分组,然后发送确认。A如果以前收到过B的确认,那么收到确认后丢弃即可。
缺点:信道利用率过低。
信道利用率计算$U=\frac{T_D}{T_D+RTT+T_A}$。
其中$T_D$是A发送分组需要的时间,等于分组长度除以数据率。$T_A$是B发送确认分组的时间,RTT是往返时间。
ARQ(Automatic Repeat request)自动重传请求:接收方不需要请求发送方重传某个出错的分组。
连续ARQ协议
发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方一般采用累积确认的方式,对按序到达的最后一个分组发送确认。
TCP报文格式
序号:在TCP连接中传送的字节流中的每一个字节都按顺序编号。
确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认号=N,表明到序号N-1为止的所有数据都已正确接收。
数据偏移:数据部分起始处的位置。
紧急URG:=1表明此报文段中有紧急数据,应尽快传送
确认ACK:=1时确认号才有效,在连接建立后所有传送的报文段必须把ACK置为1。
推送PSH:当两个应用进程进行交互式通信时,一端的应用进程希望在键入一个命令后立即能够接收到对方的响应,而不是等整个缓存都填满后再向上交付。
复位PST:=1表示TCP连接出现严重差错,必须释放连接,再重新建立连接。
同步SYN:再连接建立时用来同步序号。SYN=1&&ACK=0,表示是一个连接请求报文。SYN=1&&ACK=1,同意建立连接。
终止FIN:=1时表明此报文段的发送方数据发送完毕,要求释放运输链接。
窗口:接收方让发送方设置其发送窗口的依据。允许对方发送的数据量,经常在动态变化着。
检验和:和UDP计算检验和一样,也需要加入伪首部。
紧急指针:URG=1时有效,指出本报文段中的紧急数据字节数。
最大报文段长度MSS:每一个TCP报文段中数据字段的最大长度。
TCP的可靠传输
以字节为单位的滑动窗口:凡是已经发送过的数据,在未收到确认前都必须暂时保留,以便在超时重传时使用。因为TCP的累积确认,当收到一个确认号,则证明在此之前的所有序号均接收成功。
发送缓存:
- 发送应用程序传送给发送方TCP准备发送的数据
- TCP已发送但尚未收到确认的数据
接收缓存:
- 按序到达的、但尚未被接收应用程序读取的数据
- 未按序到达的数据
超时重传时间选择:RTO(Retransmission Time-Out)=$RTT_s+4\times RTT_D$。
其中$RTT_S=(1-\alpha)\times(旧RTT_s)+\alpha\times(新RTT样本)$。RTT表示报文段往返时间,每一次的测量都基座一个样本。$\alpha\in[0,1)$,一般取0.125。
而$RTT_D$是RTT的偏差的加权平均值,第一次测量时,$RTT_D$值取测量到的RTT样本值的一般,以后的测量中,使用如下公式计算:$新RTT_D=(1-\beta)\times(旧RTT_D)+\beta\times|RTT_s-新RTT样本|$。$\beta\in[0,1)$,一般取0.25。
TCP的流量控制
让发送方的发送速率不要太快,让接收方来得及接收。TCP的接收窗口的单位是字节。
TCP的拥塞控制
若网络中有许多资源同时呈现供应不足,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。
拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量。窗口大小取决于网络的拥塞程度,并动态变化。
慢开始:当主机开始发送数据时,因不清楚网络的负荷情况,所以先探测一下,由小到大逐渐增大发送窗口。cwnd变化:1->2->4等等
拥塞避免:设置慢开始门限ssthresh。当cwnd>ssthresh,使用拥塞避免,让cwnd缓慢增大,每次增加1。
网络拥塞:当网络出现超时,ssthresh=cwnd/2,然后进入慢开始阶段
快恢复:个别报文段在网络中丢失,但实际上网络并未发生拥塞。只要发送方一连收到3个重复确认,应当立即进行重传。采用快恢复:ssthresh=cwnd/2,cwnd=ssthresh。然后继续拥塞避免阶段。
发送方窗口的上限值=Min[rwnd,cwnd],其中rwnd为接收窗口大小,cwnd为拥塞窗口大小。
TCP连接建立
三报文握手。
TCP连接释放
四次挥手
其中MSL为最长报文段寿命。