当前位置: 首页 > news >正文

计算机网络抄手 运输层

一、运输层协议概述

1. 进程之间的通信

从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时,都要使用协议栈中的运输层,而网络核心部分中的路由器在转发分组时只用到下三层的功能。

下图说明运输层的作用。设局域网LAN1上的主机A和局域网LAN2上的主机B通过互连的广域网WAN进行通信。IP协议能够把源主机A发送出的分组,按照首部中的目的地址,送交到目的主机B,那么,为什么还需要运输层呢?

IP层来说,通信的两端是两台主机。IP数据报的首部明确地标志了这两台主机的IP地址。但”两台主机之间的通信“这种说法不够明确。真正进行通信的实体是在两台主机中的哪个构件呢?是主机中的应用进程,是一台主机中的应用进程和另一台主机中的应用进程在交换数据(通信)。严格来讲,两台主机进行通信就是两台主机中的应用进程互相通信IP协议虽然能把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付主机的应用进程。

通信的两端应当是两个主机中的应用进程。也就是说,端到端的通信是应用进程之间的通信。在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。例如,用户在使用浏览器查找某网站的信息时,其主机的应用层运行浏览器客户进程。如果在浏览网页同时,还要用电子邮件给网站发送反馈意见,那么主机的应用层就还要运行电子邮件的客户进程。

下图中,主机A的应用进程AP1和主机B的应用进程AP3通信,与此同时,应用进程AP2也和对方的应用进程AP4通信。这表明运输层有一个很重要的功能-复用分用。”复用“是指在发送方不同的应用进程都可以使用同一个运输层协议传送数据(当然需要加上适当的首部),而”分用“是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程。

下图中的两个运输层之间有一个深色双向粗箭头,写明”运输层提供应用进程间的逻辑通信“。”逻辑通信“的意思是:从应用层来看,只要把应用层报文交给下面的运输层,运输层就可以把这报文传送到对方的运输层,好象这种通信就是沿水平方向直接传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。数据的传送是沿着图中的虚线方向(经过多个层次)传送的。”逻辑通信“的意思是”好像是这样通信,但事实上并非真的这样通信“。

这里可以看出网络层和运输层有明显区别。网络层为主机之间的通信提供服务,而运输层则在网络层的基础上,为应用进程之间的通信提供服务。然而正如后面要讨论的,运输层还具有网络层无法代替的许多其他功能。

运输层还要对收到的报文进行差错检测。在网络层,IP数据报首部中的检验和字段,只检验首部是否出现差错而不检查数据部分。

根据应用程序的不同需求,运输层需要有两种不同的运输协议,即面向连接的TCP无连接的UDP

运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道,但这条逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别。当运输层采用面向连接的TCP协议时尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。但当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道


2. 运输层的两个主要协议

TCP/IP运输层的两个主要协议都是互联网的正式标准,即:

(1)用户数据报协议UDP(User Datagram Protocol)[RFC 768,STD6]

(2)传输控制协议TCP(Transmission Control Protocol)[RFC 793,STD7]

下图给出了这两种协议在协议栈中的位置。

按照OSI的术语,两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元TPDU(Transport Protocol Data Unit)。但在TCP/IP体系中,则根据所使用的协议是TCP或UDP,分别称之为TCP报文段UDP用户数据报

UDP在传送数据之前不需要先建立连接。远地主机的运输层在受到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但由于UDP非常简单,在某些情况下UDP是一种最有效的工作方式。

TCP提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或多播服务。由于TCP要提供可靠地、面向连接的运输服务,因此不可避免地增加了许多开销,如确认、流量控制、计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多地处理机资源。

下标给出了一些应用和应用层协议主要使用的运输层协议(UDP 或TCP)。


3. 运输层的端口

运输层的复用分用功能。其实日常生活中也有很多复用和分用的例子。假定一个机构的所有部门向外单位发出的公文都由收发室负责寄出,这相当于各部门都”复用“这个收发室。当收发室收到从外单位寄来的公文时,则要完成”分用“功能,即按照信封上写明的本机构的部门地址把公文正确进行交付。

运输层的复用共和分用功能也是类似的。应用层所有的应用进程都可以通过运输层再传送到IP层(网络层),这就是复用。运输层从IP层收到发送给各应用进程的数据后,必须分别交付指明的各应用进程,这就是分用。显然,给应用层的每个应用进程赋予了一个非常明确的标志至关重要。

在单个计算机中的进程是用进程标识符(一个不大的整数)来标志的。但是在互联网环境下,用计算机操作系统所指派的这种进程标识符来标志运行在应用层的各种应用进程则是不行的。因为在互联网上使用的计算机的操作系统种类很多,而不同的操作系统又使用不同格式的进程标识符。为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法(而这种方法必须与特定操作系统无关)对TCP/IP体系的应用进程进行标志。

但是,把一个特定机器上运行的特定进程,指明为互联网上通信的最后终点是不可行的。这是因为进程的创建和撤销都是动态的,通信的一方无法知道和识别对方机器上的进程。另外,我们往往需要利用目的主机提供的功能来识别终点,而不需要知道具体实现这个功能的进程是哪一个。

在应用层和运输层之间的界面上,设置一个特殊的抽象的”门“。应用层中的应用进程要通过运输层发送到互联网,必须要通过这个门。而别的主机上的应用进程要寻找本主机中的某个应用进程,也必须通过这个门。这样,就可以把应用层和运输层的界面上这些”门“,设为通信的抽象终点。这些抽象终点的正式名称就是协议端口(protocol port),一般简称为端口(port)。每一个端口用一个称为端口号(port number)的正整数来标志。主机的操作系统提供了接口机制,使得进程能够通过这种机制找到所要找的端口。

注意,这种在协议栈层间的抽象的协议端口是软件端口,和路由器或交换机上的硬件端口是不同的概念。硬件端口是不同硬件设备进行交互的端口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的地点。不同的操作系统具体实现端口的方法可以是不同的。

当应用层要发送数据时,应用进程就把数据发送到适当的端口,然后运输层从该端口读取数据,进行后续的处理(把数据发送到目的主机)。当运输层收到对方主机发来的数据时,就把数据发送到适当的端口,然后应用进程就从该端口读取这些数据。显然,端口必须有一定容量的缓存来暂时存放数据。

后面的UDPTCP的首部格式中(图5-5,图5-14),都有源端口目的端口这两个重要字段。这两个端口就是运输层和应用层进行交互的地点。

TCP/IP的运输层用一个16位端口号来标志一个端口。但注意,端口号只具有本地意义,它只是为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口。在互联网不同计算机中,相同的端口号是没有关联的。16位的端口号可允许有65535个不同的端口号,这个数目对一个计算机来说是足够用的。

由此可见,两个计算机中的进程要通信,不仅需要知道对方的IP地址(找到对方的计算机),而且要知道对方的端口号(找到对方计算机中的应用进程)。这和寄信的过程类似,写信时填地址(相当于IP地址),还有收件人的姓名(相当于端口号)。信封上还要写自己的地址和姓名。收信人回信时,很容易在信封上找到发信人的地址和姓名。互联网上的计算机通信采用客户-服务器方式。客户在发起通信请求时,必须先知道对方服务器的IP地址和端口号。因此运输层的端口号分为以下两大类。

(1)服务器端使用的端口号

这里又分为两类,最重要的一类叫作熟知端口号(well-known port number)或全球通用端口号,数值为0~1023。这些熟知端口号最初公布在文档中[RFC 1700,STD2],但后来因为互联网发展太快,这种标准文档无法随时更新,因此在RFC3232中就把RFC1700列为陈旧的,而当前最新的熟知端口号可在网址www.iana.org上查到。IANA把这些熟知端口号指派给了TCP/IP最重要的一些应用程序,让所有用户都知道。当一种新的应用程序出现后,IANA必须为它指派一个熟知端口,否则在互联网上的其他应用进程就无法和它进行通信。和电话通信相比,熟知端口号相当于所有人都知道的应急电话120,110等。下标给出了一些常用的熟知端口号。

另一类叫作登记端口号,数值为1024~49151。这类端口号是为没有熟知端口号的应用程序使用的。要使用这类端口号必须在IANA按照规定的手续登记,以防止重复。

(2)客户端使用的端口号

数值为49152~65535。由于这类端口号仅在客户进程运行时才动态选择,因此又叫作短暂端口号。这类端口号就是临时端口号,留给客户进程选择临时使用。当服务器进程收到客户进程的报文后,就知道了客户进程所使用的端口号,因而可以把数据发送给客户进程。通信结束后,刚才已使用过的客户端口号就被系统收回,以便给其他客户进程使用。


二、用户数据报协议UDP

1. UDP概述

用户数据报协议UDP只在IP的数据报服务至上增加了很少一点功能,这就是复用和分用的功能以及差错检测的功能。UDP的主要特点:

(1)UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。

(2)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。

(3)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文,如下图所示。在接收方的UDP,对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程。也就是说,UDP一次交付一个完整的报文。因此,应用程序必须选择合适大小的报文。若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片,这会降低IP层的效率。反之,若报文太短,UDP把它交给IP层后,会使IP数据报的首部的相对长度太大,这也降低了IP层的效率。

(4)UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用很重要。很多的实时应用(如IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延。UDP正好适合这种要求。

(5)UDP支持一对一、一对多、多对一和多对多的交互通信

(6)UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

举例说明UDP的通信和端口号的关系(如下图所示)。主机H1中有三个应用进程分别要和主机H2中的两个应用进程进行通信。通信双方的关系是:P1->P4,P2->P4,P3->P5。主机H1的操作系统为这三个进程分别指派了端口,其端口号分别为a,b和c。图中位于应用层和运输层之间的小方框代表端口。在端口小方框中间还画有队列,表示端口具有缓存的功能,可以把收到的数据暂时存储一下。有时也可以把队列画成双向的,即分别表示存放来自应用层或运输层的数据。现在假定主机H1中的进程已经知道了对方进程P4和P5的端口号分别为x和y,于是在主机H1的运输层就可以组装成需要发送的UDP用户数据报,其中最重要的地址信息(源端口,目的端口)分别是(a,x),(b,x)和(c,y)。下图中把运输层以下的都省略了。因此,进程之间的通信现在可以看成是两个端口之间的通信。

图中在两个运输层之间有一条虚线,表示在两个运输层之间可以进行通信,而不是在一条连接。但这种通信是不可靠的通信,即所发送的报文在传输过程中有可能丢失,同时也不保证报文都能按照发送的先后顺序到达终点。这正是UDP通信的特点:简单方便,但不可靠。如果想要得到可靠地运输层通信,那就要使用TCP进行通信。注意,在两个运输层的UDP之间没有建立连接。

上图的例子画出了多对一的通信(a->x,b->x)。如果改成a->x,a->y,则是一对多的情况了。

主机H1中的3个应用进程,把用户数据通过各自的端口传送到了运输层后,就共用一个网络层协议,把收到的UDP用户数据报组装成不同的IP数据报,发送到互联网。这就是UDP的复用功能。主机H2的网络层收到3个IP数据报后,提取出数据部分(即UDP用户数据报),然后根据其首部中的目的端口号,分别传送到相应的端口,以便上层的应用进程到端口读取数据。这就是UDP的分用功能。

虽然某些实时应用需要使用没有拥塞控制的UDP,但当很多的源主机同时都向网络发送高速率的实时视频流时,网络就有可能发生拥塞,结果大家都无法正常接收。因此,不使用拥塞控制功能的UDP有可能会引起网络产生严重的拥塞问题。

还有一些使用UDP的实时应用,需要对UDP的不可靠的传输进行适当的改进,以减少数据的丢失。这种情况下,应用进程本身可以在不影响应用的实时性的前提下,增加一些提高可靠性的措施,如采用前向纠错或重传已丢失的报文。


2. UDP的首部格式

用户数据报UDP有两个字段:数据字段首部字段首部字段很简单,只有8个字节(如下图),由4个字段组成,每个字段的长度都是2字节。各字段意义如下:

(1)源端口         源端口号。在需要对方回信时选用。不需要时可全为0。

(2)目的端口     目的端口号。这在终点交付报文时必须使用。

(3)长度            UDP用户数据报的长度,其最小值是8(仅有首部)。

(4)校验和        检测UDP用户数据报在传输中是否有差错。有错就丢弃。

如果接收方UDP发现收到的报文中目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制协议ICMP发送“端口不可达”差错报文给发送方。上一章的”ICMP的应用举例“谈论traceroute时,就是让发送的UDP用户数据报故意使用一个非法的UDP端口,结果ICMP就返回”端口不可达“差错报文,因而达到了测试的目的。

UDP用户数据报首部中检验和的计算方法有些特殊。在计算检验和时,要在UDP用户数据报之前增加12个字节的伪首部。所谓”伪首部“是因为这种伪首部并不是UDP用户数据报真正的首部。只是计算检验和时,临时添加在UDP用户数据报前面,得到一个临时的UDP用户数据报。检验和就是按照这个临时的UDP用户数据报来计算的。伪首部既不向下传送也不向上递交,而仅仅是为了计算检验和。上图的最上面给出了伪首部各字段的内容。

UDP计算检验和的方法和计算IP数据报首部检验和的方法相似。但不同的是:IP数据报的检验和只检验IP数据报的首部,但UDP的检验和是把首部和数据部分一起都检验。在发送方,首先是先把全零放入检验和字段。再把伪首部以及UDP用户数据报看成是由许多16位的字串接起来的。若UDP用户数据报的数据部分不是偶数个字节,则要填入一个全零字节(但此字节不发送)。然后按二进制反码计算出这些16位字的和。将此和的二进制反码写入检验和字段后,就发送这样的UDP用户数据报。在接收方,把收到的UDP用户数据报连同伪首部(以及可能的填充全零字节)一起,按二进制反码求这些16位字的和。当无差错时其结果应为全1。否则就表明有差错出现,接收方就应丢弃这个UDP用户数据报(也可以上交给应用层,但附上出现了差错的警告)。下图给出了一个计算UDP检验和的例子。这里假定用户数据报的长度是15字节,因此要添加一个全0的字节。这种简单的差错检验方法的检错能力并不强,但它简单,处理起来较快。

上图所示,伪首部的第3字段是全零;第4字段是IP首部中的协议字段的值。以前讲过,对于UDP,此协议字段值为17;第5字段是UDP用户数据报的长度。因此,这样的检验和,既检查了UDP用户数据报的源端口号和目的端口号以及UDP用户数据报的数据部分,有检查了IP数据报的源IP地址和目的地址。


三、传输控制协议TCP概述

1. TCP最主要的特点

TCP是TCP/IP体系中非常复杂的一个协议。TCP最主要的特点:

(1)TCP是面向连接的运输层协议。这就是说,应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP连接。也就是说,应用进程之间的通信好像在”打电话“:通话前要先拨号建立连接,通话结束后要挂机释放连接。

(2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)。

(3)TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复,并且按需到达。

(4)TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。在发送时,应用程序在把数据传送给TCP的缓存后,就可以做自己的事,而TCP在合适的时候把数据发送出去。在接收时,TCP把收到的数据存入缓存,上层的应用进程在合适的时候读取缓存中的数据。

(5)面向字节流。TCP中的”“指的是流入到进程或从进程流出的字节序列。”面向字节流“的含义是”:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅堪称是一连串的无结构的字节流。TCP并不知道所传送的字节流的含义。TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系(例如,发送方应用程序交给发送方的TCP共有10个数据块,但接收方的TCP可能只用了4个数据块就把收到的字节流交付上层的应用程序)。但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一致。当然,接收方的应用程序必须有能力识别收到的字节流,把它还原成有意义的应用层数据。下图是上述概念的示意图。

为了突出示意图要点,只画出了一个方向的数据流。注意,在实际的网络中,一个TCP报文段包含上千个字节很常见,而图中的各部分都之画出了几个字节,仅仅方面地说明“面向字节流”的概念。另一点很重要的是,上图中的TCP连接是一条虚连接(也就是逻辑连接),而不是一条真正的物理连接。TCP报文段先要传送到IP层,加上IP首部后,再传送到数据链路层;再加上数据链路层的首部和尾部后,才离开主机发送到物理链路。

上图可看出,TCP和UDP在发送报文时所采用的方式完全不同。TCP并不关心应用进程一次把多长的报文发送到TCP的缓存中,而是本剧对方给出的窗口之和当前网络拥塞的程度,来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)。如果应用进程传送到TCP缓存的数据块太长,TCP就可以把它划分成为短一些的数据块再传送。如果应用进程一次只发来一个字节,TCP也可以等待积累足够多的字节后再构成报文段发送出去。


2. TCP的连接

TCP把连接作为最基本的抽象。TCP的许多特性都与TCP是面向连接的这个基本特性有关。

每一条TCP连接有两个端点。那么,TCP连接的端点是什么呢?不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口。TCP连接的端点叫作套接字(socket)插口。根据RFC793的定义:端口号拼接到(concatenated withIP地址即构成了套接字。因此,套接字的表示方法在点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开。例如,若IP地址是192.3.4.5而端口号是80,那么得到的套接字就是(192.3.4.5:80)。总之,有:

每一条TCP连接唯一地被通信两端的两个端点(即套接字对 socket pair)所确定。即:

这里IP1和IP2分别是两个端点主机的IP地址,而port1和port2分别是两个端点主机中的端口号。因此,TCP连接就是两个套接字socket1和socket2之间的连接。套接字socket是个很抽象的概念。

总之,TCP连接就是由协议软件所提供的一种抽象。虽然有时为了方便,也可以说,在一个应用进程之间建立了一条TCP连接,但一定要记住:TCP连接的端点是个很抽象的套接字,即(IP地址:端口号)。记住:同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在不同的TCP连接中。

本来socket的意思是插座(或插口)。选用socket这个名词是相当准确的。其实一条TCP连接就像一条电缆线,其两端都各带有一个插头。把每一端的插头插入位于主机的应用层和运输层之间的插座后,连个主机之间的进程就可以通过这条电缆线进行可靠通信了。但插座这个名词很容易让人想起来是个硬件,而socket是个软件名词,这样”套接字“就成了socket的标准译名了。

注意,socket这个名词有时容易使人把一些概念混淆,因为随着互联网的不断发展以及网络技术的进步,同一个名词socket可表示多种不同的意思。例如:

(1)允许应用程序访问连网协议的应用编程接口API,即运输层和应用层之间的一种接口,称为socket API,简称为socket。

(2)socket API中使用的一个函数名也叫作socket。

(3)调用scoket函数的端点称为socket,如”创建一个数据报socket“。

(4)调用socket函数时,其返回值称为socket描述符,可简称为socket。

(5)在操作系统内核中连网协议的Berkeley实现,称为socket实现


四、可靠传输的工作原理

TCP发送的报文是交给IP层传送的。但IP层只能提供尽最大努力服务,也就是说,TCP下面的网络所提供的是不可靠的传输。因此,TCP必须采用适当的措施才能使得两个运输层之间的通信变得可靠。

理想的传输条件有以下两个特点:

(1)传输信道不产生差错。

(2)不管发送方以多块的速度发送数据,接收方总是来得及处理收到的数据。

在这样的理想传输条件下,不需要采用任何措施就能够实现可靠传输。

然而实际的网络都不具备以上两个理想条件。但可以使用一些可靠传输协议,当出现差错时让发送方重传出现差错的数据,同时在接收方来不及处理收到的数据时,及时告诉发送方适当降低发送数据的速率。这样,本来不可靠的传输信道就能够实现可靠传输了。


1. 停止等待协议

全双工通信

1. 无差错情况

2. 出现差错

3. 确认丢失和确认迟到

2. 连续ARQ协议

五、TCP报文段的首部格式

六、TCP可靠传输的实现

1. 以字节为单位的滑动窗口

2. 超时重传时间的选择

3. 选择确认SAK

七、TCP的流量控制

1. 利用滑动窗口实现流量控制

2. TCP的传输效率

八、TCP的拥塞控制

1. 拥塞控制的一般原理

2. TCP的拥塞控制

3. 主动队列管理AQM

九、TCP的运输连接管理

1. TCP的连接建立

2. TCP的连接释放

3. TCP的优先状态机

相关文章:

  • 【Javascript Day19】BOM
  • Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例
  • deepseek-r1系列模型部署分别需要的最低硬件配置
  • 4.7 模型训练基类Trainer:Hugging Face工业级训练引擎深度剖析
  • windows事件倒计时器与提醒组件
  • 4.6 模型训练基类Trainer:Hugging Face工业级训练引擎深度剖析
  • java数据结构_优先级队列(堆)_6.1
  • 挖掘图片的秘密:如何用piexif提取和修改Exif数据
  • 当我问Deepseek:国产8K摄像机有哪些?
  • WebSocket(WS)协议系列(二)事件机制
  • 防泄密软件可以管理电脑的使用,还能防止数据泄漏... 原创
  • 使用Catcho阻止app闪退
  • Docker 在微服务架构中的应用(一)
  • HTML5 面试题
  • 程序员学英文之At the Hotel
  • Redis存储⑨Redis的持久化_RDB和AOF
  • 二、《重学设计模式》-UML类图
  • 在虚拟机中搭建Spark学习环境的完整指南
  • priority_queue创建堆
  • Vue3.5 企业级管理系统实战(七):Sidebar组件开发 1
  • 新任国防部新闻发言人蒋斌正式亮相
  • 全国人大常委会今年将初次审议检察公益诉讼法
  • 普京批准俄方与乌克兰谈判代表团人员名单
  • 陕西一村民被冒名贷款40余万续:名下已无贷款,将继续追责
  • 陕西河南山西等地将现“干热风”灾害,小麦产区如何防范?
  • 佩斯科夫:若普京认为必要,将公布土耳其谈判俄方代表人选