传输层--计算机网络

传输层

1.传输层提供的服务

1.1传输层的功能

从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。
传输层位于网络层之上,它为运行在不同主机上的进程之间提供了逻辑通信,而网络层提供了主机之间的逻辑通信。
传输层的功能:
1)传输层提供应用进程之间的逻辑通信(即端到端的通信)。与网络层的区别是,网络层提供的是主机之间的逻辑通信。
2)复用和分用。复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。
3)传输层还要对收到的报文进行差错检测(首部和数据部分)。而网络层只检查IP数据报的首部,不检验数据部分是否出错。
4)提供两种不同的传输协议,即面向连接的TCP和无连接的UDP。

1.2传输层的寻址与端口

1.端口的作用
端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。端口标识的是主机中的应用进程。硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与传输实体进行层间交互的一种地址。传输层使用的是软件端口。
2.端口号
1)服务器使用的端口号
熟知端口号:0-1023,登记端口号:1024-49151
一些常用的熟知端口号如下:
这里写图片描述

2)客户端使用的端口号:49152-65535,由于这类端口号仅在客户进程运行时才动态选择,因此又叫短暂端口号(也称临时端口)。通信结束后,刚才使用过的客户端口号就不复存在,这个端口号就可以供其他客户进程使用。
3.套接字
在网络中通过IP地址来标识和区别不同的主机,通过端口号来标识和区分一台主机中的不同应用进程。在网络中采用发送方和接收方的套接字(Socket)组合来识别端点。
套接字 = (主机IP地址,端口号)
它唯一地标识了网络中的一个主机和其上的一个应用(进程)。

1.3无连接服务与面向连接服务

面向连接的服务就是在通信双方进行通信之前,必须先建立连接,在通信过程中,整个连接的情况一直被实时地监控和管理。当通信结束后,则应该释放这个连接。
无连接的服务,两个实体之间的通信不需要先建立好连接,需要通信的时候,直接将信息发送到“网络”中,让该信息的传递在网上尽力而为地往目的地传送。


2. UDP协议

2.1UDP数据报

1.UDP概述
定义的UDP只是做了传输协议能够做的最少工作,只在IP的数据报服务至上增加了两个最基本的服务:复用和分用以及差错检测。如果应用程序开发者选择UDP而不是TCP,则应用程序几乎是直接与IP打交道。
UDP优点
1)UDP无需建立连接
2)无连接状态
3)分组首部开销小。TCP有20字节的首部开销,而UDP仅有8字节的开销
4)应用层能更好地控制要发送的数据和发送时间。
UDP提供尽最大努力的交付,即不保证可靠交付,但这并不意味着应用对数据的要求是不可靠的,因此所有维护传输可靠性的工作需要用户在应用层来完成。
UDP是面向报文。
2.UDP的首部格式
UDP数据报包含两个部分:UDP首部和用户数据,整个UDP数据报作为IP数据报的数据部分封装在IP数据报中。当传输层从IP层收到UDP数据报时,就根据手不中的目的端口,把UDP数据报通过相应的端口,上交给应用进程。如果接收方UDP发现收到的报文中的目的端口号不正确,就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方。

2.2 UDP校验

在计算校验和时,要在UDP数据报之前增加12个字节的伪首部,伪首部并不是UDP真正的首部。只是在计算校验和时,临时添加在UDP数据报的前面,得到一个临时的UDP数据报。但是这个临时的既不向上也不向下传。UDP校验和的计算方法和IP数据报首部校验和的计算方法相似,都是用二进制反码运算求和再取反。但不同的是:IP数据报的校验和只检验IP数据报的首部,但UDP的校验和是把首部和数据部分一起都检验。
这种简单的差错检验方法的检错能力并不强,但它的好处是简单,处理速度快。


3.TCP协议

3.1 TCP协议的特点

TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复的问题。主要特点
1)TCP是面向连接的传输层协议
2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。(一对一)
3)TCP提供可靠的交付服务,保证传送的数据无差错、不丢失、不重复且有序。
4)TCP提供全双工通信,TCP允许通信双方的应用进程在任何时候都能发送数据,为此TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
5)TCP是面向字节流的。

3.2 TCP报文段

TCP传送的数据单元成为报文段。一个TCP报文段分为TCP首部和TCP数据两部分,整个TCP段作为IP数据报的数据部分封装在IP数据报中。
这里写图片描述

3.3 TCP连接管理

TCP是面向连接的协议。因此每一个TCP连接都有三个阶段:谅解建立、数据传送和连接释放。TCP连接的端口叫做套接字(Socket)或插口。端口拼接到IP地址即构成了套接字。
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。
TCP连接的建立采用客户/服务器方式。主动发起连接建立的应用进程叫做客户机,而被动等待连接建立的应用进程叫做服务器。

TCP连接的建立:三次握手

 第一步:客户机的TCP首先向服务器的TCP发送一个连接请求报文段。这个特殊的报文段中不含应用层数据,其首部中的SYN标志位被置为1.另外,客户机会随机选择一个起始序号seq=x(连接请求报文不携带数据,但要消耗掉一个序号)。
 第二步:服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发挥确认,并为该TCP连接分配TCP缓存和变量。在确认报文段中,SYN和ACK都被置为1,确认号字段的值为x+1,并且服务器随机产生起始序号seq=y(确认报文不懈怠数据,但要消耗掉一个序号)。确认报文段同样不包含应用层数据。
 第三步:当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。这个报文段的ACK标志位被置为1,序号字段为x+1,确认号字段ack=y+1。该报文段可以携带数据,如果不携带数据则不消耗序号。

值得注意的是,服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的。这就使得服务器易于收到SYN洪泛攻击。

TCP连接的释放:四次挥手

第一步:客户机打算关闭连接,就向TCP发送一个连接释放报文段,并停止再发送数据,主动关闭TCP连接,该报文段的FIN标志位被置为1,seq =u,它等于前面已传送过的数据的最后一个字节的序号加1(FIN报文段即使不携带数据,也要消耗一个序号)。
第二步:服务器收到连接释放报文段后即发出确认,确认号是ack = u+1,而这个报文段自己的序号是v,等于它前面已传送过的数据的最后一个字节的序号加1。此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于瓣关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。
第三步,若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时其发出FIN=1的连接释放报文段。
第四步:客户机搜到连接释放报文段后,必须发出确认。在确认报文段中,ACK字段被置为1,确认号ack=w+1,序号seq=u+1。此时TCP连接还没有释放掉,必须经过实践等待计时器设置的时间2MSL后,A才进入到连接关闭状态。

3.4 TCP可靠传输

TCP的任务是在IP层的不可靠的、尽力而为服务的基础上简历一种可靠数据传输服务。TCP使用了校验、序号、确认和重传等机制来达到这个目的。其中,TCP的校验机制与UDP校验一样。
1.序号
TCP首部的序号字段用来保证数据能有序提交给应用层,TCP把数据看成一个无结构但是有序的字节流,序号是建立在传送的字节流上。
2.确认
TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。TCP默认使用累计确认,即TCP只确认数据流中至第一个丢失字节为止的字节。
3.重传
有两种事件导致TCP对报文段进行重传:超时和冗余ACK
(1)超时
TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传事件到期但还没有收到确认,就要重传这一报文段。为了计算超时计时器的重传事件,TCP采用一种自适应算法,它记录一个报文段发出的时间,以及收到相应确认的时间,这两个时间之差叫做报文段的往返时间RTT。TCP保留了RTT的一个加权平均往返时间RTTs。
超时计时器设置的超时重传事件RTO=RTTs+4*RTTd,RTTd是RTT偏差的加权平均值,它与RTTs和新的RTT样本之差有关。
(2)冗余ACK(冗余确认)
超时触发重传存在的一个问题就是超时周期往往太长。幸运的是,发送方通常可在超时时间发生之前通过注意所谓冗余ACK来较好地检测丢包情况。冗余ACK就是再次确认某个报文段的ACK,而发送方先前已经收到过该报文段的确认。TCP规定当发送方收到对同一个报文段的3个冗余ACK时,就可以认为跟在这个被确认报文段之后的报文段已经丢失。

3.5 TCP流量控制

TCP提供了流量控制服务以消除发送方使接收方缓存区溢出的可能性,因此可以说流量控制是一个速度匹配服务。(匹配发送方的发送速率与接收方的读取速率)。TCP提供一种基于滑动窗口协议的流量控制机制。
在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,这就是接收窗口rwnd,即调整TCP报文段首部中的“窗口”字段值,来限制发送方向网络注入报文的速率。同时,发送方根据其对当前网络拥塞程序的估计而确定的窗口值,称为拥塞窗口cwnd。A的发送窗口的实际大小是取rwnd和cwnd中的最小值。

3.6 TCP拥塞控制

所谓拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。
拥塞控制与流量控制的区别:拥塞控制是让网络能够承受现有的网络负荷,它是一个全局性的过程,涉及所有的主机。所有的路由器。以及与降低网络传输性能有关的所有因素。相反,流量控制往往是指点对点的通信量的控制,即接收端控制发送端,它所要做的是一直发送端发送数据的速率,以便使接收端来得及接收。
为了更好地对传输层进行拥塞控制,因特网建议标准定义了以下四种算法慢开始拥塞控制快重传快恢复
1**.慢开始和拥塞避免**
(1)慢开始算法
在TCP刚刚连接好,开始发送TCP报文段时,先令拥塞窗口cwnd=1,即一个最大报文段长度MSS。而在每收到一个对新的报文段的确认后,将cwnd加1,即增大一个MSS。用这样的方法逐步增大发送方的拥塞窗口cwnd。可以使分组注入到网络的速率更加合理。
使用慢开始算法后,没经过一个传输轮次(即往返时延RTT),拥塞窗口cwnd就会加倍,即cwnd的大小呈指数形式增长。这样慢开始一直把拥塞窗口cwnd增大到一个规定的慢开始门限ssthresh(阈值),然后改用拥塞避免算法。
(2)拥塞避免算法
拥塞避免算法的做法是:发送端的拥塞窗口cwnd每经过一个往返时延RTT就增加一个MSS的大小,而不是加倍,使cwnd按线性规律缓慢增长,而当出现一次超时,则令慢开始门限ssthresh等于当前cwnd的一半。
当cwnd小于ssthresh,使用慢开始算法
当cwnd>ssthresh,停止使用慢开始算法而改用拥塞避免算法
当cwnd=ssthresh,既可使用慢开始算法,也可使用拥塞避免算法。
(3)网络拥塞的处理
当网络出现拥塞时,无论在慢开始阶段还是在拥塞避免阶段,只要发送方检测到超时事件的发生(没有按时收到确认,重传计时器超时),就要把慢开始门限ssthresh设置为出现拥塞时的发送方cwnd值的一半,但是不能小于2.然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主句发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。
这里写图片描述

2**.慢重传和快恢复**
快重传和快恢复算法是对慢开始和拥塞避免算法的改进。
(1)快重传:使用了冗余ACK来检测丢包的发生。同样,冗余ACK也用于网络拥塞的检测。当发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。
(2)快恢复
快恢复算法原理:当发送端收到连续三个冗余ACK(即重复确认)时,就执行“乘法减小”,把慢开始门限ssthresh减半。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值