找回密码
 立即注册

微信扫码登录

使用验证码登录

搜索
查看: 73|回复: 0

12.第12节课第5章运输层

[复制链接]

6476

主题

3

回帖

1万

积分

管理员

积分
19556
发表于 2024-4-15 08:44:47 | 显示全部楼层 |阅读模式
在发送完一个分组后呢,必须暂时保留已发送分组的副本,只有在收到相应的确认后呢。才能清除暂时保留的分组副本。分组和确认呢,都必须进行编号,这样呢,才能明确是哪一个发出的分组收到了确认,而哪一个分组呢,还没有收到确认。那么,第三超时计时器重传的时间呢?应当比数据在分组平均的往返时间更长一些。那么,这是我们的要注意的这样一个部分。

那么我们再来看一下确认。丢失和确认迟到。那么,我们来看一下这种情况。确认丢失了。那么,确a发送m1?b呢进行确认。那么这个时候嘞。但是呢a在设定的超时重传计时器之这样一个时间呢,没有收到确认那么b发送的m1呢丢确认丢失了。那么这个时候怎么办呢?a呢?超时重传m1。a在超时计时器到期后呢,

又重传m1。那么这个时候呢b就又收到了重传的分组,怎么办呢?这时呢,采取两个行动,第一个丢弃掉这个重复的m1。并且呢,重传。确认向a的发送确认。这是我们的确认丢失的这样一个情况。那么我们再看一下另外一种情况,传输过程呢,没有出现差错,但b对确认m1的。对分组m1的确认迟到了a会收到重复的确认,

对重复的确认的处理了,那么比较简单。收下后就丢弃,并仍然呢会收到重复的m1,并且要同样丢弃重复的m1。然后呢,重传确认分组。通常呢a最终总是可以收到对所有发出的分组的确认,如果a不断重传分组,但总是收不到确认呢,就说明通信线路太差,不能进行通信。通过这些确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的传输。那么像这样的可靠传输协议呢?

通常称为自动重传,请求arq,意思呢?是重传的请求是自动进行的。接收方呢,不需要请求发送方重创某个出错的分组。那么,停止等待的协议的优点呢?是简单,但缺点呢?是我们的信道利用率太低。那么于是呢?我们可以。为了提高。传输效率。

发送方呢?可以不使用低效率的停止等待协议,而是采用流水线传输。流水线传输呢,就是发送方呢,可以连续发送多个分组,不必每发完一个分组呢,就停顿下来,等待对方的确认。这样呢,可以使信道一直有数据呢,不断的传输,这种传输方式呢?可以获得很高的信道利用率。当使用流水线传输的时候呢,

那么我们就要用到这样一个连我们可以呢,使用这样一个连续lr q协议。和滑动窗口协议。接下来我们看一下连续压缩协议。滑动窗口协议呢,比较复杂,那么我们先来看一下,我们可以看一下这样一个运用的实现的实时引用的这个运用部分。看一下这样一个连续lq协议的基本部分。比如说我们这是一个。发送方维持的发送窗口。它的意义呢,是表示位于发送窗口内的五个分组呢,都可以连续的发送出去,而不需要呢,

等待对方的确认。这样呢,信道利用率就提高了。在讨论滑动窗口时呢。我们呢,向前是沿着时间增大的方向,向后呢,是沿着时间减少的方向分组呢,是按顺序序号呢,从小到大发送的。那么,根据连续arq协议规定呢?发送方。每收到一个确认,就把发送窗口呢,

向前滑动一个分组的位置。比如说我们这样呢,收到了第一个分组的确认,就把发送窗口呢,向前一个分组的位置,如果原来已经发送了前五个分组,那么现在就可以发送窗口内的第六个分组了。那么,接收方呢?一般都采用累积确认的方式,就是说接收方不必对收到的分组呢?逐个发送确认,而是在发收到几个分组后呢?对按序到达的最后一个分组呢?发送确认。

这就表示了到这个分组为止的所有分组啊,都已经正确收到了。累积确认有优点的也有缺点,优点呢是容易实现,即使丢失了也不必重传,但缺点呢,不能向发送方反映出己方收到的正确的所有分组的信息。比如说如果发送方发送的前五个分组,中间三个分组丢失了,发接收方呢?只能对前两个分组发生确认,而无法知道后三个分组的下落,于是呢,直播把后三个分组呢都重传一次。这叫做回退n,

表示了需要再退回来重传。已经发送过的n个分组。那么由此可见呢,当通信链路质量不好的时候呢,连续rq协议呢,会带来负面的影响。接下来我们看一下。TCP.可靠通信的实现。TCP连接的每一端呢,都必须设有两个窗口,一个发送窗口,一个接收窗口。TCP的可靠传输机制呢,用自己的序号来进行控制。

TCP所有的确认制度确认呢,都是基于序号,而不是基于报文段的TCP两端的四个窗口呢,经常处于动态变化。TCP连接的往返时间rtt呢?也是也不是固定不变的那么。需要使用特定的算法来估算较为合理的这样一个重传时间,我们接下来看一下TCP报文段。它的一个首部格式。TCP呢?虽然是面向自己留的。但TCP传输的数据单元呢?那么却是报文段一个TCP报文段呢?分为数据和首部两部分。而TCP的全部功能呢,

都体现在它首部中的各字段中的作用。TCP报文段首部的前20个字节呢,是固定的,后面呢4n字节是根据需要呢而增加的选项。因此呢,TCP首播的最小字节呢,是20字节,那么我们来看一下各个部分。首先,原端口和目的端口呢?各站。两字节。分别写入原端口号和目的端口号。TCP的分用功能呢?也是通过端口才能实现。

序号字段呢,占了四字节。TCP连接中传送的数据流中的每一个字节呢,都编上一个序号,序号字段的值呢,则是指本报文段所发送的数据的第。第一个字节的序号。序号呢,占四字节范围呢,是零到二的32次方减,一共有二的32次方的序号。序号增加到二的32次方减一后呢,下一个序号又回到n,也就是说需要使用模32模二的32次方运算。TCP呢是面向自己流的,

在一个TCP传送中,点传连接中传送的自己流的每一个字节呢,都按顺序编号,整个要传送的自己流的起始序号呢。必须连接在建立时建立。首部中的序号字段呢,则是指本报文段所发送的数据的第一个字节的序号。比如说一个报文段,它的序号字段值呢?是301。携带的数据呢,共有100字节,这就表明了本报文段的第一个字节的序号呢,是301,而最后一个字节的序号呢,

是400。那么也就说下一个报文段的数据呢?应当从401开始,那么下一个报文段的序号字段值呢?应当为401。那么,这个报文这个字段呢?也称为报文段序号。那么,接下来我们看一下确认号。确认号呢,占四字节是期望收到的,对方的下一个报文段的数据的第一个字节的序号。那么也就是说,我们的确认号呢,

是希望收到的对方的下一个报文的第一个字节的序号,比如说b。正确收到了a发送来的一个报文段,其序号字段值呢是501,而数据长度呢是200字节。这表明b正确收到了a发送的序号,一直到700为止的数据,因此呢b期望收到的a的下一个数据。序号呢,是701,于是呢b在发送给a的确认报文当中呢,把序号呢置为701。也就是说,如果确认号等于n。则表明了到序号n- 1为止的所有数据呢,

都已正确收到。那么,这是这样一个运用的,这样一个使用的,这样一个运用部分。也就是说确认号呢,是我们。当前,已正确收到的。数据的序号的。下一个字节的下一个字节的序号,那么就是我们的确认号。如果确认号等于n,则表明到序号n- 1为止的所有数据了,都已正确收到。

接下来我们看一下数据偏移。数据偏移了占四位。它指出TCP报文段的数据呢,起始处距离TCP报文段起始处有多远。这个字段呢,实际上是指出TVB报文段的首部长度。由于首部中呢,还有长度不明确的字段选项,因此呢。数数据字段呢,那么要使用这样一个部分。那么但是呢,数据偏移的单位呢?是32位字。那么因此呢,

数据偏移的最大长度呢是64,60字节,那么这是TCP长度的主最大长度,也就是说选项长度呢?不能超过40字节。保留了那么占六位,那么供今后使用,但目前呢,应置零那么这是我们的保留。接下来我们再看一下六控制位六,接下来有六个控制位urur,这样一个控制位。说明该报文段的性质,那么我们首先看一下。urg紧急紧急。

当urg=1时呢,表明紧急指针。字段有效,它告诉系统呢,使报文段中有紧急数据,应当尽快传送,相当于高优先级的数据。而不按原来的排队顺序呢来传送。你比如说已经发送了很长的一个程序了,再在原地上的主机运行,但是发现了一些问题,需要取消该程序的运行,因此呢,要在用户的键盘发出中断命令ctrl+c。如果不使用紧急数据了,

那把这两个字符呢,存储在接收TCP的末尾缓存,只有在所有的数据被处理完后呢,这个字符呢,才被交付接收方的应用进程,这样呢,就浪费了很多时间。当urg至一的时候呢,发送应用进程呢,就告诉发送方的t cpu紧急数据传送,于是发送方呢,就把紧急数据插入到本报文段,数据段的数据的最前面。并且在紧急数据后面的数据呢,仍然是普通数据,

这时呢,要与紧急指针呢,配合使用,那么这是我们的紧急urg。那么,确认ack?仅当ack=1时确认号字段才有效。当ack呢等于零时,那么确认号呢无效?这是我们的确认号字段,这样一个确认号的这样一个部分。接下来我们再看一下推送push。PS h当两个应用进程呢,进行交互式的通信时,有时在一端的应用进程呢,

希望在建入一个命令后呢,就能够收到对方的响应。在这种情况下呢?TCP呢?可以使用我们的推送复习操作。这时啊,对方把发送方TCP呢,把push之一并立即建立一个报文发送出去,接收端呢,收到了push=1的报文后呢,就要尽快的交付给应用进程,而不再等到整个缓冲都填满。再向上交付复位rs 7,当rs 7=1的时候呢,表明TCP连接中出现了严重差错。

必须释放连接,然后呢,重新建立运输连接rst之一呢,还用来拒绝一个非法的报文段呢,或者拒绝打开一个链接。rs 7呢也称为重建位或者重置位。同步syn是用来建立。是连接建立时用来同步序号当syn=1表明了。而ack=0时表明,这是一个连接请求报文。若对方同意建立连接,则在响应的报文段中呢,是syn=1和ack=1。syn置为一呢,就表示这是一个请求连接的或者连接接触报文,

那么这是一个syn的这样一个部分。终止fin用来释放一个连接,当fin=1时表明此报文段的发送方的发送的数据呢,已发送完毕要求呢。释放运输连接。那么,这是我们的这样一些。控制位的部分,接下来我们看一下窗口。窗口呢,占两字节用来让对方设置发送窗口的依据,单位为字节。窗口指的是发送本报文段一方的接收窗口。窗口值告诉对方,从本报文段首部中的确认号算起,

接收方呢?目前允许对方发送的这样一个数据量。那么,之所以要有这个限制呢,是因为接收方的数据缓存空间呢,是有限的,那么窗口值呢?作为让接收方。作为接收方呢,让发送方设置其发送窗口的依据。窗口字段呢,明确指出了现在允许对方发送的数据量窗口值呢,在不断的动态的变化。那么,检验和占两字节。

检验和字段检检验的范围呢,包括手部和数据两部分,在计算检验核实要在TCP报文当中,前面呢,加上12字节的尾首部。紧急指针占两字节,紧急指针呢,只有在urg=1时了才有意义。它指出,本报文端中的紧急数据的字节数。因此呢,紧急指针指出了紧急数据末尾在报文段中的位置。当所有紧急数据处理完后呢?TCP呢?就告诉程序了,

恢复到正常操作。那么,窗口为临时啊,也可发送紧急数据。那么,接下来我们再看一下选项。选项字段呢,长度可变。TCP呢,最初只规定了一种选项,比如说最大报文段mss mss的告诉对方TCP。它的缓存呢?所能接受的报文段的数据字段的最大长度呢?是mss的字节。那么,

这是我们mss呢?是每一个TCP报文段中数据字段的最大长度。那么又说mss呢,是TCP报文段中数据字段的最大长度。数据字段呢,加上TCP首部呢,才等于整个的TCP报文段。接下来我们看一下其他的选项。窗口扩大选项占三字节,其中有一个字节呢,表示一位值s新的窗口值呢,等于把TCP中首部的窗口位数呢,增加到16+s。相当于把窗口值了向左移s位后,实际获得了窗口大小时间戳选项,

占十字节,其中最主要的字段呢,是时间戳指字段四字节。和时间戳回送字段四字节,这是我们的时间戳选项。填充字段呢,是为了使这首部的。长度是四字节的整倍数。接下来我们看一下TCP。可靠传输的实现。那么,我们假设呢?是由我们的。a发送数据。b接收数据b给出确认。

比如说发送窗口的,那么这样呢,我们就可以看到,就有两个窗口的这样一个部分,比如说a的发送窗口,那么和b的接收窗口。我们来看一下以字节为单位的滑动窗口TCP的滑动窗口呢,是以字节为单位的。那么,我们来看一下。假定a收到了b发来的确认报文段,其中呢?窗口值呢,是20字节。确认号。

是31。这就表明呢,在序号31之前的这些数据呢,都已经收到了。b期望收到的呢,下一个序号呢是31。根据这两个数据呢a呢,就构造出自己的发送窗口,那么是这样一个发送窗口呢?等于20的这样一个部分。发送窗口呢,表示在没有收到b的确认的情况下a可以连续的把窗口内的数据呢,都发送出去。凡是已发送过的数据呢?在未收到确认之前都必须暂时保留,

以便在超时重传时的使用。发送窗口内的序号呢,表示允许发送的序号,显然窗口越大,发送窗口呢,发送方就可以在收到对方确认之前呢,连续发送更高的数据。因而呢,可能获得更高的传输效率。发送窗口后沿的部分呢,表示已经收到了,确认这些数据呢,不需要再保留了。而发送窗口前沿的部分呢,表示不允许发送的。

发送窗口的位置啊,由窗口前沿和后沿的共同决定。发送窗口后沿的变化有两种,就是说不动,可能不动,就是没有收到确认的新的确认,或者说钱已收到了新的确认。发送窗口呢,后沿那么不会向后进行运动,向后进行移动,那么就说不能撤销了,已收到的确认。发送窗口前沿呢,通常是不断的向前移动,那么但是有可能不动一个呢,

是没有收到新的确认对方通知的窗口大小也不变。二是收到了新的确认,但对方通知的窗口选项卡缩小了,使得发送窗口选项正好不动。发送窗口前沿呢,可能向后收缩,这是发生在对方通知窗口缩小了。那么通常呢,我们没有进行这样一个做的,这样一个实验的运用的实施的,这样一个实现的。运用的这样一个部分。那么假定呢?我们来看一下。假定a发送了。

数序号。为31到41的这样一些数据。那么这个时候呢,发送窗口位置呢,并未改变。但是呢,发送窗口内靠后有11个字节表示。已发送,但未收到确认而发送窗口内靠前有九个字节是允许发送,但尚未发送的。那么我们看一下。接下来看一下b的接收窗口。b的接收窗口呢,是20在接收窗口外面呢,到30号为止的数据呢,

都是已经发送,并且已经交付主机了。因此呢,在b呢,可以不再保留这些数据。接收窗口类的序号呢,31到50呢,是允许接收的。啊,比如说b收到了,序号为32和33的数据,但这些数据呢,没有按序到的啊,因为序号为31的数据没有收到。b呢,

只能对按序收到的数据中的最高序号进行确认,因此呢b发送的确认报文段中的序号仍是31,而不是33,这样一个32,33的这样一个部分。那么现在呢?我们假设。b收到了,31的数据。并且把31和33呢都交给主机,然后b删除掉,这些数据接着把接收窗口呢,向前移动三个序号。同时呢,给a发送确认其中窗口大小仍是20确认号呢,

就是变成了34。这表明了b呢,已经正收到了,到序号33为止的数据。a收到b的确认后呢,就可以把发送窗口呢向前。滑动三个序号。那么a在继续发送完42到53的这样一些数据后呢?发送窗口内的序号呢,都已用完,但还没有再收到确认此时呢。a的发送窗口呢,已满可用窗口呢,已减小到零,因此呢,

必须停止发送。这是我们的发送窗口,接收窗口的部分。那么发送方呢?把应用进应用进程,把字节流呢写入TCP的发送,缓存,接收方的应用进程呢?从TCP的接收,缓存中呢?读取字节流。那么,这是我们的发送缓存这样一个部分。那么,缓存空间和序号空间都是有限的,

并且是巡航使用的。由于实际上缓存呢,和窗口中的字节数量比较大,那么我们呢?那么简单的来写一下这样一个。实现的。运运行的实施的这样一个进行的这样一个部分。那么我们看一下。这样一个发送方的情况。发送应用程序呢?传给发送方TCP准备的数据TCP呢?已发送,但尚未收到确认的数据。发送方呢?发送窗口呢,

通常只是发送缓存的一部分,当已确当已被确认的数据呢,应当从发送缓存中删除,因此发送缓存和发送窗口的后延是重合的。发送应用进程。最后写入缓存的字节呢,减去最后被确认的字节,就是还保留在缓存中的被写入的字节数。发送应用进程呢,必须控制写入缓存的速率,那么不能太快,否则缓存了就没有存放出去的空间。那么我们再看一下接收方的情况,接收缓存呢,用来暂时存放按需到达的,

但尚未被应用程序呢。读取的数据。以及呢,未按序到达的数据。如果收到的分组有差错,就要丢弃,如果接收应用进程呢,来不及读取,收到的数据呢,接收缓存呢,最终会。放满使接触窗口的减到零。如果接收应用程序了,能够及时的从接收缓存中读出于收到的数据,那么接收窗口呢,

就可以增大,但最大不能超过接收缓存的大小。那么,我们来看一下。a虽然a的发送窗口呢和b的接是根据b的接入窗口设置了,但在同一时刻。a的发送窗口呢,并不总和b的接收窗口一样大,因此呢,因为呢,通过网络传送窗口值呢,需要一定的时间之后一定的时间的这样一个等待。发送方呢,还可能根据网络当时的拥塞情况呢,减少自己的发送窗口值。

嗯哼。对于不按需到达的数据呢?那么,并没有如何这样一个。处理的这样一个方式,通常呢,是先临时存放在接收窗口中,等到自解流缺少的数据收到之后呢,再按序上交给上层的这样一个应用进程。TCP呢,要求接收方。必须拥有累积确认的功能,这样呢,可以减少传输开销,那么最后呢,

我们再说一下。TCP的通信呢,是全双工通信的。通信的每一方呢,都在发送和接收报文段,那么这是我们TCP的这样一个部分。接下来我们再看一下超时重传时间的选择,那么TCP的发送方在规定的时间内呢?没有收到,重正确没有收到确认就要重传报文段。那么,我们来看一下。重传时间的这样一个选择,应该怎样来运用这样一个部分?TCP呢采用了一种自适性算法。

它记录一个报文段发出的时间,以及呢,收到相应确认的时间。这两个时间之差呢,就是报文段的往返时间rtt。TCP呢,保留了rtt的一个加权,平均往返时间rt ts,这称为一个平滑的。往返时间。每当第一次测量rtt样本时,啊rtt值啊,就取测到的rtt样本值,但每后以后每测到一个新的rtt样本呢?就按照这样一个公式呢,

重新计算一次rt ts就说新的rt ts呢,等于一减阿尔法乘以旧的rt ts,加上阿尔法乘以新的rtt样本。那么,在这个式子当中,零小于阿尔法,小于零小于等于阿尔法,小于一若阿尔法,很接近于零。这表明,新的rtds值了和旧的rtds值了变化不大。而对新的rtd值的样本影响不大,若阿尔法呢?选择如果接近一则表示新的rtds值了,受新的rtd样本值较大。

已成为建议标准的rfc推荐的阿尔法值呢,为八分之一。那么,用这种加权方法得到的这样一个加权平均往返时间rtds呢?就比测量出的rtds是更加平滑。那么,超时计时器设置的重传时间rto呢?应该越大于上面得出了加权平均往返时间rt ts。那么我们可以呢,用这样一个公式呢来计算rtt to。rto呢等于rt ts+4×rt tdr ttd呢是rtt的加偏差的加权平均值。好吧,我们来看一下怎么计算rtd d在第一次测量时rtd值呢?取为测量到的rtd样本值的一半。在以后的测量中,

那么使用这样一个公式呢来计算加权平均的rtd,新的rtd d呢等于一减rf beta乘以旧的rtd d加上beta乘以rt。gts减新的rgt样本的这样一个绝对值。那么,这个贝塔呢?是个小于一的系数,那么它的推荐值呢?是四分之一,那么就是零点二五。那么TCP报文段一没有收到确认重传后呢?收到了确认的报文段。那么,如何判断此报文段是原来的?报文段的确认还是对后来的报文段的确认呢,那么由于重传的报文段呢,

和原来的报文段完全一样,因此呢?在原主机收到确认后呢,无法做出正确的判断,而正确的判断呢,对确定加减平均的rtds关系很大。那么,若收到的确认呢?是对重传报文段的确认,那么这样呢?计算出来的那么却那么却当成是原来的报文段的确认。那么,这样呢?计算出来的rto呢?就会偏大,

那么若后面的报文段呢?又是重传,后来才确认的经过的重传报文段,那么得到这rto呢?会更加的正常,这样一个部分。比如说在计算平均往返时间rtd时,只要包文段重传了,就不采用其往返时间样本,这样的得出的加权平均是往返时间的rtds了和。和超时重装rto呢?那么就比较准确,那么就是我们的这样一个卡人算法,这样一个部分。那么,

接下来我们再看一下选择确认sack。那么,当接收方?在接收和前面。字节流不连续的两个字节块,如果这些字节的序号呢,都在接收窗口内,那么接收方呢,就要先收下这些数据,然后把这些信息呢告诉发送方,使发送方呢,不再重复发送这样一个数据。收到的数据。比如说我们收到了这样一个字节,又不连续,

那么我们收到这个字节流呢?和前后字节流不连续的每个字节块呢?都有两个边界,左边界和右边界。第一个字节块的左边界呢,是一五零一右边界呢,是三零零一左边字节呢,左边界呢,指出了字节块第一个字节的序号,但右边字减一呢,才是我们。字节块中最后一个字节的序号。那就是我们编辑收到的自检的不连续的这样一个部分。那么,如果要使用选择确认呢?

在建立TCP连接时,就要在TCP首部中的选项中呢?加上允许sack的选项,而双方呢,都必须事先商量好,如果使用选择确认,那么在原来首部中的确认号字段中的用法仍然不变。只是在以后TCP报文的首部中呢,都增加了sa选项,以报告了,收到了不连续的字节块的边界。由于首部长度呢,首部选项的长度呢,最多只有44节,而指明一个边界呢,

就要用掉四个字节,因此呢,在选项中呢,最多能指明四个字节块的,这样一个边界信息。那么,这是这样一个用的,这样一个使用的用的,这样一个部分的,这样一个这样一个方式。呃,接下来我们看一下TCP的流量控制,一般来说我们总是希望数据传输的快一些。但如果发送方呢?把数据发送的过快,

接收方呢?就可能来不及接收,这会造成数据的丢失。流量控制呢,就是让发送方的发送数据呢,不要太快,也不要使网站接收方来得及接收。也要使了,也不要使了,网络发生拥塞,利用滑动窗口机制呢,可以很方便的在TCP连接上呢,实现对发送方的流量控制。比如说我们举个例子a向b发送数据。那么,

首先呢,a发送的序号。a发送了这样一个数据。一至100。那么这个时候嘞。那么,最开始的时候呢?b告诉a,它的接收窗口呢?rw nd呢?等于400字节,那么最开始的时候呢?a发送了一百一百字节,还能发送300字节。接下来呢?

a再发送100字节,还能发送200字节,那么接下来呢?a再发送了100字节,但是丢失了。那么接下来呢?a收到了这样一个确认,那么确认号是201。发送窗口呢,是300。那么这个时候呢,允许a。发送序号。201到500共300字节,那么接下来呢?

a又发送了100字节之后呢?再。发送了100字节,发送了301到400以及呢?401到500那么不能再发送新的数据了。那么,接下来a超时重传旧的数据,但是不能呢,发送新的数据,接下来呢?a,再收到一个确认允许a发送序号501到600共100字节,那么这个时候呢?a,再发送了序号501至600,

那么不能再发送了。这个时候呢a又收到一个确认,它表示了已经收到了数据,但是发送窗接触,但是我们的接收窗口呢为零,那么就不能够再发送数据了。那么,这是我们的。是这样一个用滑动窗口机制了,怎么实现流量控制的这样一个部分?


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5432考试网 ( 蜀ICP备2022024372号|川公网安备51152402000101号 )|网站地图

GMT+8, 2024-5-19 20:50 , Processed in 0.080139 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表