导图社区 《计网》第五章-传输层
这是一篇关于《计网》第五章-传输层的思维导图,主要内容有传输层提供的服务、UDP协议、TCP协议。
编辑于2022-08-30 13:56:44 上海传输层

传输层提供的服务
传输层的功能
1)传输层提供应用进程之间的逻辑通信(即端到端通信),网络层提供的是主机之间的逻辑通信
2)复用和分用

复用是指发送方不同的应用进程都可使用同一个传输层协议传送数据;
分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程
3)传输层对收到的报文进行差错检测(首部和数据部分),而网络层只检查IP数据报的首部,不检验数据部分是否出错
4)提供两种不同的传输协议,即面向连接的TCP和无连接的UDP;而网络层无法同时实现两种协议(网络层要么只提供面向连接的服务,如虚电路;要么只提供无连接服务,如数据报,而不可能同时存在这两种方式)
传输层的寻址与端口
端口的概念
1)端口是传输层服务访问点(TSAP),类似于网络层的IP地址和数据链路层的MAC地址
2)端口用于标识主机中的应用进程,能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,并让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程
端口号
应用进程通过端口号进行标识,其长度为16bit,能够标识65536个不同端口号
分类
服务端使用的端口号(0~49151)
熟知端口号(0~1023):IANA分派给重要的应用程序
登记端口号(1024~49151):使用时必须在IANA登记,以防止重复
客户端使用的端口号(49152~65535)
又称短暂端口号(临时端口),仅在客户进程运行时才动态选择,通信结束后就释放给其他进程使用
套接字
套接字Socket=(IP地址:端口号)
唯一标识网络中的一台主机和其上的一个应用进程
无连接服务和面向连接服务

面向连接的传输控制协议(TCP)
1)在传送数据之前必须先建立连接,数据传送结束后要释放连接,且TCP不提供广播或组播服务
2)由于TCP提供面向连接的可靠传输服务,因此不可避免地增加了许多开销,如确认、流量控制、计时器及连接管理等。这不仅使协议数据单元的头部增大很多,还要占用许多的处理机资源。因此TCP主要适用于可靠性更重要的场合,如文件传输协议(FTP)、超文本传输协议(HTTP)、远程登录(TELNET)等。
无连接的用户数据报协议(UDP)
UDP是一个无连接的非可靠传输层协议。它在IP之上仅提供两个附加服务:多路复用和对数据的错误检查。IP知道怎样把分组投递给一台主机,但不知道怎样把它们投递给主机上的具体应用。UDP在传送数据之前不需要先建立连接,远程主机的传输层收到UDP报文后,不需要给出任何确认。由于UDP比较简单,因此执行速度比较快、实时性好。使用UDP的应用主要包括小文件传送协议(TFTP)、DNS、SNMP和实时传输协议(RTP)。
若用户程序使用UDP进行数据传输,则应用层协议必须承担可靠性方面的全部工作
UDP协议
UDP数据报
优点

1)UDP无须建立连接。因此UDP不会引入建立连接的时延。试想如果DNS运行在TCP而非UDP上,那么 DNS 的速度会慢很多。HTTP使用TCP而非UDP,是因为对于基于文本数据的Web 网页来说,可靠性是至关重要的。
2)无连接状态。TCP需要在端系统中维护连接状态。此连接状态包括接收和发送缓存、拥塞控制参数和序号与确认号的参数。而UDP不维护连接状态,也不跟踪这些参数。因此,某些专用应用服务器使用UDP时,一般都能支持更多的活动客户机。
3)分组首部开销小。TCP有20B的首部开销,而UDP仅有8B的开销。
4)应用层能更好地控制要发送的数据和发送时间。UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率。某些实时应用要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,而UDP正好满足这些应用的需求。
5)UDP支持一对一、一对多、多对一和多对多的交互通信。
UDP的首部格式
1)源端口。源端口号。在需要对方回信时选用,不需要时可用全0。
2)目的端口。目的端口号。这在终点交付报文时必须使用到。
3)长度。UDP数据报的长度(包括首部和数据),其最小值是8(仅有首部)。
4)校验和。检测UDP数据报在传输中是否有错。有错就丢弃。该字段是可选的,当源主机不想计算校验和时,则直接令该字段为全0。
基于端口的分用
当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应端口上交给应用进程
若接收方UDP发现报文中的目的端口号不正确,就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方
UDP校验
伪首部组成
伪首部仅在计算检验和时才出现,不向下传送也不向上递交
协议字段为17,代表采用UDP协议
长度字段=UDP首部8B+数据部分长度(不包括伪首部)
校验过程
发送端
1)添上伪首部
2)全0填充检验和字段
3)全0填充数据部分(若UDP数据报部分的长度不是偶数个字节,需填入一个全0字节)
4)伪首部+首部+数据部分采用二进制反码求和
二进制反码求和规则:两个数进行二进制反码求和的运算,它的规则是从低位到高位逐列进行计算。 0和0相加是0但要产生一个进位1,0和1相加是1,1和1相加是0。 若最高位相加后产生进位,则最后得到的结果要加1。
5)把和继续取反码填入检验和字段
6)去掉伪首部,发送
接收端
1)添上伪首部
2)伪首部+首部+数据部分采用二进制反码求和
3)结果全为1则无差错,否则丢弃数据报/交给应用层附上出差错的警告
TCP协议
特点
1)TCP是面向连接的传输层协议,TCP连接是一条逻辑连接。
2)每条TCP连接只能有两个端点,每条TCP连接只能是端到端的(进程对进程)。
3) TCP提供可靠交付的服务,保证传送的数据无差错、不丢失、不重复且有序。
4)TCP提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据,为此TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
发送缓存用来暂时存放以下数据
①发送应用程序传送给发送方TCP准备发送的数据;
②TCP已发送但尚未收到确认的数据。
接收缓存用来暂时存放以下数据
①按序到达但尚未被接收应用程序读取的数据;
②不按序到达的数据。
5)TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅视为一连串的无结构的字节流。
TCP报文段
概念
TCP传送的数据单元称为报文段,用于运载数据、建立连接、释放连接和应答
一个TCP报文段分为首部和数据量部分,首部的前20B是固定的,后续4N字节的可选项(即长度为4B的整数倍)
组成字段
1)源端口和目的端口,各占2B
端口是运输层与应用层的服务接口,运输层的复用和分用功能都要通过端口实现。
2)序号seq,占4B
范围为0~2^32-1,共2^32个序号。TCP是面向字节流的(即TCP传送时是逐个字节传送的),所以TCP连接传送的字节流中的每个字节都按顺序编号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。
例如,一报文段的序号字段值是301,而携带的数据共有100B,表明本报文段的数据的最后一个字节的序号是400,因此下一个报文段的数据序号应从401开始。
3)确认号,占4B
期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则表明到序号N-1为止的所有数据都已正确收到。
例如,B正确收到了A发送过来的一个报文段,其序号字段是501,而数据长度是200B(序号501~700),这表明B正确收到了A发送的到序号700为止的数据。因此B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701。
4)数据偏移(即首部长度),占4位
这里不是IP数据报分片的那个数据偏移,而是表示首部长度(首部中还有长度不确定的选项字段),它指出 TCP 报文段的数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位是32位(以4B为计算单位)。由于4位二进制数能表示的最大值为15,因此TCP首部的最大长度为60B。
5)保留,占6位,保留为今后使用,但目前应置为0。
6)紧急位URG
当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。但URG需要和首部中紧急指针字段配合使用,即数据从第一个字节到紧急指针所指字节就是紧急数据。
7)确认位ACK
仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。 TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
8)推送位PSH (Push)
接收方TCP收到PSH=1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
9)复位位RST (Reset)
当RST= 1时,表明TCP连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
10)同步位SYN
当SYN=1时表示这是一个连接请求或连接接受报文。
当SYN=1, ACK =0时,表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使用SYN=1, ACK=1.
11)终止位FIN (Finish)
用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
12)窗口,占2B
范围为0~ -2^16-1。它指出现在允许对方发送的数据量,接收方的数据缓存空间是有限的,因此用窗口值作为接收方让发送方设置其发送窗口的依据。
例如,设确认号是701,窗口字段是1000。这表明,从701号算起,发送此报文段的一方还有接收1000字节数据(字节序号为701-1700)的接收缓存空间。
13)校验和,占2B
校验和字段检验的范围包括首部和数据两部分。在计算校验和时,和UDP一样,要在TCP报文段的前面加上12B的伪首部(只需将UDP伪首部的第4个字段,即协议字段的17改成6,其他的和UDP一样)。
14)紧急指针,占2B
紧急指针仅在URG= 1时才有意义,它指出在本报文段中紧急数据共有多少字节(紧急数据在报文段数据的最前面)。
15)选项,长度可变
TCP最初只规定了一种选项,即最大报文段长度(Maximum Segment Size,MSS)。MSS是TCP报文段中的数据字段的最大长度(注意仅仅是数据字段)。

16)填充。这是为了使整个首部长度是4B的整数倍。
TCP连接管理
概述
1)TCP连接有三个阶段:连接建立、数据传送和连接释放
2)TCP连接的端口为套接字(Socket)
两个主机的某两个端口间最多仅能建立一条TCP连接
3)TCP连接的建立采用客户/服务器模式;主动发起连接建立的应用进程称为客户(Client),而被动等待连接建立的应用进程称为服务器(Server)
TCP连接的建立(三次握手)
三次握手本质上是为了解决网络信道不可靠的问题,在不可靠的信道上建立可靠的连接,防止已经失效的请求报文又传到服务器,导致两端状态不一致的问题(如果仅有两次握手,那么服务端会认为有两个连接,但客户端认为仅一个连接)。 
连接建立前,服务器进程处于LISTEN(收听)状态,等待客户的连接请求
1)客户机的TCP首先向服务器的TCP发送连接请求报文段。其中首部的同步为SYN置1,并选择一个初始序号seq=x。SYN报文段不能携带数据,但要消耗一个序号,这时,TCP客户进程进入SYN-SENT(同步已发送)状态
2)服务器的TCP收到连接请求报文段后,若同意建立连接,则向客户机发回确认,并为该TCP连接分配缓存和变量。在确认报文段中,置SYN位和ACK位为1,确认号ack=x+1,并为自己选择一个初始序号seq=y。确认报文段不能携带数据,但要消耗一个序号,这时,TCP服务器进程进入SYN-RCVD(同步收到)状态
3)当客户机收到确认报文段后,再向服务器给出确认,并未该TCP连接分配缓存和变量。确认报文段的ACK置为1,确认号ack=y+1,序号seq=x+1。该报文段可以携带数据,若不携带则不消耗序号。这时,TCP客户进程进入ESTABLISHED(已建立连接)状态
TCP连接的释放(四次握手)
 
1)客户机打算关闭连接,相器TCP发送连接释放报文段,主动关闭TCP。该报文段的终止位FIN置1,序号seq=u(等于之前传送数据的最末字节序号加1),消耗一个序号。这时,TCP客户进程进入FIN-WAIT-1(终止等待1)状态,由于TCP是全双工的,故服务端仍能发送数据
2)服务端发出确认,确认号ack=u+1,序号seq=v(等于前面传送过的最末字节的序号加1),服务器进入CLOSE-WAIT(关闭等待)状态。此时,从客户端到服务端方向的连接彻底关闭,但服务器仍能向客户机发送数据
3)若服务器没有要发送的数据,发出FIN=1的连接释放报文,其序号seq=w,ack=u+1,这时服务器进入LAST-ACK(最后确认)状态
4)客户机发出确认,ACK置1,确认好ack=w+1,序号seq=u+1。此时TCP连接还未释放,等待2MSL(最长报文段寿命)后,客户机进入CLOSED(连接关闭)状态
等待状态是为了保证服务端已收到ACK包。假设客户端发送ACK就关闭,但ACK包丢失,则服务端将一直处在最后确认状态;若客户端未关闭,这时服务端因未收到ACK包而重发FIN包,客户端响应FIN包,重发ACK包并刷新等待时间。本质上也是为了在不可靠的网络链路中进行可靠的连接断开。
TCP可靠传输
TCP使用校验、序号、确认和重传机制实现可靠数据传输服务,保证接收方进程从缓存区读出的字节流与发送方发出的字节流完全一样;其中,校验机制与UDP相同
序号
TCP将数据视为无结构的有序字节流,首部的序号字段指代表本报文段所发送数据的第一个字节的序号
确认
1)TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号
2)发送方缓存区会继续存储那些已发送但未收到确认的报文段,以便在需要时重传
3)TCP使用累计确认,即只确认数据流中至第一个丢失字节为止的字节
重传
1)超时
TCP每发送一个报文段,就对其设置一次计时器,若设置的重传时间到期但仍未收到确认,则重传该报文段
TCP采用自适应算法调整计时器的重传时间,
TCP维护RTT(往返时间)的加权平均值
超时重传时间RTO应略大于RTT的均值
2)冗余ACK(冗余确认)
当接收方收到比期望序号大的失序报文段时,将发送冗余ACK,指明下一个期望字节的序号
当发送方收到对同一报文段的3个冗余ACK时,判定其丢失,执行重传,也称快速重传
TCP流量控制
TCP提供一种基于滑动窗口协议的流量控制机制,用以协调发送方发送速率与接收方读取速率,避免接收方缓存区溢出

原理
1)接收窗口rwnd:接收方根据自己接收缓存的大小,动态调整发送方的发送窗口大小,即调整TCP报文段首部中“窗口”字段值,以限制发送速率
2)拥塞窗口cwnd:发送方根据对网络拥塞程度的估计确定的值,其大小与网络带宽的时延相关
3)发送窗口=min { rwnd,cwnd }
TCP拥塞控制
拥塞控制与流量控制的区别: 拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是指点对点的通信量的控制,是个端到端的问题(接收端控制发送端),它所要做的是抑制发送端发送数据的速率,以便使接收端来得及接收。 两者虽然都通过抑制发送方发送速率解决问题,但流量控制中,发送方发送数据的量由接收方决定(rwnd),而拥塞控制则由发送方自己通过检测网络状况来决定(cwnd) 实际上,发送方发送窗口的大小取rwnd和cwnd的较小值,因此由流量和拥塞控制共同决定
慢开始和拥塞避免
1)慢开始
cwnd初值为1,此后发送方每收到一个确认ACK,cwnd加1,故经过每个传输轮次(RTT),cwnd加倍,呈指数规律增长;当拥塞窗口cwnd增长到慢开始门限ssthresh时,改用拥塞避免算法(若2cwnd>ssthresh,则cwnd下个轮次只能增长到ssthresh)
2)拥塞避免算法
每经过一个往返时延RTT就把拥塞窗口cwnd加1,故cwnd按线性规律缓慢增长(即加法增大)
1.当cwnd<ssthresh时,使用慢开始算法 2.当cwnd>ssthresh时,使用拥塞避免算法 3.当cwnd=ssthresh时,两种都可(一般是拥塞避免)
3)超时
发生网络拥塞(超时)时,将慢开始门限ssthresh设置为出现拥塞时cwnd值的一半(但不能小于2),再将cwnd置1,执行慢开始算法;这样能迅速减少主机发送到网络中的分组数,以便发生拥塞的路由器有足够时间把队列中积压的分组处理完
快重传和快恢复
1)快重传
采用冗余ACK技术,当发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时
2)快恢复
当发送方连续收到三个冗余ACK时,执行“乘法减小”算法,吧慢开始门限ssthresh设置为当前cwnd的一半
区别于慢开始算法,它把cwnd设置为ssthresh的值(即cwnd减半),然后直接执行“拥塞避免”算法;这是因为发送方连续收到ACK,认定网络拥塞情况并不严重