王道408--CN---传输层
一、历年选择题考点
二、传输层提供的服务
传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
传输层的功能---传输层提供应用进程之间的逻辑通信(即端到端的通信)
它为运行在不同主机上的进程之间提供了逻辑通信(即端到端的通信),而网络层提供主机之间的逻辑通信。
传输层的功能---复用和分用
复用是指发送方不同的应用进程都可使用同一个传输层协议传送数据.
分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。
注意:网络层也有复用分用的功能,但网络层的复用是指发送方不同协议的数据都可以封装成IP数据报发送出去,分用是指接收方的网络层在剥去首部后把数据交付给相应的协议。
传输层的功能---对收到的报文进行差错检测
网络层只会检查首部
传输层的功能---提供不同的传输协议
提供两种不同的传输协议,即面向连接的TCP和无连接的UDP。而网络层无法同时实现两种协议(即在网络层要么只提供面向连接的服务,如虚电路:要么只提供无连接服务,如数据报,而不可能在网络层同时存在这两种方式)。
传输层的寻址与端口
1、端口的作用
端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层
端口是传输层服务访问点(TSAP)
另外: 数据链路层的SAP是MAC地址,网络层的SAP是IP地址,传输层的SAP是端口。
2、端口号
端口号长度为16bit,能表示65536个端口
端口号又分为两类:
1)、服务器端使用的端口号
它又分为两类,最重要的一类是熟知端口号,数值为0~1023
另一类称为登记端口号,数值为1024~49151。它是供没有熟知端口号的应用程序使用的,用这类端口号必须在IANA登记,以防止重复。
2)、客户端使用的端口号
客户端使用的端口号,数值为49152~65535,又称短暂端口号(也称临时端口)。
3、套接字
在网络中采用发送方和接收方的套接字来识别端点。套接字,实际上是一个通信端点,即套接字Socket=(IP地址:端口号),它唯一地标识网络中的一台主机和其上的一个应用(进程)。
面向连接服务与无连接服务
面向连接服务就是在通信双方进行通信之前,必须先建立连接,在通信过程中,整个连接的情况一直被实时地监控和管理。通信结束后,应该释放这个连接。
无连接服务是指两个实体之间的通信不需要先建立好连接,需要通信时,直接将信息发送到“网络”中,让该信息的传递在网上尽力而为地往目的地传送。
TCP主要适用于可靠性更重要的场合,如文件传输协议(FTP)、超文本传输协议(HTTP)、远程登录(TELNET)等
UDP比较简单,因此执行速度比较快、实时性好。使用UDP的应用主要包括小文件传送协议(TFTP)、DNS、SNMP和实时传输协议(RTP)。
另外注意,网络层采用虚电路方式则无法提供无连接服务,而传输层采用TCP则不影响网络层提供无连接服务
三、UDP协议
用户数据报协议UDP(User Datagram Protocol) = IP的数据报服务 + (复用和分用,差错检测)
UDP的优点
1、无需建立链接
2、无连接状态
TCP需要在端系统中维护连接状态。此连接状态包括接收和发送缓存、拥塞控制参数和序号与确认号的参数。而UDP不维护连接状态,也不跟踪这些参数。因此,某些专用应用服务器使用UDP时,一般都能支持更多的活动客户机。
3、UDP分组首部开销小,TCP有20B的首部开销,UDP仅有8B的开销
4、应用层能更好地控制要发送的数据和发送时间。UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率。某些实时应用要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,而UDP正好满足这些应用的需求。
利于实时应用(视频,语言
5、UDP支持一对一、一对多、多对一和多对多的交互通信。
6、UDP是面向报文的,报文是UDP数据报处理的最小单位
UDP的使用
UDP常用于一次性传输较少数据的网络应用,如DNS、SNMP等,因为对于这些应用,若采用TCP,则将为连接创建、维护和拆除带来不小的开销。
UDP也常用于多媒体应用(如IP电话、实时视频会议、流媒体等),显然,可靠数据传输对这些应用来说并不是最重要的,但TCP的拥塞控制会导致数据出现较大的延迟,这是它们不可容忍的。
UDP的数据报格式
8字节头部
1、源端口号: 在需要对方回复时选填
2、目的端口号:必须填
3、长度,UDP数据报长度,最小值是8,仅有首部
4、校验和
检测UDP数据报在传输中是否有错。有错就丢弃。该字段是可选的,当源主机不想计算校验和时,则直接令该字段为全0。
UDP的差错检测
校验和
1、计算校验和会引入12字节的伪首部
伪首部的内容包括: 源IP,目的IP,UDP长度,协议字段17(TCP是6)...:
2、UDP校验和校验出UDP数据报是错误的,可以丢弃,也可以交付给上层,但是要附上错误报告
3、计算方法
4、校验时,若UDP数据报部分的长度不是偶数个字节,则需填入一个全0字节
5、通过伪首部,不仅可以检查源端口号、目的端口号和UDP用户数据报的数据部分,还可以检查IP数据报的源IP地址和目的地址。
使用ICMP
如果接收方UDP发现数据包中目的端口不对,则发送"端口不可达"的ICMP差错报文
四、TCP协议
TCP协议的特点
1、每条TCP链接只能有两个端点,每个TCP链接只能是端到端的
2、TCP提供可靠交付的服务,保证传送的数据无差错、不丢失、不重复且有序。
3、TCP提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据。
为此TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
发送缓存用来暂时存放以下数据:①发送应用程序传送给发送方TCP准备发送的数据:②TCP已发送但尚未收到确认的数据。接收缓存用来暂时存放以下数据:①按序到达但尚未被接收应用程序读取的数据:②不按序到达的数据。
4、TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但
TCP把应用程序交下来的数据仅视为一连串的无结构的字节流。
TCP和UDP在发送报文时所采用的方式完全不同。UDP报文的长度由发送应用进程决定,而TCP报文的长度则根据接收方给出的窗口值和当前网络拥塞程度来决定。
TCP报文段
TCP报文段既可以用来运载数据,又可以用来建立连接,释放连接和应答
TCP头部在20B~60B之间
0、首部的前20B是固定的。TCP首部最短为20B,后面有4N字节是根据需要而增加的选项,长度为4B的整数倍
1、源端口与目的端口
2、序号
4B,TCP是面向字节流的(即TCP传送时是逐个字节传送的),所以TCP连接传送的字节流中的每个字节都按顺序编号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。
3、确认号
是期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则表明到序号N-1为止的所有数据都已正确收到。
4、数据偏移,也叫(首部长度),单位4B
5、保留,6bit
6、紧急位URG(urgent),表明报文段中有紧急数据
7、确认位ACK(acknowledge),仅当ACK=1确认号才有效
8、推送位PSH(push),实际很少使用
9、复位位RST(reset),TCP连接出现差错,需释放连接重新建立
10、同步位SYN(synchronization),在连接建立时用来同步序号,表明该报文是连接请求或连接接受报文
11、终止位FIN,用来释放一个连接,FIN=1表明报文段的发送方数据已发送完毕,并要求释放运输连接窗口
12、窗口,占2B,它指出现在允许对方发送的数据量,接收方的数据缓存空间是有限的,因此用窗口值作为接收方让发送方设置其发送窗口的依据。
例如,设确认号是701,窗口字段是1000。这表明,从701号算起,发送此报文段的一
方还有接收1000字节数据(字节序号为701~1700)的接收缓存空间。
13、校验和
占2B,同样需要伪头部,与UDP一样
14、紧急指针
占2B。紧急指针仅在URG=1时才有意义,它指出在本报文段中紧急数据共有多少字节(紧急数据在报文段数据的最前面)。
15、选项。长度可变。TCP最初只规定了一种选项,即最大报文段长度(Maximum Segment Size,.MSS)。MSS是TCP报文段中的数据字段的最大长度(注意仅仅是数据字段)。
16、填充。这是为了使整个首部长度是4B的整数倍。
TCP连接---三次握手
第一次握手
1、客户端向服务端发送请求,首部同步位SYN=1,选择一个初始序号seq=x
2、SYN报文段不携带数据,序号消耗一个序号
3、客户进程进入SYN-SENT(同步已发送)状态
第二次握手
1、服务器收到SYN报文--->同意连接---->服务器为TCP连接分配缓存和变量---->向客户端返回确认报文段
2、同步位SYN=1,确认位ACK=1,去确认号ack=x+1,为自己选择一个初始序号seq=y
3、确认报文段不能携带数据,需要消耗一个序号
4、服务器进程进入SYN-RCVD(同步收到)状态
第三次握手
1、客户进程收到服务器进程的确认报文--->客户端为TCP连接分配缓存和变量
2、向服务器端返回一个报文段,对服务器确认报文进行确认
3、报文中ACK=1,确认号seq=y+1,自己序号seq=x+1
4、客户端进入ESTABLISHED(已建立连接)状态
5、此时TCP连接已经建立,服务器收到客户端的确认后,进入establish状态
另外,值得注意的是,服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的,这就使得服务器易于受到SYN洪泛攻击。
TCP连接释放---四次挥手
第一次握手
1、客户端向服务端发出连接释放报文段----->停止发送数据,主动关闭连接
2、报文中终止控制FIN=1,序号seq=u(值等于前面已传送的数据的最后一个字节的序号+1)
3、客户端进入FIN-WAIT-1(终止等待1状态)
第二次握手
1、服务器收到连接释放报文段后发出确认
2、确认位ACK=1,确认号ACK=u+1,序号seq=v(值等于服务器前面已传送过的数据最后一个字节的序号+1)
3、服务器进入CLOSE-WAIT(关闭等待)状态
4、此时TCP连接处于半关闭状态,客户端到数据段的连接释放,但是服务器还可以向客户端发送文件,且客户端需接受
5、客服端收到服务器的确认---->进入FIN-WAIT-2(终止等待2)状态,等待服务器发出的连接释放报文段
第三次握手
1、服务器发出连接释放报文段,FIN=1,报文序号seq=w(在半关闭状态下服务器可能又发送了一些数据)
2、服务器重复上次已发送到确认号ack=u+1
3、服务器进入LAST-ACK(最后确认状态),等待客户端的确认
第四次握手
1、客户端收到服务器端发出的连接释放报文----->对此发出确认,将确认位ACK置为1,确认号ack=w+1,序号seq=u+1
2、客户端进入TIME-WAIT(时间等待状态)
3、在经过时间等待计时器设置的时间2MSL(最大报文段寿命)后,客户端进入CLOSE(关闭)状态
TCP连接建立与释放的小总结
TCP可靠传输
TCP提供的可靠数据传输服务保证接收方进程从缓存区读出的字节流与发送方发出的字节流完全一样。
TCP使用了校验、序号、确认和重传等机制来达到这一目的。其中,TCP的校验机制与UDP校验一样
序号
1、TCP首部的序号字段用来保证数据能有序提交给应用层
2、TCP把数据视作一个无结构但有序的字节流
3、序号建立在传送的字节流之上,而不建立在报文段之上
4、序号字段的值是指本报文段所发送的数据的第一个字节的序号
确认
TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号
TCP使用默认累计
重传
有两种事件会导致TCP对报文段进行重传:超时和冗余ACK。
(1)、超时
1、计时器设置的重传时间到期但还未收到确认时,就要重传这一报文段
2、发出事件和收到确认时间之差 = 报文段的往返时间RTT
(2)、冗余ACK(冗余确认)
1、冗余ACK就是再次确认某个报文段的ACK,而发送方先前已经收到过该报文段的确认
2、TCP规定每当比期望序号大的失序报文到达时,就发送一个冗余ACK,指明下一个期待字节的序号
3、TCP规定当发送方收到对同一个报文段的3个冗余ACK时,就可以认为跟在这个被确认报文段之后的报文段已经丢失,而快速重传为:只要检测到三个冗余ACK,就立即重传
有点不好理解,举个例子
TCP流量控制
1、TCP提供流量控制服务来消除发送方(发送速率太快)使接收方缓存区溢出的可能性,因此可以说流量控制是一个速度匹配服务(匹配发送方的发送速率与接收方的读取速率)。
2、判断网络拥塞的依据就是超时
3、TCP利用滑动窗口机制实现对发送方的流量控制
4、TCP的窗口单位是字节
基本原理如下:
在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,这称为接收窗口rwnd,即调整TCP报文段首部中的“窗口”字段值,来限制发送方向网络注入报文的速率。同时,发送方根据其对当前网络拥塞程度的估计而确定的窗口值,这称为拥塞窗口cwnd,其大小与网络的带宽和时延密切相关。
举例:
发送窗口的上限值=min[rwnd,cwmd]
注意数据链路层与传输层流量控制的区别:
传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻结点的流量控制。另外,数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的则可以动态变化。
拥塞控制
拥塞控制是指防止过多的数据注入网络,保证网络中的路由器或链路不致过载。
拥塞控制与流量控制的区别:
发送窗口的上限值=min[rwnd,cwmd]
1、慢开始
ssthresh: 规定的慢开始门限阈值
cwnd < ssthresh时,使用慢开始算法
在达到慢开始门限ssthresh前,cwnd成线性增长
注意:在慢开始(指数级增长)阶段,若2cwnd>ssthresh,则下一个RTT后的cwnd等于ssthresh,而不等于2cwnd,即cwnd不能跃过ssthresh值。在第l6个轮次时cwnd=8、ssthresh=12,在第17个轮次时cwnd=12,而不等于16。
2、拥塞避免
cwnd > ssthresh时,使用拥塞避免算法
cwnd每次增加1
出现乘法减小时,ssthresh设置为当前cwnd的一半,cwnd设置为1,然后重新慢开始
3、快重传,快恢复
快重传
当发送方连续收到3个重复的ack报文时,直接重传对方尚未收到的报文段
不必等待那个报文段设置的重传计时器超时
快恢复
当发送方连续收到3个冗余ack时,执行“乘法减小”算法
把ssthresh设置为当前cwnd的一半,然后cwnd从ssthresh开始使用拥塞避免算法
需要注意的点就是
接收方的缓存空间总是有限的。因此,发送方发送窗口的实际大小由流量控制和拥塞控制共同决定。当题目中同时出现接收窗口(wmd)和拥塞窗口(cwmd)时,发送方实际的发送窗口大小是由rwnd和cwnd中较小的那一个确定的。
TCP与UDP的适用场景
1、UDP常用于一次性传输较少数据的网络应用,如DNS、SNMP等,因为对于这些应用,若采用TCP,则将为连接创建、维护和拆除带来不小的开销。
2、UDP也常用于多媒体应用(如IP电话、实时视频会议、流媒体等),显然,可靠数据传输对这些应用来说并不是最重要的,但TCP的拥塞控制会导致数据出现较大的延迟,这是它们不可容忍的。
3、TCP适用于需要可靠传输的应用场景,如Web浏览、电子邮件、文件传输等
4、UDP则适用于实时性要求较高的应用场景,如音频和视频流媒体、网络游戏等,广播组播
五、错题5.1
传输层即不属于通信子网也不属于资源子网(T1)
六、错题5.2
使用UDP的网络应用,其数据传输的可靠性由应用层负责(T1)
当源主机不想计算校验和时,则直接校验字段为全0。
10. 下列网络应用中,(D)不适合使用UDP协议。
A.客户机/服务器领域
B.远程调用
C.实时多媒体应用
D.远程登录
UDP的特点是开销小,时间性能好且易于实现。在客户/服务器模式中,它们之间的请求都很短,使用UDP不仅编码简单,而且只需要很少的消息
远程调用使用UDP的理由和客户/服务器模式的一样
对于实时多媒体应用,需要保证数据及时传送,而比例不大的错误是可以容忍的,所以使用UDP也是合适的,而且使用UDP协议可以实现多播,给多个客户端服务:
而远程登录需要依靠一个客户端到服务器的可靠连接,使用UDP是不合适的。
七、错题5.3
为保证数据传输的可靠性,TCP采用了对(报文段)确认的机制。
TCP是面向字节的。对每个字节进行编号,但并不是接收到每个字节都要发回确认,而是在发送一个报文段的字节后才发回一个确认,所以T℃P采用的是对报文段的确认机制。
TCP中滑动窗口的值设置太大,对主机的影响是(A)。(T13)
A.由于传送的数据过多而使路由器变得拥挤,主机可能丢失分组
B.产生过多的ACK
C.由于接收的数据多,而使主机的工作速度加快
D.由于接收的数据多,而使主机的工作速度变慢
TCP使用滑动窗口机制来进行流量控制,其窗口尺寸的设置很重要,如果滑动窗口值设置得太小,那么会产生过多的ACK(因为窗口大可以累积确认,因此会有更少的ACK):如果设置得太大,那么又会由于传送的数据过多而使路由器变得拥挤,导致主机可能丢失分组。
T18
T21
有小坑
T22
连续收到3个重复的ack报文暗示了这是快恢复
T24
注意序列号与确认序列号中微小的区别(T36)
序列号就是TCP结构中的序号,确认序列号就是确认号,序列号指报文发送数据的第一个字节的序号,确认序列号指期望收到下一个报文的序号(序列号)
大题知识点
p217-T2
如果语音数据不实时播放,那么可以使用TCP,因为TCP有重传机制,传输可靠。接收端用TCP将语音数据接收完毕后,可以在以后的任何时间进行播放。
若假定是实时传输,不宜重传,则必须使用UDP。UDP不保证可靠递交,没有重传机制,因此在传输数据时可能会丢失数据,但UDP比TCP的开销要小很多,实时性好。
总结就是实时传输下,TCP协议不易重传,并且其拥塞控制会导致出现极大的延迟...
p217-T3
IP分组的标识字段相等时才能重组成数据报
好细节
p217-T10
这道题其貌不扬,但考察的极其细节
考点:
1、TCP数据报序列号按字节编号
2、TCP头部、IP头、Mac头
3、Mac头部还要考虑到前导码与帧定界符
p235-T1(1)
"哪几个在通过快速以太网传输时进行了填充" 这句话的意思就是为满足以太网最小帧长(64B)做的填充
p236-T15-(2)
第一点:注意,第八个确认段不是指发送的第八次,
题目中一个MSS作为一个确认段,若发送窗口为4,则有四个确认段
第二点:研究答案发现,在慢开始过程中,发送端每收到一个确认段就会让拥塞窗口大小加1,比如:
某时刻,A的拥塞窗口为8,发送窗口为4,他向B一口气发送了四个MSS段,当第一个MSS确认帧返回后(此时其他MSS段的确认帧还没返回),拥塞窗口变为9,再到一个,变为10...(假设一直在慢开始期间)
类似于这样:
p274-T4-(4)
当IP数据包经过一个路由器后,其TTL值改变,会导致路由器重新计算首部校验和的值并填入IP分组的"首部校验和字段"
也就是说,保底得有两个字段会变
八、其他的一些问题
TCP握手的时候,syn报文段,确认报文段,都不能携带数据,但是必须消耗一个序号
第三个报若不携带数据则不消耗序号
这也是第二个报文序号为y,但第三个报文确认号为y+1的原因,结合题目,极其容易出错,比如p233-T36
MSS设置太大或太小会有什么问题
1、设置太小
传输效率低,有20B固定头字节呢
2、设置太大
用率进一步降低。但反过来,若TCP报文段很长,那么在IP层传输时有可形要分解成多个短数据报片,在终端还要把收到的各数据报片装配成原来的TCP报文段。传输有差错时,还要进行重传。这些都会使开销增大。
总之,MSS应尽量大一些,只要在IP层传输时不要再分片就行。
最佳的MSS是很难确定的。MSS的默认值为536B,因此在因特网上的所有主机都能接收的报文段长度是536+20(×TCP固定首部长度)=556B。
不采用二次握手建立连接的原因
这主要是为了防止两次握手情况下已失效的连接请求报文段突然又传送到服务器而产生错误
举例:
为何不采用“三次握手”释放连接,且发送最后一次捱手报文后要等待2MSL的时间呢?
1)保证A发送的最后一个确认报文段能够到达B。如果A不等待2MSL,若A返回的最后确认报文段丢失,则B不能进入正常关闭状态,而A此时已经关闭,也不可能再重传。
2)、防止出现“已失效的连接请求报文段”。A在发送最后一个确认报文段后,再经过2MSL可保证本连接持续的时间内所产生的所有报文段从网络中消失。造成错误的情形与上面不采用“两次握手”建立连接所述的情形相同。
TCP的差错恢复机制可视为GBN和SR协议的混合体
简言之,TCP具有累计确认,是GBN的分格,同时TCP具有缓存功能,支持选择重传,因此又具备SR的分格
为什么超时时间发生时cwmd被置为1,而收到3个冗余ACK时cwmd减半?
超时事件发生和收到3个冗余ACK,哪个意味着网络拥塞程度更严重?通过分析不难发现,在收到3个冗余ACK的情况下,网络虽然拥塞,但至少还有ACK报文段能被正确交付。而当超时发生时,说明网络可能已经拥塞得连ACK报文段都传输不了,发送方只能等待超时后重传数据。
不能笼统地说“往返时间RTT对传输层来说很重要”
因为只有TCP才需要计算RTT,UDP没有确认和重传机制,因此RTT对UDP没有什么意义。
假定在一个互联网中,所有链路的传输都不出现差错,所有结点也都不会发生故障。试问在这种情况下,TCP的“可靠交付”的功能是否就是多余的?
常见的端口号
王道的"本章小结及疑难点真棒啊"