您的位置:首页 > 理论基础

计算机网络——传输层(王道)

2020-06-29 17:10 148 查看

传输层

传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。即使网络层协议不可靠,传输层同样能位应用程序提供可靠的服务。传输层的功能如下:

  • 提供应用进程之间的逻辑通信(即端到端的通信);网络层提供的是主机之间的逻辑通信。
  • 复用和分用。复用是指发送方不同的应用进程都可使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。网络层的复用是指发送方不同协议的数据都可以封装成IP数据报发送出去,分用是指接收方的网络层在剥去首部后把数据文件给相应的协议。
  • 传输层对报文进行差错检测(首部和数据部分);而网络层只检查IP数据报的首部,不检测数据是否出错。
  • 提供面向连接的TCP和无连接的UDP;而在网络层无法同时实现两种协议(要么只提供面向连接的服务,如虚电路;要么只提供无连接服务,如数据报)
    传输层寻址和端口
    端口的作用:能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。端口是传输层服务访问点(TSAP),它在传输层的作用类似于IP地址在网络层的作用或MAC地址在数据链路层的作用。
    端口号:标识应用进程,长度16bit,能够标识65536个不同的端口,端口号只具有本地意义,根据端口号范围可将端口分为两类:
    1)服务器使用的端口号。又可分为两类,最重要的是熟知端口号,数值为0-1023,IANA(互联网地址指派机构)将其指派给了TCP/IP最重要的一些进程。另一类称为登记端口号,数值为1024-49151。一些常用的数值端口号如下:
    FTP 21;TELNET 23;SMTP 25;DNS 53;TFTP 69;HTTP 80;SNMP 161
    2)客户端使用的端口号,数值为49152-65535.这类端口号仅在客户进程运行时才动态地选择,因此又称为短暂端口号。
    套接字:在网络中采用发送方和接收方的套接字组合来识别端点。所谓套接字,实际上是一个通信端点,即 套接字=(主机IP地址,端口号),它唯一地标识网络中的一台主机和其上的一个应用(进程)。

无连接的服务和面向连接的服务
TCP/IP协议族在IP层之上使用了两个传输协议:一个是面向连接的传输控制协议(TCP),全双工可靠逻辑通道(文件传输协议FTP 21;超文本传输协议HTTP 80;远程登陆TELNET 23);另一个无连接的用户数据报协议(UDP),一条不可靠的逻辑信道(小文件传输协议 TFTP 69;DNS 53;SNMP 161和实时传输协议DTP)。
UDP数据报封装成IP数据报在网络层传输时,UDP数据报的信息对路由是不可见的。
TCP数据报和虚电路的区别:TCP报文段在传输层抽象的逻辑信道中传输,对路由器不可见;虚电路所经过的交换结点都必须保存虚电路状态信息。在网络层若采用虚电路方式,则无法提供无连接服务;而传输层采用TCP不影响网络层提供无连接服务。

UDP协议

UDP的优点:
1)无需建立连接,因此不会引入建立连接的时延。若DNS运行在TCP而非UDP上,那么DNS的速度会慢很多。HTTP使用TCP而非UDP是因为对于基于文本数据的Web网页来说,可靠性是至关重要的。
2)无连接状态,TCP需要在端系统中维护连接状态,而UDP不维护连接状态,也不跟踪一些参数。因此,某些专用应用服务器使用UDP时,一般都能支持更多的活动客户机。
3)分组首部开销小。TCP有20B的首部开销,UDP仅有8B。
4)应用层能够更好地控制要发送的数据和发送时间。UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率。某些实时应用要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,而UDP正好满足这些应用的需求。
UDP常用于一次性传输较少数据的网络应用,如DNS、SNMP等,尽最大努力交付,维护传输可靠性的工作需要用户在应用层来完成,UDP是面向报文的,发送方UDP对应用层交下来的报文,在添加首部后就向下交付给IP层,既不合并也不拆分,而是保留这些报文的边界;接收方UDP对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付给上层应用程序。因此报文不可分割,是UDP数据报处理的最小单位。
UDP校验
在计算校验和时,要在UDP数据报之前增加12B的伪首部,伪首部并不是UDP的真正首部,只是在计算校验和时,临时添加在UDP数据报的前面。伪首部既不向下传送也不向上递交,仅为了计算校验和,这样的校验和,既检查了UDP数据报,又对IP数据报的源IP地址和目的IP地址进行了检验
**若校验出错,可以丢弃,也可以交付给上层,但是需要附上错误报告,即告诉上层也是错误的数据报。**这种简单的错误检验方法的检错能力并不强,但它的好处是简单、处理速度快。

TCP协议

TCP协议的特点
1)面向连接;2)每条TCP连接只能是点对点的(一对一);3)提供可靠的交付;
4)提供全双工通信,通信两端都设有发送缓存和接收缓存:
发送缓存:发送应用程序传送给发送方TCP准备发送的数据;TCP已发送但尚未收到确认的数据。
接收缓存:按序到达但尚未被接收应用程序读取的数据;不按序到达的数据。
5)TCP是面向字节流的,虽然应用程序和TCP的交互式一次一个数据块(大小不等),但TCP应用程序交下来的数据仅视为一连串无结构的字节流。
TCP连接管理
连接的建立,三次握手
第一次握手,客户端向服务器发送一个连接请求报文段请求建立连接,其首部的SYN=1(同步序列号),同时随机选择一个起始序号seq=x,客户端由CLOSED状态进入SYN_SENT状态。
第二次握手,服务器状态由CLOSED进入LISTEN,服务器收到syn包之后如同意建立连接,向客户端发送一个确认报文段,(并为该TCP连接分配TCP缓存和变量)其首部SYN=1,ACK=1,确认号字段ack=x+1,同时服务器产生一个随机序号seq=y,并由LISTEN状态进入SYN_RCVD。
第三次握手,客户端收到服务器端的确认报文后,还要向服务器给出确认,(也为该连接分配缓存和变量)ACK=1,确认号字段ack=y+1,seq=x+1,此包发送完毕,客户端和服务器均进入ESTABLISHED状态,三次握手完成。

服务器端资源是在完成第二次握手时分配的,而客户端资源是在完成第三次握手时分配的,这就使得服务器易于受到SYN洪泛攻击(DDOS攻击的一种)。客户端在短时间内伪造大量不存在的IP地址,并向服务器不断发送SYN包,服务器端回复确认包,但是因为客户端源地址不存在,所以服务器端不断重发确认包至超时,这些伪造的SYN包占用请求队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。检测SYN攻击的方式:当服务器端有大量半连接状态且源IP地址是随机的,就可断定:#netstat -nap | grep SYN_RECV
TCP连接的释放,四次握手
第一次握手,客户端打算释放连接,向服务器发送一个连接释放报文,并停止发送数据。FIN=1,seq=u(u等于前面已经传送过的数据的最后一个字节加1),并由ESTABLISHED进入FIN_WAIT_1状态。
第二次握手,服务器接收到连接释放报文后即发出确认,ACK=1,确认号ack=u+1,seq=v(v是服务器前面已传送过的数据的最后一个字节序号加1),并进入CLOSE_WAIT状态。此时TCP连接处于半关闭状态,服务器端仍可发送数据,客户机仍要接收并进入FIN_WAIT_2状态。
第三次握手,服务器没有要发送的数据,向客户端发送连接释放报文,FIN=1,ACK=1,ack=u+1,seq=w,服务器进入LAST_ACK状态,客户端进入TIME_WAIT状态。
第四次握手,客户端接收到连接释放报文,进入向服务器发送确认报文,ACK=1,ack=w+1,seq=u+1,用户端等待2MSL(IP数据报在网络中的最长存活时间,等待两个MSL的原因是保证A发送的最后一个确认报文段能够达到B。如果A不等待2MSL,若A返回的最后确认报文段丢失,则B不能进入正常关闭状态,而此时A已经关闭,也不可能再重传;防止出现”已丢失的连接请求报文段“,在A发送最后一个确认报文段后,再经过2MSL可保证本连接持续的时间内所产生的所有报文段从网络中消失。)之后进入CLOSED状态,服务器接收到确认报文之后进入CLOSED状态。
服务器结束TCP连接的时间要比客户机早一些,因为客户机最后要等待2MSL后才可进入CLOSED状态。

重传:有两种事件会导致TCP对报文段进行重传
1)超时,TCP每发送一个报文段,就对这个报文段设置一次计时器,若重传时间(一般会略大于报文段的往返时间RTT,它会随新测量RTT样本值的变化而变化)到期还未收到确认,就要重传这个报文段。
2)冗余ACK(冗余确认)。触发重传存在的一个问题是超时周期往往太长。所幸的是,发送方通常可在超时事件发生之前通过注意到所谓的冗余ACK来较好地检测丢包情况。TCP规定,当发送方收到对同一个报文段的3个冗余ACK时,就可以认为跟在这个给被确认报文段之后的报文段已经丢失。这种技术通常称为快速重传。
TCP流量控制
TCP提供流量控制服务来消除发送方使接收方缓存区溢出的可能性,可以说流量控制是一个速度匹配服务,匹配发送方的发送速率与接收方的读取速率 。TCP提供一种基于滑动窗口协议的流量控制机制。发送方发送窗口的实际大小取接收窗口rwnd和拥塞窗口cwnd中的最小值。
传输层和数据链路层的流量控制的区别是:传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻结点的流量控制。另外,数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的则可以动态变化
TCP拥塞控制
防止过多的数据注入网络,保证网络中的路由器或链路不至过载。对于通信连接的断点来说,拥塞往往表现为通信时延的增加。
拥塞控制与流量控制的区别:拥塞控制是让网络能够承受现有的网络符合,是一个全局性的过程,涉及所有的主机,所有的路由器,以及降低网络传输性能有关的所有因素。相反,流量控制是点对点的通信量的控制,即接收端抑制发送端,它所要做的是一致发送端发送数据的速率,以便使接收端来得及接收。发送方需要维护接收窗口rwnd和拥塞窗口cwnd,发送窗口的上限值值=min[rwnd,cwnd],接收窗口的大小可以根据TCP报文首部的窗口字段通知发送方,而发送方维护拥塞窗口则通过下面两个办法:
1)慢开始和拥塞避免
初始cwnd=1,每经过一个往返时延RTT,cwnd就加倍(*2),直至达到一个规定的慢开始门限ssthresh(阈值),然后改用拥塞避免算法,cwnd按照线性规律缓慢增长(每次增加1),当出现一次超时(网络拥塞)时,令门限ssthresh等于当前cwnd的一半,cwnd=1,重复使用慢开始算法。
拥塞避免并不能完全避免拥塞,只能使网络比较不容易出现拥塞。
注意在,慢开始阶段(指数增长阶段),若2cwnd>ssthresh,则下一个RTT的cwnd等于ssthresh,而不等于2cwnd,即cwnd不能越过ssthresh。
2)快重传和快恢复
快重传:发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时超时。
快恢复:发送端收到连续三个冗余ACK时,执行“乘法减小”算法,把慢开始门限ssthresh设置为出现拥塞时发送方cwnd的一半。与慢开始(慢开始算法将拥塞窗口cwnd设置为1)的不同之处是,它把cwnd的值设置为慢开始门限ssthresh改变后的数值,然后开始执行拥塞避免算法(加法增大),使拥塞窗口缓慢地线性增大。由于跳过了cwnd=1的慢开始过程,所以被称为“快恢复”。
发送方发送窗口的实际大小由流量控制和拥塞控制共同决定,发送方实际的发送窗口的大小为min[rwnd,cwnd]

错题

  1. TCP的确认号是指明接收方下一次希望收到的报文段的数据部分的第一个字节的编号。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: