欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種報(bào)文重傳的方法、請(qǐng)求端、響應(yīng)端以及系統(tǒng)的制作方法

文檔序號(hào):7805600閱讀:170來(lái)源:國(guó)知局
一種報(bào)文重傳的方法、請(qǐng)求端、響應(yīng)端以及系統(tǒng)的制作方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種報(bào)文重傳的方法、請(qǐng)求端、響應(yīng)端以及系統(tǒng),其中一種報(bào)文重傳的方法包括:向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所述消息包括至少一個(gè)報(bào)文;獲得響應(yīng)端發(fā)送來(lái)的報(bào)錯(cuò)消息;根據(jù)所述報(bào)錯(cuò)消息獲得偏移值,并根據(jù)所述偏移值獲得出錯(cuò)報(bào)文相對(duì)于出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址;根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào),定位出所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址;根據(jù)所述偏移地址和出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,定位出出錯(cuò)報(bào)文的起始存儲(chǔ)地址,并從出錯(cuò)報(bào)文的起始存儲(chǔ)地址處向響應(yīng)端重傳報(bào)文。采用本發(fā)明在報(bào)文傳送出錯(cuò)重傳出錯(cuò)報(bào)文時(shí),且具有延時(shí)小和操作簡(jiǎn)單的特點(diǎn)。
【專(zhuān)利說(shuō)明】一種報(bào)文重傳的方法、請(qǐng)求端、響應(yīng)端以及系統(tǒng)

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及通信領(lǐng)域,尤其涉及一種報(bào)文重傳的方法、請(qǐng)求端、響應(yīng)端以及系統(tǒng)。

【背景技術(shù)】
[0002] RDMA(Remote Direct Memory Access,遠(yuǎn)端直接數(shù)據(jù)存?。┘夹g(shù)用于網(wǎng)絡(luò)中服務(wù) 器間的數(shù)據(jù)傳輸,數(shù)據(jù)傳輸過(guò)程中,請(qǐng)求端服務(wù)器的帶RDMA功能的網(wǎng)卡通過(guò)零復(fù)制技術(shù)經(jīng) 網(wǎng)絡(luò)把數(shù)據(jù)直接傳輸?shù)巾憫?yīng)端服務(wù)器的存儲(chǔ)區(qū)。在具體的實(shí)現(xiàn)過(guò)程中,響應(yīng)端服務(wù)器可能 會(huì)因?yàn)楦鞣N原因而接收數(shù)據(jù)錯(cuò)誤或者超時(shí)接收數(shù)據(jù)。在這種情況下,需要請(qǐng)求端服務(wù)器重 新傳輸數(shù)據(jù)到響應(yīng)端服務(wù)器,即數(shù)據(jù)重傳,由于數(shù)據(jù)是以報(bào)文形式進(jìn)行傳輸?shù)?,故?shù)據(jù)重傳 又稱(chēng)為報(bào)文重傳。
[0003] 目前報(bào)文重傳的方法是,請(qǐng)求端服務(wù)器需要為每個(gè)用于傳輸?shù)臄?shù)據(jù)隊(duì)列的每個(gè)消 息記錄首報(bào)文的序列號(hào)并保存在表項(xiàng)中,在響應(yīng)端服務(wù)器發(fā)送來(lái)報(bào)錯(cuò)消息時(shí)從表項(xiàng)中讀取 首報(bào)文的序列號(hào),通過(guò)將首報(bào)文的序列號(hào)與報(bào)錯(cuò)消息中的出錯(cuò)報(bào)文的序列號(hào)對(duì)比,獲取出 錯(cuò)報(bào)文存儲(chǔ)地址的偏移地址,進(jìn)而確定報(bào)文重傳開(kāi)始的位置,進(jìn)行報(bào)文重傳。但是,當(dāng)數(shù)據(jù) 隊(duì)列規(guī)模較大(例如256K?1M)以及每個(gè)數(shù)據(jù)隊(duì)列支持的并發(fā)消息較多(例如16K)的時(shí) 候,所述表項(xiàng)將耗費(fèi)巨大的存儲(chǔ)資源(即16K*256K?16K*1M bits)。顯然,這樣大的表項(xiàng) 硬件存儲(chǔ)設(shè)備難以承受,并且放在硬件存儲(chǔ)設(shè)備不利于擴(kuò)展,故該方法通常將上述表項(xiàng)放 到主機(jī)服務(wù)器的內(nèi)存中,這樣每次發(fā)送完一個(gè)消息時(shí)需要請(qǐng)求端服務(wù)器在上述內(nèi)存中增添 該表項(xiàng)內(nèi)容,收到響應(yīng)端服務(wù)器發(fā)送來(lái)的報(bào)錯(cuò)消息時(shí)需要從上述內(nèi)存中讀取該表項(xiàng)內(nèi)容, 增加了延時(shí)和操作的復(fù)雜度。


【發(fā)明內(nèi)容】

[0004] 本發(fā)明實(shí)施例提供一種報(bào)文重傳的方法、請(qǐng)求端、響應(yīng)端以及系統(tǒng),用于在報(bào)文傳 送出錯(cuò)重傳出錯(cuò)報(bào)文時(shí),減少延時(shí)性和提高操作簡(jiǎn)便性。
[0005] 為了解決上述技術(shù)問(wèn)題,本發(fā)明實(shí)施例第一方面提供了一種報(bào)文重傳的方法,包 括:
[0006] 向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所述消息包括至 少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都是連續(xù)編號(hào) 的;
[0007] 獲得所述響應(yīng)端發(fā)送來(lái)的報(bào)錯(cuò)消息,所述報(bào)錯(cuò)消息包括用于獲得所述出錯(cuò)報(bào)文的 序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息、所述出錯(cuò)報(bào)文所 屬消息的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào);
[0008] 根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào) 文的序列號(hào)的偏移值的信息獲得所述偏移值,并根據(jù)所述偏移值和所述報(bào)文的長(zhǎng)度的乘 積,獲得所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址;
[0009] 根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào),定位出所述出錯(cuò) 報(bào)文所屬消息的起始存儲(chǔ)地址,其中,所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的 序列號(hào)兩者與所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān)系;
[0010] 根據(jù)所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址和所述出 錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,并從所述出錯(cuò)報(bào) 文的起始存儲(chǔ)地址處向所述響應(yīng)端重傳報(bào)文,其中,所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地 址即為所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的起始存儲(chǔ)地址。
[0011] 在第一方面的一種可能實(shí)現(xiàn)方式中,所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于 所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息,具體包括:
[0012] 所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào);
[0013] 所述根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的 首報(bào)文的序列號(hào)的偏移值的信息獲得所述偏移值,具體包括:
[0014] 根據(jù)所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào),計(jì)算出 所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值,所述出 錯(cuò)報(bào)文的序列號(hào)是以所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)為基數(shù),按照一定順序進(jìn)行 計(jì)數(shù)得到的一個(gè)數(shù)值。
[0015] 本發(fā)明實(shí)施例第二方面提供了一種報(bào)文重傳的方法,包括:
[0016] 接收請(qǐng)求端發(fā)送的多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所述消息包 括至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都是連續(xù)編 號(hào)的;
[0017] 在從所述數(shù)據(jù)隊(duì)列包括的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí),生成報(bào)錯(cuò)消息并將所述報(bào)錯(cuò) 消息發(fā)送到所述請(qǐng)求端,所述報(bào)錯(cuò)消息包括用于獲取所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出 錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息、所述出錯(cuò)報(bào)文所屬消息的數(shù)據(jù)隊(duì)列的 隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào),其中,所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào) 文所屬消息的序列號(hào)兩者與所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān)系,以 使所述請(qǐng)求端根據(jù)所述偏移值與所述報(bào)文的長(zhǎng)度的乘積計(jì)算出所述出錯(cuò)報(bào)文相對(duì)于所述 出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址,并根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所 屬消息的序列號(hào)定位出所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,從而根據(jù)所述偏移地址和 所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,進(jìn)而從所述出錯(cuò)報(bào)文 的起始存儲(chǔ)地址處開(kāi)始重傳報(bào)文。
[0018] 在第二方面的一種可能實(shí)現(xiàn)方式中,所述在從所述數(shù)據(jù)隊(duì)列包括的消息中檢測(cè)到 出錯(cuò)報(bào)文時(shí),生成報(bào)錯(cuò)消息并將所述報(bào)錯(cuò)消息發(fā)送到所述請(qǐng)求端,所述報(bào)錯(cuò)消息包括用于 獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的 信息,包括:
[0019] 若從所述數(shù)據(jù)隊(duì)列包括的消息中檢測(cè)到出錯(cuò)報(bào)文,生成報(bào)錯(cuò)消息并將所述報(bào)錯(cuò)消 息發(fā)送到所述請(qǐng)求端,所述報(bào)錯(cuò)消息包括所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息 的首報(bào)文的序列號(hào),以使所述請(qǐng)求端根據(jù)所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息 的首報(bào)文的序列號(hào)計(jì)算出所述偏移值,所述出錯(cuò)報(bào)文的序列號(hào)是以所述出錯(cuò)報(bào)文所屬消息 的首報(bào)文的序列號(hào)為基數(shù),按照一定順序進(jìn)行計(jì)數(shù)得到的一個(gè)數(shù)值。
[0020] 本發(fā)明實(shí)施例第三方面提供一種了報(bào)文重傳的請(qǐng)求端,包括:
[0021] 發(fā)送模塊,用于向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所 述消息包括至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都 是連續(xù)編號(hào)的;
[0022] 獲取模塊,用于獲得所述響應(yīng)端發(fā)送來(lái)的報(bào)錯(cuò)消息,所述報(bào)錯(cuò)消息包括用于獲得 所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息、 所述出錯(cuò)報(bào)文所屬消息的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào);
[0023] 所述獲取模塊還用于根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò) 報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息獲得所述偏移值,并根據(jù)所述偏移值和所 述報(bào)文的長(zhǎng)度的乘積,獲得所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地 址;
[0024] 定位模塊,用于根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào), 定位出所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,其中,所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò) 報(bào)文所屬消息的序列號(hào)兩者與所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān) 系;
[0025] 所述定位模塊還用于根據(jù)所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文 的偏移地址和所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地 址,并從所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址處向所述響應(yīng)端重傳報(bào)文,其中,所述出錯(cuò)報(bào)文所屬 消息的起始存儲(chǔ)地址即為所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的起始存儲(chǔ)地址。
[0026] 在第三方面的一種可能實(shí)現(xiàn)方式中,所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于 所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息,具體包括:
[0027] 所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào);
[0028] 所述獲取模塊用于根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào) 文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息獲得所述偏移值時(shí),具體用于根據(jù)所述出錯(cuò) 報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào),計(jì)算出所述出錯(cuò)報(bào)文的序列號(hào) 相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值,所述出錯(cuò)報(bào)文的序列號(hào)是以所 述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)為基數(shù),按照一定順序進(jìn)行計(jì)數(shù)得到的一個(gè)數(shù)值。
[0029] 本發(fā)明實(shí)施例第四方面提供了一種報(bào)文重傳的響應(yīng)端,包括:
[0030] 接收模塊,用于接收請(qǐng)求端發(fā)送的多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消 息,所述消息包括至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào) 文都是連續(xù)編號(hào)的;
[0031] 消息發(fā)送模塊,用于在從所述數(shù)據(jù)隊(duì)列包括的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí),生成報(bào) 錯(cuò)消息并將所述報(bào)錯(cuò)消息發(fā)送到所述請(qǐng)求端,所述報(bào)錯(cuò)消息包括用于獲得所述出錯(cuò)報(bào)文的 序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的消息、所述出錯(cuò)報(bào)文所 屬消息的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào),其中,所述數(shù)據(jù)隊(duì)列的 隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào)兩者與所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址 之間具有對(duì)應(yīng)關(guān)系,以使所述請(qǐng)求端根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述 出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息獲得所述偏移值,并根據(jù)所述偏移值 與所述報(bào)文的長(zhǎng)度的乘積計(jì)算出所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的 偏移地址,所述請(qǐng)求端根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào)定位 出所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,進(jìn)而根據(jù)所述偏移地址和所述出錯(cuò)報(bào)文所屬消 息的起始存儲(chǔ)地址定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,從所述起始存儲(chǔ)地址處開(kāi)始重傳 報(bào)文。
[0032] 在第四方面的一種可能實(shí)現(xiàn)方式中,所述消息發(fā)送模塊用于在從所述數(shù)據(jù)隊(duì)列包 括的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí),生成報(bào)錯(cuò)消息并將所述報(bào)錯(cuò)消息發(fā)送到所述請(qǐng)求端,所述 報(bào)錯(cuò)消息包括所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào),以使所 述請(qǐng)求端根據(jù)所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)計(jì)算出 所述偏移值,所述出錯(cuò)報(bào)文的序列號(hào)是以所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)為基 數(shù),按照一定順序進(jìn)行計(jì)數(shù)得到的一個(gè)數(shù)值。
[0033] 本發(fā)明實(shí)施例第五方面提供了一種報(bào)文重傳的系統(tǒng),所述系統(tǒng)包括第三方面提供 的的請(qǐng)求端,和第四方面提供的的響應(yīng)端,其中:
[0034] 所述請(qǐng)求端用于向所述響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消 息,所述消息包括至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào) 文都是連續(xù)編號(hào)的;
[0035] 所述響應(yīng)端用于接收所述請(qǐng)求端發(fā)送的多個(gè)數(shù)據(jù)隊(duì)列,并檢測(cè)所述數(shù)據(jù)隊(duì)列;從 所述數(shù)據(jù)隊(duì)列包含的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí)生成報(bào)錯(cuò)消息;
[0036] 所述請(qǐng)求端根據(jù)所述報(bào)錯(cuò)消息定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,并從所述出 錯(cuò)報(bào)文的起始存儲(chǔ)地址處向所述響應(yīng)端重傳報(bào)文。
[0037] 實(shí)施本發(fā)明實(shí)施例,具有如下有益效果:本發(fā)明實(shí)施例的響應(yīng)端若在請(qǐng)求端發(fā)送 來(lái)的數(shù)據(jù)隊(duì)列的消息中檢測(cè)到出錯(cuò)報(bào)文,則生成報(bào)錯(cuò)消息并將報(bào)錯(cuò)消息發(fā)送到請(qǐng)求端,請(qǐng) 求端從報(bào)錯(cuò)消息中獲得偏移值,并根據(jù)偏移值獲得出錯(cuò)報(bào)文相對(duì)于出錯(cuò)報(bào)文所屬消息的首 報(bào)文的偏移地址,以及從報(bào)錯(cuò)消息中獲得數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列 號(hào),并根據(jù)數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列號(hào)定位出出錯(cuò)報(bào)文所屬消息的起 始存儲(chǔ)地址,請(qǐng)求端進(jìn)而根據(jù)偏移地址和出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址定位出出錯(cuò)報(bào) 文的起始存儲(chǔ)地址,并從起始存儲(chǔ)地址處向響應(yīng)端重傳報(bào)文,實(shí)現(xiàn)在報(bào)文傳送出錯(cuò)時(shí)重傳 出錯(cuò)報(bào)文的功能,采用發(fā)明實(shí)施例提供的技術(shù)方案進(jìn)行出錯(cuò)報(bào)文重傳時(shí),具有延時(shí)小和操 作簡(jiǎn)單的特點(diǎn)。

【專(zhuān)利附圖】

【附圖說(shuō)明】
[0038] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0039] 圖1是本發(fā)明實(shí)施例提供的一種報(bào)文重傳的方法的流程示意圖;
[0040] 圖2是本發(fā)明實(shí)施例提供的另一種報(bào)文重傳的方法的流程示意圖;
[0041] 圖3是本發(fā)明實(shí)施例提供的又一種報(bào)文重傳的方法的流程示意圖;
[0042] 圖4是本發(fā)明實(shí)施例提供的一種報(bào)文重傳的請(qǐng)求端的結(jié)構(gòu)示意圖;
[0043] 圖5是本發(fā)明實(shí)施例提供的一種報(bào)文重傳的響應(yīng)端的結(jié)構(gòu)示意圖;
[0044] 圖6是本發(fā)明實(shí)施例提供的一種報(bào)文重傳的系統(tǒng)的結(jié)構(gòu)示意圖;
[0045] 圖7是本發(fā)明實(shí)施例提供的一種簡(jiǎn)化的RDM傳輸網(wǎng)絡(luò)的示意圖;
[0046] 圖8是本發(fā)明實(shí)施例提供的一種消息與對(duì)應(yīng)報(bào)文的示意圖;
[0047] 圖9是本發(fā)明實(shí)施例提供的一種報(bào)錯(cuò)消息的示意圖;
[0048] 圖10是本發(fā)明實(shí)施例提供的另一種報(bào)錯(cuò)消息的示意圖;
[0049] 圖11是本發(fā)明實(shí)施例提供的另一種消息與對(duì)應(yīng)報(bào)文的示意圖;
[0050] 圖12是本發(fā)明實(shí)施例提供的一種含消息號(hào)和隊(duì)列號(hào)的報(bào)錯(cuò)消息的示意圖;
[0051] 圖13是本發(fā)明實(shí)施例提供的另一種含消息號(hào)和隊(duì)列號(hào)的報(bào)錯(cuò)消息的示意圖;
[0052] 圖14是本發(fā)明實(shí)施例提供的另一種報(bào)文重傳的請(qǐng)求端的結(jié)構(gòu)示意圖;
[0053] 圖15是本發(fā)明實(shí)施例提供的另一種報(bào)文重傳的響應(yīng)端的結(jié)構(gòu)示意圖。

【具體實(shí)施方式】
[0054] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0055] 本發(fā)明實(shí)施例提供的一種報(bào)文重傳的方法,可以應(yīng)用于網(wǎng)絡(luò)中服務(wù)器間的報(bào)文傳 送,特別是針對(duì)在RDMA(Remote Direct Memory Access,遠(yuǎn)端直接數(shù)據(jù)存取)技術(shù)下服務(wù)器 間的報(bào)文傳送。其中,所述RDMA技術(shù)為一種通過(guò)網(wǎng)絡(luò)把數(shù)據(jù)直接傳輸?shù)侥繕?biāo)服務(wù)器的存儲(chǔ) 區(qū)的零復(fù)制技術(shù)。因而,RDMA技術(shù)減少了復(fù)制和文本交換的操作,解放了當(dāng)前服務(wù)器的內(nèi) 存和CPU(Central Processing Unit,中央處理單元)的負(fù)荷,降低了服務(wù)器間數(shù)據(jù)處理的 延遲。
[0056] 圖1是本發(fā)明實(shí)施例中一種報(bào)文重傳的方法的流程示意圖。如圖所示本實(shí)施例中 的報(bào)文重傳的方法的流程可以包括:
[0057] S101,向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所述消息包 括至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都是連續(xù)編 號(hào)的。
[0058] 請(qǐng)參閱如圖7所示的一種簡(jiǎn)化的RDMA傳輸網(wǎng)絡(luò)的示意圖,簡(jiǎn)化的RDMA傳輸網(wǎng)絡(luò) 至少包括CPU、HCA(Host Direct Memory Access,主機(jī)端通道適配器)以及內(nèi)存條。CPU用 于向HCA發(fā)布調(diào)度命令,HCA用于通過(guò)網(wǎng)絡(luò)向?qū)Χ薍CA發(fā)送消息,內(nèi)存條用于存儲(chǔ)消息。整 個(gè)消息發(fā)送過(guò)程中,CPU不會(huì)執(zhí)行復(fù)制消息的操作,只需控制HCA直接將消息發(fā)送到對(duì)端 HCA,進(jìn)而將消息存入對(duì)端內(nèi)存條的存儲(chǔ)空間。
[0059] 所述響應(yīng)端即響應(yīng)端服務(wù)器,用于接收請(qǐng)求端(即請(qǐng)求端服務(wù)器)發(fā)送的消息。需 要指出的是,RDMA傳輸網(wǎng)絡(luò)會(huì)預(yù)先判斷請(qǐng)求端和響應(yīng)端的HCA的機(jī)制和協(xié)議是否相同,若 相同,才執(zhí)行以下步驟。
[0060] 具體的,請(qǐng)求端經(jīng)網(wǎng)絡(luò)向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè) 消息,所述消息包括至少一個(gè)報(bào)文。其中,所述數(shù)據(jù)隊(duì)列如圖7中QP(Q UeUe Pair,隊(duì)列對(duì)) 所示,QP0與QP1分別為發(fā)、收數(shù)據(jù)隊(duì)列,QP0與QP1組成一個(gè)數(shù)據(jù)隊(duì)列對(duì),兩端建立數(shù)據(jù)隊(duì) 列對(duì)數(shù)據(jù)隊(duì)列后方能發(fā)送消息。需要指出的是,在發(fā)送過(guò)程中,消息被切分為至少一個(gè)報(bào) 文,所述報(bào)文的長(zhǎng)度是固定的,為MTU(Maximum Transmission Unit,最大傳輸單兀)值,且 所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都是連續(xù)編號(hào)的,每個(gè)報(bào)文的幀頭記錄有其對(duì)應(yīng)的序列號(hào), 即 PSN(Packet Sequence Number,報(bào)文序列號(hào))。
[0061] S102,獲得所述響應(yīng)端發(fā)送來(lái)的報(bào)錯(cuò)消息,所述報(bào)錯(cuò)消息包括用于獲得所述出錯(cuò) 報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息。
[0062] 所述出錯(cuò)報(bào)文至少包括以下三種:丟包或發(fā)送超時(shí)的報(bào)文、非預(yù)期的報(bào)文以及未 準(zhǔn)備好存儲(chǔ)地址的報(bào)文,其中丟包或發(fā)送超時(shí)的報(bào)文和非預(yù)期的報(bào)文為常見(jiàn)的出錯(cuò)報(bào)文。 可選的,針對(duì)這兩種常見(jiàn)的出錯(cuò)報(bào)文,響應(yīng)端的檢測(cè)方法可以是:判斷消息中的報(bào)文的序列 號(hào)是否較前一個(gè)報(bào)文的序列號(hào)按預(yù)設(shè)排列規(guī)則遞增,若不是,則判定報(bào)文為出錯(cuò)報(bào)文。例 如:假設(shè)所述預(yù)設(shè)排列規(guī)則為依次遞增1,請(qǐng)參閱如圖8所示的一種消息與對(duì)應(yīng)報(bào)文的示意 圖,若當(dāng)前報(bào)文預(yù)期的PSN= 13,但實(shí)際接收到的報(bào)文的PSN尹13 (如:=25),與前一個(gè)報(bào) 文的PSN( = 12)相比不是遞增的,則判定當(dāng)前報(bào)文為出錯(cuò)報(bào)文,且出錯(cuò)報(bào)文的PSN= 13,即 出錯(cuò)報(bào)文的PSN是以出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)為基數(shù),按照一定順序進(jìn)行計(jì)數(shù) 得到的一個(gè)數(shù)值。
[0063] 進(jìn)一步的,若響應(yīng)端檢測(cè)出出錯(cuò)報(bào)文,則向請(qǐng)求端發(fā)送NAK (Negative Acknowledge,報(bào)錯(cuò)消息),反之,則在接收到一個(gè)或多個(gè)正確報(bào)文后,向請(qǐng)求端發(fā)送 ACK(Acknowledge,正確應(yīng)答消息)。其中,當(dāng)檢測(cè)到出錯(cuò)報(bào)文時(shí),響應(yīng)端會(huì)根據(jù)出錯(cuò)報(bào)文 的PSN和出錯(cuò)報(bào)文所屬消息的首報(bào)文(即消息切分為報(bào)文后,報(bào)文隊(duì)列的第一個(gè)報(bào)文)的 PSN來(lái)發(fā)送NAK,NAK包含用于獲得出錯(cuò)報(bào)文的序列號(hào)相對(duì)于出錯(cuò)報(bào)文所屬消息的首報(bào)文 的序列號(hào)的偏移值的信息。例如,如圖8所示,響應(yīng)端檢測(cè)到出錯(cuò)報(bào)文后,記錄出錯(cuò)報(bào)文的 PSN(如:=13)和首報(bào)文的PSN(如:=10),并以下面兩種實(shí)施方式的其中一種方式來(lái)發(fā)送 NAK :
[0064] 方式一,直接將出錯(cuò)報(bào)文的PSN( = 13)和首報(bào)文的PSN( = 10)記錄到NAK中,即 NAK包含出錯(cuò)報(bào)文的序列號(hào)和出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào),如圖9所示的一種報(bào) 錯(cuò)消息的示意圖,其中,PSNe為出錯(cuò)報(bào)文的PSN,PSNf為首報(bào)文的PSN ;
[0065] 方式二,計(jì)算出出錯(cuò)報(bào)文的PSN和首報(bào)文的PSN的偏移值Λ PSN(如:Λ PSN = 13-10 = 3),再將Λ PSN記錄到NAK中,S卩NAK包含出錯(cuò)報(bào)文的序列號(hào)相對(duì)于出錯(cuò)報(bào)文所屬 消息的首報(bào)文的序列號(hào)的偏移值,如圖10所示的另一種報(bào)錯(cuò)消息的示意圖。
[0066] 更進(jìn)一步地,在方式一和方式二兩者的實(shí)現(xiàn)過(guò)程中,響應(yīng)端可在NAK的協(xié)議標(biāo)準(zhǔn) 格式PSN域中攜帶出錯(cuò)報(bào)文的PSN,同時(shí)在NAK的保留域中攜帶出錯(cuò)報(bào)文所屬消息的首報(bào)文 的PSN,相反地,響應(yīng)端也可在NAK的協(xié)議標(biāo)準(zhǔn)格式PSN域中攜帶出錯(cuò)報(bào)文所屬消息的首報(bào) 文的PSN,同時(shí)在NAK的保留域中攜帶出錯(cuò)報(bào)文的PSN。需要指出的是,上述實(shí)現(xiàn)過(guò)程均可 與傳統(tǒng)方案兼容,同時(shí)私有對(duì)接的時(shí)候還可提高精確性。
[0067] 特別地,響應(yīng)端還在NAK中記錄出錯(cuò)報(bào)文所屬消息的序列號(hào),即MSN(Message Sequence Number,消息序列號(hào)),以及數(shù)據(jù)隊(duì)列的隊(duì)列號(hào),即QP號(hào)。例如,請(qǐng)參閱如圖11所 示的另一種消息與對(duì)應(yīng)報(bào)文的示意圖,響應(yīng)端發(fā)現(xiàn)出錯(cuò)報(bào)文后,將QP0和MSN = 3也記錄到 NAK中。相應(yīng)的,NAK的內(nèi)容可以如圖12或圖13所示。具體的,請(qǐng)求端獲得響應(yīng)端發(fā)送來(lái) 的 NAK。
[0068] S103,根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的 首報(bào)文的序列號(hào)的偏移值的信息獲得所述偏移值,并根據(jù)所述偏移值和所述報(bào)文的長(zhǎng)度的 乘積,獲得所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址。
[0069] 具體的,一方面,若NAK僅攜帶有出錯(cuò)報(bào)文的PSN和首報(bào)文的PSN,那么請(qǐng)求端通過(guò) 計(jì)算來(lái)獲取出錯(cuò)報(bào)文的PSN和首報(bào)文的PSN兩者的偏移值Λ PSN,其中Λ PSN =出錯(cuò)報(bào)文的 PSN-首報(bào)文的PSN。另一方面,若ΝΑΚ已經(jīng)攜帶有出錯(cuò)報(bào)文的PSN和首報(bào)文的PSN兩者的 偏移值Λ PSN,則請(qǐng)求端直接獲取該Λ PSN值。
[0070] 所述存儲(chǔ)地址為報(bào)文存儲(chǔ)在請(qǐng)求端的內(nèi)存條的物理地址。具體的,請(qǐng)求端可根據(jù) 偏移值Λ PSN和報(bào)文的長(zhǎng)度(即預(yù)置的MTU值)的乘積獲得出錯(cuò)報(bào)文的偏移地址。即偏移 地址=Λ PSN*MTU 值。
[0071] S104,根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào),定位出所 述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址。
[0072] 具體的,請(qǐng)求端直接從響應(yīng)端發(fā)送來(lái)的NAK中獲得包括出錯(cuò)報(bào)文所屬消息的數(shù)據(jù) 隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列號(hào),由于數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息 的序列號(hào)兩者與出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān)系,請(qǐng)求端可根據(jù)數(shù)據(jù) 隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列號(hào)定位出出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,具 體實(shí)現(xiàn)過(guò)程這里不再贅述。
[0073] S105,根據(jù)所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址和所 述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,并從所述出 錯(cuò)報(bào)文的起始存儲(chǔ)地址處向所述響應(yīng)端重傳報(bào)文,其中,所述出錯(cuò)報(bào)文所屬消息的起始存 儲(chǔ)地址即為所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的起始存儲(chǔ)地址。
[0074] 具體的,由于出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址即為出錯(cuò)報(bào)文所屬消息的首報(bào)文 的起始存儲(chǔ)地址,請(qǐng)求端可根據(jù)偏移地址與出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址的和定位出 錯(cuò)報(bào)文的起始存儲(chǔ)地址,即出錯(cuò)報(bào)文的起始存儲(chǔ)地址=出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址 +偏移地址,并從出錯(cuò)報(bào)文的起始存儲(chǔ)地址處向響應(yīng)端重傳報(bào)文。
[0075] 本發(fā)明實(shí)施例的響應(yīng)端若在請(qǐng)求端發(fā)送來(lái)的數(shù)據(jù)隊(duì)列的消息中檢測(cè)到出錯(cuò)報(bào)文, 則生成報(bào)錯(cuò)消息并將報(bào)錯(cuò)消息發(fā)送到請(qǐng)求端,請(qǐng)求端從報(bào)錯(cuò)消息中獲得偏移值,并根據(jù)偏 移值獲得出錯(cuò)報(bào)文相對(duì)于出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址,以及從報(bào)錯(cuò)消息中獲得 數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列號(hào),并根據(jù)數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所 屬消息的序列號(hào)定位出出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,請(qǐng)求端進(jìn)而根據(jù)偏移地址和出 錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址定位出出錯(cuò)報(bào)文的起始存儲(chǔ)地址,并從出錯(cuò)報(bào)文的起始存 儲(chǔ)地址處向響應(yīng)端重傳報(bào)文,相比現(xiàn)有技術(shù),請(qǐng)求端不用在本地建立任何表項(xiàng)來(lái)存放已發(fā) 送的報(bào)文信息,同時(shí)也省去了查詢(xún)和對(duì)比報(bào)文信息的過(guò)程,在保證準(zhǔn)確性的條件下提高了 效率,減少了請(qǐng)求端的延時(shí)。
[0076] 圖2是本發(fā)明實(shí)施例中另一種報(bào)文重傳的方法的流程示意圖,可以包括:
[0077] S201,請(qǐng)求端向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所述 消息包括至少一個(gè)報(bào)文。
[0078] 請(qǐng)參閱如圖7所示的一種簡(jiǎn)化的RDMA傳輸網(wǎng)絡(luò)的示意圖,簡(jiǎn)化的RDMA傳輸網(wǎng)絡(luò) 至少包括CPU、HCA(Host Direct Memory Access,主機(jī)端通道適配器)以及內(nèi)存條。CPU用 于向HCA發(fā)布調(diào)度命令,HCA用于通過(guò)網(wǎng)絡(luò)向?qū)Χ薍CA發(fā)送消息,內(nèi)存條用于存儲(chǔ)消息。整 個(gè)消息發(fā)送過(guò)程中,CPU不會(huì)執(zhí)行復(fù)制消息的操作,只需控制HCA直接將消息發(fā)送到對(duì)端 HCA,進(jìn)而將消息存入對(duì)端內(nèi)存條的存儲(chǔ)空間。
[0079] 所述響應(yīng)端即響應(yīng)端服務(wù)器,用于接收請(qǐng)求端(即請(qǐng)求端服務(wù)器)發(fā)送的消息。需 要指出的是,RDMA傳輸網(wǎng)絡(luò)會(huì)預(yù)先判斷請(qǐng)求端和響應(yīng)端的HCA的機(jī)制和協(xié)議是否相同,若 相同,才執(zhí)行以下步驟。
[0080] 具體的,請(qǐng)求端經(jīng)網(wǎng)絡(luò)向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè) 消息,所述消息包括至少一個(gè)報(bào)文。其中,所述數(shù)據(jù)隊(duì)列如圖7中QP(Q UeUe Pair,隊(duì)列對(duì)) 所示,QP0與QP1分別為發(fā)、收數(shù)據(jù)隊(duì)列,QP0與QP1組成一個(gè)數(shù)據(jù)隊(duì)列對(duì),兩端建立數(shù)據(jù)隊(duì) 列對(duì)數(shù)據(jù)隊(duì)列后方能發(fā)送消息。需要指出的是,在發(fā)送過(guò)程中,消息被切分為至少一個(gè)報(bào) 文,所述報(bào)文的長(zhǎng)度是固定的,為MTU(Maximum Transmission Unit,最大傳輸單兀)值,且 所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都是連續(xù)編號(hào)的,每個(gè)報(bào)文的幀頭記錄有其對(duì)應(yīng)的序列號(hào), 即 PSN(Packet Sequence Number,報(bào)文序列號(hào))。
[0081] S202,響應(yīng)端在從所述數(shù)據(jù)隊(duì)列包括的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí),生成報(bào)錯(cuò)消息。
[0082] 具體的,響應(yīng)端在接收消息中的報(bào)文時(shí),檢測(cè)并獲取出錯(cuò)報(bào)文。
[0083] 需要指出的是,所述出錯(cuò)報(bào)文至少包括以下三種:丟包或發(fā)送超時(shí)的報(bào)文、非預(yù)期 的報(bào)文以及未準(zhǔn)備好存儲(chǔ)地址的報(bào)文,其中丟包或發(fā)送超時(shí)的報(bào)文和非預(yù)期的報(bào)文為常見(jiàn) 的出錯(cuò)報(bào)文??蛇x的,針對(duì)這兩種常見(jiàn)的出錯(cuò)報(bào)文,響應(yīng)端的檢測(cè)方法可以是:判斷消息中 的報(bào)文的序列號(hào)是否較前一個(gè)報(bào)文的序列號(hào)按預(yù)設(shè)排列規(guī)則遞增,若不是,則判定報(bào)文為 出錯(cuò)報(bào)文。例如:假設(shè)所述預(yù)設(shè)排列規(guī)則為依次遞增1,請(qǐng)參閱如圖8所示的一種消息與對(duì) 應(yīng)報(bào)文的示意圖,若當(dāng)前報(bào)文預(yù)期的PSN = 13,但實(shí)際接收到的報(bào)文的PSN尹13(如:= 25),與前一個(gè)報(bào)文的PSN( = 12)相比不是遞增的,則判定當(dāng)前報(bào)文為出錯(cuò)報(bào)文,且出錯(cuò)報(bào) 文的PSN = 13,即,出錯(cuò)報(bào)文的PSN是以出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)為基數(shù),按照 一定順序進(jìn)行計(jì)數(shù)得到的一個(gè)數(shù)值。
[0084] 進(jìn)一步的,若響應(yīng)端檢測(cè)出出錯(cuò)報(bào)文,則向請(qǐng)求端發(fā)送NAK (Negative Acknowledge,報(bào)錯(cuò)消息),反之,則在接收到一個(gè)或多個(gè)正確報(bào)文后,向請(qǐng)求端發(fā)送 ACK(Acknowledge,正確應(yīng)答消息)。其中,當(dāng)檢測(cè)到出錯(cuò)報(bào)文時(shí),響應(yīng)端會(huì)將出錯(cuò)報(bào)文的 PSN(如:=13)和首報(bào)文的PSN(如:=10)記錄到NAK中,如圖9所示的一種報(bào)錯(cuò)消息的 示意圖,其中,PSNe為出錯(cuò)報(bào)文的PSN,PSNf為首報(bào)文的PSN。
[0085] 更進(jìn)一步地,在實(shí)現(xiàn)過(guò)程中,響應(yīng)端可在NAK的協(xié)議標(biāo)準(zhǔn)格式PSN域中攜帶出錯(cuò)報(bào) 文的PSN,同時(shí)在NAK的保留域中攜帶出錯(cuò)報(bào)文所屬消息的首報(bào)文的PSN,相反地,響應(yīng)端也 可在NAK的協(xié)議標(biāo)準(zhǔn)格式PSN域中攜帶出錯(cuò)報(bào)文所屬消息的首報(bào)文的PSN,同時(shí)在NAK的保 留域中攜帶出錯(cuò)報(bào)文的PSN。需要指出的是,上述實(shí)現(xiàn)過(guò)程均可與傳統(tǒng)方案兼容,同時(shí)私有 對(duì)接的時(shí)候還可提高精確性。
[0086] 另夕卜,響應(yīng)端還需在NAK中記錄出錯(cuò)報(bào)文所屬消息的序列號(hào),即MSN(Message Sequence Number,消息序列號(hào)),以及數(shù)據(jù)隊(duì)列的隊(duì)列號(hào),即QP號(hào)。例如,請(qǐng)參閱如圖11所 示的另一種消息與對(duì)應(yīng)報(bào)文的示意圖,其中,響應(yīng)端發(fā)現(xiàn)出錯(cuò)報(bào)文后,將QP0和MSN = 3也 記錄到NAK中,NAK的內(nèi)容如圖12所示。
[0087] S203,響應(yīng)端將所述報(bào)錯(cuò)消息發(fā)送到所述請(qǐng)求端,所述報(bào)錯(cuò)消息包括所述出錯(cuò)報(bào) 文的序列號(hào)、所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)、所述出錯(cuò)報(bào)文所屬消息的數(shù)據(jù)隊(duì) 列的隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào)。
[0088] 具體的,響應(yīng)端將攜帶有出錯(cuò)報(bào)文的PSN、首報(bào)文的PSN、出錯(cuò)報(bào)文所屬消息的MSN 以及隊(duì)列對(duì)的QP號(hào)的NAK發(fā)送給請(qǐng)求端。
[0089] S204,請(qǐng)求端根據(jù)所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序 列號(hào),計(jì)算出所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏 移值。
[0090] 具體的,請(qǐng)求端通過(guò)計(jì)算來(lái)獲取出錯(cuò)報(bào)文的PSN和首報(bào)文的PSN兩者的偏移值 Λ PSN,其中,Λ PSN =出錯(cuò)報(bào)文的PSN-首報(bào)文的PSN。
[0091] S205,請(qǐng)求端根據(jù)所述偏移值和所述報(bào)文的長(zhǎng)度的乘積,獲得所述出錯(cuò)報(bào)文相對(duì) 于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址。
[0092] 所述存儲(chǔ)地址為報(bào)文存儲(chǔ)在請(qǐng)求端的內(nèi)存條的物理地址。具體的,請(qǐng)求端可根據(jù) 偏移值Λ PSN和報(bào)文的長(zhǎng)度(即預(yù)置的MTU值)的乘積獲得出錯(cuò)報(bào)文的偏移地址。即偏移 地址=Λ PSN*MTU 值。
[0093] S206,請(qǐng)求端從所述報(bào)錯(cuò)消息中獲得所述出錯(cuò)報(bào)文所屬消息的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào) 和所述出錯(cuò)報(bào)文所屬消息的序列號(hào)。
[0094] 具體的,請(qǐng)求端直接從響應(yīng)端發(fā)送來(lái)的NAK中獲得包括出錯(cuò)報(bào)文所屬消息的數(shù)據(jù) 隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列號(hào)。
[0095] S207,請(qǐng)求端根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào),定 位出所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址。
[0096] 具體的,由于數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列號(hào)兩者與出錯(cuò)報(bào)文所 屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān)系,請(qǐng)求端可根據(jù)數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所 屬消息的序列號(hào)定位出出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,具體實(shí)現(xiàn)過(guò)程這里不再贅述。 [0097] S208,請(qǐng)求端根據(jù)所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地 址和所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,并從 所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址處向所述響應(yīng)端重傳報(bào)文。
[0098] 具體的,由于出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址即為出錯(cuò)報(bào)文所屬消息的首報(bào)文 的起始存儲(chǔ)地址,請(qǐng)求端可根據(jù)偏移地址與起始存儲(chǔ)地址的和定位出錯(cuò)報(bào)文的起始存儲(chǔ)地 址,即出錯(cuò)報(bào)文的起始存儲(chǔ)地址=出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址+偏移地址,并從出 錯(cuò)報(bào)文的起始存儲(chǔ)地址處向響應(yīng)端重傳報(bào)文。
[0099] 本發(fā)明實(shí)施例的響應(yīng)端若在請(qǐng)求端發(fā)送來(lái)的數(shù)據(jù)隊(duì)列的消息中檢測(cè)到出錯(cuò)報(bào)文, 則生成報(bào)錯(cuò)消息并將報(bào)錯(cuò)消息發(fā)送到請(qǐng)求端,請(qǐng)求端根據(jù)出錯(cuò)報(bào)文中的出錯(cuò)報(bào)文的序列號(hào) 和出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)計(jì)算出偏移值,再根據(jù)偏移值與報(bào)文的長(zhǎng)度的乘積 計(jì)算出出錯(cuò)報(bào)文相對(duì)于出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址,并根據(jù)數(shù)據(jù)隊(duì)列的隊(duì)列號(hào) 和出錯(cuò)報(bào)文所屬消息的序列號(hào)定位出出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,進(jìn)而根據(jù)偏移地 址和出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址定位出出錯(cuò)報(bào)文的起始存儲(chǔ)地址,從而從出錯(cuò)報(bào)文 的起始存儲(chǔ)地址處開(kāi)始重傳報(bào)文,實(shí)現(xiàn)在報(bào)文傳送出錯(cuò)時(shí)重傳出錯(cuò)報(bào)文的功能,且具有延 時(shí)小和操作簡(jiǎn)單的特點(diǎn)。
[0100] 圖3是本發(fā)明實(shí)施例中又一種報(bào)文重傳的方法的流程示意圖,可以包括:
[0101] S301,請(qǐng)求端向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所述 消息包括至少一個(gè)報(bào)文。步驟S301與圖2中的步驟S201的內(nèi)容相同,這里不再贅述。
[0102] S302,響應(yīng)端在從所述數(shù)據(jù)隊(duì)列包括的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí),根據(jù)所述出錯(cuò) 報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào),計(jì)算出所述出錯(cuò)報(bào)文的序列號(hào) 相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值,并生成報(bào)錯(cuò)消息。
[0103] 具體的,響應(yīng)端在接收消息中的報(bào)文時(shí),檢測(cè)并獲取出錯(cuò)報(bào)文。
[0104] 需要指出的是,所述出錯(cuò)報(bào)文至少包括以下三種:丟包或發(fā)送超時(shí)的報(bào)文、非預(yù)期 的報(bào)文以及未準(zhǔn)備好存儲(chǔ)地址的報(bào)文,其中丟包或發(fā)送超時(shí)的報(bào)文和非預(yù)期的報(bào)文為常見(jiàn) 的出錯(cuò)報(bào)文??蛇x的,針對(duì)這兩種常見(jiàn)的出錯(cuò)報(bào)文,響應(yīng)端的檢測(cè)方法可以是:判斷消息中 的報(bào)文的序列號(hào)是否較前一個(gè)報(bào)文的序列號(hào)按預(yù)設(shè)排列規(guī)則遞增,若不是,則判定報(bào)文為 出錯(cuò)報(bào)文。例如:假設(shè)所述預(yù)設(shè)排列規(guī)則為依次遞增1,請(qǐng)參閱如圖8所示的一種消息與對(duì) 應(yīng)報(bào)文的示意圖,若當(dāng)前報(bào)文預(yù)期的PSN = 13,但實(shí)際接收到的報(bào)文的PSN尹13(如:= 25),與前一個(gè)報(bào)文的PSN( = 12)相比不是遞增的,則判定當(dāng)前報(bào)文為出錯(cuò)報(bào)文,且出錯(cuò)報(bào) 文的PSN=13,即出錯(cuò)報(bào)文的PSN是以出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)為基數(shù),按照一 定順序進(jìn)行計(jì)數(shù)得到的一個(gè)數(shù)值。
[0105] 若響應(yīng)端檢測(cè)出出錯(cuò)報(bào)文,則向請(qǐng)求端發(fā)送NAK (Negative Acknowledge,報(bào)錯(cuò)消 息),反之,則在接收到一個(gè)或多個(gè)正確報(bào)文后,向請(qǐng)求端發(fā)送ACK(Acknowledge,正確應(yīng)答 消息)。
[0106] 具體的,當(dāng)檢測(cè)到出錯(cuò)報(bào)文時(shí),響應(yīng)端會(huì)計(jì)算出出錯(cuò)報(bào)文的PSN和首報(bào)文的PSN的 偏移值Λ PSN(如:Λ PSN = 13-10 = 3),再將Λ PSN記錄到NAK中,如圖10所示的另一種 報(bào)錯(cuò)消息的示意圖。
[0107] 另外,響應(yīng)端還需在ΝΑΚ中記錄出錯(cuò)報(bào)文所屬消息的序列號(hào),即MSN(Message Sequence Number,消息序列號(hào)),以及在NAK中記錄數(shù)據(jù)隊(duì)列的隊(duì)列號(hào),即QP號(hào)。例如,請(qǐng) 參閱如圖11所示的另一種消息與對(duì)應(yīng)報(bào)文的示意圖,其中,響應(yīng)端發(fā)現(xiàn)出錯(cuò)報(bào)文后,將QP0 和MSN = 3也記錄到NAK中,NAK的內(nèi)容如圖12所示。
[0108] 更進(jìn)一步地,在實(shí)現(xiàn)過(guò)程中,響應(yīng)端可在NAK的協(xié)議標(biāo)準(zhǔn)格式PSN域中攜帶出錯(cuò)報(bào) 文的PSN,同時(shí)在NAK的保留域中攜帶出錯(cuò)報(bào)文所屬消息的首報(bào)文的PSN,相反地,響應(yīng)端也 可在NAK的協(xié)議標(biāo)準(zhǔn)格式PSN域中攜帶出錯(cuò)報(bào)文所屬消息的首報(bào)文的PSN,同時(shí)在NAK的保 留域中攜帶出錯(cuò)報(bào)文的PSN。需要指出的是,上述實(shí)現(xiàn)過(guò)程均可與傳統(tǒng)方案兼容,同時(shí)私有 對(duì)接的時(shí)候還可提高精確性。
[0109] S303,響應(yīng)端將所述報(bào)錯(cuò)消息發(fā)送到所述請(qǐng)求端,所述報(bào)錯(cuò)消息包括所述出錯(cuò)報(bào) 文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值、所述出錯(cuò)報(bào)文所屬 消息的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào)。
[0110] 具體的,響應(yīng)端將攜帶有偏移值Λ PSN、出錯(cuò)報(bào)文所屬消息的MSN以及隊(duì)列對(duì)的QP 號(hào)的NAK發(fā)送給請(qǐng)求端。
[0111] S304,請(qǐng)求端根據(jù)所述報(bào)錯(cuò)消息信息獲得所述偏移值。
[0112] 具體的,請(qǐng)求端直接從NAK中獲得偏移值Λ PSN。
[0113] S305,請(qǐng)求端根據(jù)所述偏移值和所述報(bào)文的長(zhǎng)度的乘積,獲得所述出錯(cuò)報(bào)文相對(duì) 于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址。
[0114] 所述存儲(chǔ)地址為出錯(cuò)報(bào)文存儲(chǔ)在請(qǐng)求端的內(nèi)存條的物理地址。具體的,請(qǐng)求端可 根據(jù)偏移值Λ PSN和報(bào)文的長(zhǎng)度(即預(yù)置的MTU值)的乘積獲得出錯(cuò)報(bào)文的偏移地址。即 偏移地址=Λ PSN*MTU值。
[0115] S306,請(qǐng)求端從所述報(bào)錯(cuò)消息中獲得所述出錯(cuò)報(bào)文所屬消息的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào) 和所述出錯(cuò)報(bào)文所屬消息的序列號(hào)。
[0116] 具體的,請(qǐng)求端直接從響應(yīng)端發(fā)送來(lái)的NAK中獲得包括出錯(cuò)報(bào)文所屬消息的數(shù)據(jù) 隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列號(hào)。
[0117] S307,請(qǐng)求端根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào),定 位出所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址。
[0118] 具體的,由于數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列號(hào)兩者與出錯(cuò)報(bào)文所 屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān)系,請(qǐng)求端可根據(jù)數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所 屬消息的序列號(hào)定位出出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,具體實(shí)現(xiàn)過(guò)程這里不再贅述。
[0119] S308,請(qǐng)求端根據(jù)所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地 址和所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,并從 所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址處向所述響應(yīng)端重傳報(bào)文。
[0120] 具體的,由于出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址即為出錯(cuò)報(bào)文所屬消息的首報(bào)文 的起始存儲(chǔ)地址,請(qǐng)求端可根據(jù)偏移地址與出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址的和定位出 錯(cuò)報(bào)文的起始存儲(chǔ)地址,即出錯(cuò)報(bào)文的起始存儲(chǔ)地址=出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址 +偏移地址,并從出錯(cuò)報(bào)文的起始存儲(chǔ)地址處向響應(yīng)端重傳報(bào)文。
[0121] 本發(fā)明實(shí)施例的響應(yīng)端若在請(qǐng)求端發(fā)送來(lái)的數(shù)據(jù)隊(duì)列的消息中檢測(cè)到出錯(cuò)報(bào)文, 則生成報(bào)錯(cuò)消息并將報(bào)錯(cuò)消息發(fā)送到請(qǐng)求端,請(qǐng)求端獲得出錯(cuò)報(bào)文中的偏移值并根據(jù)偏移 值與報(bào)文的長(zhǎng)度的乘積計(jì)算出出錯(cuò)報(bào)文相對(duì)于出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址,再 根據(jù)數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列號(hào)定位出出錯(cuò)報(bào)文所屬消息的起始存 儲(chǔ)地址,進(jìn)而根據(jù)偏移地址和出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址定位出出錯(cuò)報(bào)文的起始存 儲(chǔ)地址,從而從出錯(cuò)報(bào)文的起始存儲(chǔ)地址處開(kāi)始重傳報(bào)文,實(shí)現(xiàn)在報(bào)文傳送出錯(cuò)時(shí)重傳出 錯(cuò)報(bào)文的功能,且具有延時(shí)小和操作簡(jiǎn)單的特點(diǎn)。
[0122] 圖4是本發(fā)明實(shí)施例中一種報(bào)文重傳的請(qǐng)求端。如圖所示本發(fā)明實(shí)施例中的請(qǐng)求 端至少可以包括發(fā)送模塊410、獲取模塊420以及定位模塊430,其中:
[0123] 發(fā)送模塊410,用于向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消 息,所述消息包括至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào) 文都是連續(xù)編號(hào)的。
[0124] 請(qǐng)參閱如圖7所示的一種簡(jiǎn)化的RDMA傳輸網(wǎng)絡(luò)的示意圖,簡(jiǎn)化的RDMA傳輸網(wǎng)絡(luò) 至少包括CPU、HCA(Host Direct Memory Access,主機(jī)端通道適配器)以及內(nèi)存條。CPU用 于向HCA發(fā)布調(diào)度命令,HCA用于通過(guò)網(wǎng)絡(luò)向?qū)Χ薍CA發(fā)送消息,內(nèi)存條用于存儲(chǔ)消息。整 個(gè)消息發(fā)送過(guò)程中,CPU不會(huì)執(zhí)行復(fù)制消息的操作,只需控制HCA直接將消息發(fā)送到對(duì)端 HCA,進(jìn)而將消息存入對(duì)端內(nèi)存條的存儲(chǔ)空間。
[0125] 具體的,發(fā)送模塊410經(jīng)網(wǎng)絡(luò)向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至 少一個(gè)消息,所述消息包括至少一個(gè)報(bào)文。其中,所述數(shù)據(jù)隊(duì)列如圖7中QP (Queue Pair,隊(duì) 列對(duì))所示,QP0與QP1組成一個(gè)數(shù)據(jù)隊(duì)列,兩端建立數(shù)據(jù)隊(duì)列后方能發(fā)送消息。需要指出的 是,在發(fā)送過(guò)程中,消息被切分為至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,為MTU (Maximum Transmission Unit,最大傳輸單元)值,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都是連續(xù)編號(hào)的, 每個(gè)報(bào)文的巾貞頭記錄有其對(duì)應(yīng)的序列號(hào),即PSN(Packet Sequence Number,報(bào)文序列號(hào))。
[0126] 獲取模塊420,用于獲得所述響應(yīng)端發(fā)送來(lái)的報(bào)錯(cuò)消息,所述報(bào)錯(cuò)消息包括用于獲 得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信 息、所述出錯(cuò)報(bào)文所屬消息的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào)。
[0127] 所述出錯(cuò)報(bào)文至少包括以下三種:丟包或發(fā)送超時(shí)的報(bào)文、非預(yù)期的報(bào)文以及未 準(zhǔn)備好存儲(chǔ)地址的報(bào)文,其中丟包或發(fā)送超時(shí)的報(bào)文和非預(yù)期的報(bào)文為常見(jiàn)的出錯(cuò)報(bào)文。 可選的,針對(duì)這兩種常見(jiàn)的出錯(cuò)報(bào)文,響應(yīng)端的檢測(cè)方法可以是:判斷消息中的報(bào)文的序列 號(hào)是否較前一個(gè)報(bào)文的序列號(hào)按預(yù)設(shè)排列規(guī)則遞增,若不是,則判定報(bào)文為出錯(cuò)報(bào)文。例 如:假設(shè)所述預(yù)設(shè)排列規(guī)則為依次遞增1,請(qǐng)參閱如圖8所示的一種消息與對(duì)應(yīng)報(bào)文的示意 圖,若當(dāng)前報(bào)文預(yù)期的PSN= 13,但實(shí)際接收到的報(bào)文的PSN尹13 (如:=25),與前一個(gè)報(bào) 文的PSN( = 12)相比不是遞增的,則判定當(dāng)前報(bào)文為出錯(cuò)報(bào)文,且出錯(cuò)報(bào)文的PSN= 13,即 出錯(cuò)報(bào)文的PSN是以出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)為基數(shù),按照一定順序進(jìn)行計(jì)數(shù) 得到的一個(gè)數(shù)值。
[0128] 進(jìn)一步的,若響應(yīng)端檢測(cè)出出錯(cuò)報(bào)文,則向請(qǐng)求端發(fā)送NAK (Negative Acknowledge,報(bào)錯(cuò)消息),反之,則在接收到一個(gè)或多個(gè)正確報(bào)文后,向請(qǐng)求端發(fā)送 ACK(Acknowledge,正確應(yīng)答消息)。其中,當(dāng)檢測(cè)到出錯(cuò)報(bào)文時(shí),響應(yīng)端會(huì)根據(jù)出錯(cuò)報(bào)文 的PSN和出錯(cuò)報(bào)文所屬消息的首報(bào)文(即消息切分為報(bào)文后,報(bào)文隊(duì)列的第一個(gè)報(bào)文)的 PSN來(lái)發(fā)送NAK,NAK包含用于獲得出錯(cuò)報(bào)文的序列號(hào)相對(duì)于出錯(cuò)報(bào)文所屬消息的首報(bào)文 的序列號(hào)的偏移值的信息。例如,如圖8所示,響應(yīng)端檢測(cè)到出錯(cuò)報(bào)文后,記錄出錯(cuò)報(bào)文的 PSN(如:=13)和首報(bào)文的PSN(如:=10),并以下面兩種實(shí)施方式的其中一種方式來(lái)發(fā)送 NAK :
[0129] 方式一,直接將出錯(cuò)報(bào)文的PSN( = 13)和首報(bào)文的PSN( = 10)記錄到NAK中,如 圖9所示的一種報(bào)錯(cuò)消息的示意圖,其中,PSNe為出錯(cuò)報(bào)文的PSN,PSNf為首報(bào)文的PSN ;
[0130] 方式二,計(jì)算出出錯(cuò)報(bào)文的PSN和首報(bào)文的PSN的偏移值Λ PSN(如:Λ PSN = 13-10 = 3),再將Λ PSN記錄到NAK中,如圖10所示的另一種報(bào)錯(cuò)消息的示意圖。
[0131] 更進(jìn)一步地,在方式一和方式二兩者的實(shí)現(xiàn)過(guò)程中,響應(yīng)端可在NAK的協(xié)議標(biāo)準(zhǔn) 格式PSN域中攜帶出錯(cuò)報(bào)文的PSN,同時(shí)在NAK的保留域中攜帶出錯(cuò)報(bào)文所屬消息的首報(bào)文 的PSN,相反地,響應(yīng)端也可在NAK的協(xié)議標(biāo)準(zhǔn)格式PSN域中攜帶出錯(cuò)報(bào)文所屬消息的首報(bào) 文的PSN,同時(shí)在NAK的保留域中攜帶出錯(cuò)報(bào)文的PSN。需要指出的是,上述實(shí)現(xiàn)過(guò)程均可 與傳統(tǒng)方案兼容,同時(shí)私有對(duì)接的時(shí)候還可提高精確性。
[0132] 特別地,響應(yīng)端還在NAK中記錄出錯(cuò)報(bào)文所屬消息的序列號(hào),即MSN(Message Sequence Number,消息序列號(hào)),以及數(shù)據(jù)隊(duì)列的隊(duì)列號(hào),即QP號(hào)。例如,請(qǐng)參閱如圖11所 示的另一種消息與對(duì)應(yīng)報(bào)文的示意圖,響應(yīng)端發(fā)現(xiàn)出錯(cuò)報(bào)文后,將QP0和MSN = 3也記錄到 NAK中。相應(yīng)的,NAK的內(nèi)容可以如圖12或圖13所示。
[0133] 具體的,獲取模塊420獲取響應(yīng)端根據(jù)出錯(cuò)報(bào)文的PSN和出錯(cuò)報(bào)文所屬消息的首 報(bào)文的PSN發(fā)送來(lái)的NAK。
[0134] 所述獲取模塊420還用于根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述 出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息獲得所述偏移值,并根據(jù)所述偏移值 和所述報(bào)文的長(zhǎng)度的乘積,獲得所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏 移地址。
[0135] 具體的,一方面,若NAK已經(jīng)攜帶有出錯(cuò)報(bào)文的PSN和首報(bào)文的PSN兩者的偏移值 Λ PSN,則獲取模塊420用于從NAK中獲得Λ PSN值。另一方面,若NAK僅攜帶有出錯(cuò)報(bào)文 的PSN和首報(bào)文的PSN,那么獲取模塊420用于根據(jù)出錯(cuò)報(bào)文的序列號(hào)和出錯(cuò)報(bào)文所屬消息 的首報(bào)文的序列號(hào)計(jì)算出偏移值Λ PSN,其中Λ PSN =出錯(cuò)報(bào)文的PSN-首報(bào)文的PSN。
[0136] 所述存儲(chǔ)地址為報(bào)文存儲(chǔ)在請(qǐng)求端的內(nèi)存條的物理地址。具體的,獲取模塊420 可根據(jù)偏移值Λ PSN和報(bào)文的長(zhǎng)度(即預(yù)置的MTU值)的乘積獲得出錯(cuò)報(bào)文的偏移地址。 即偏移地址=Λ PSN*MTU值。
[0137] 定位模塊430,用于根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列 號(hào),定位出所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,其中,所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出 錯(cuò)報(bào)文所屬消息的序列號(hào)兩者與所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān) 系。
[0138] 具體的,定位模塊430直接從響應(yīng)端發(fā)送來(lái)的NAK中獲得包括出錯(cuò)報(bào)文所屬消息 的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列號(hào),由于數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所 屬消息的序列號(hào)兩者與出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān)系,定位模塊 430可根據(jù)數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列號(hào)定位出出錯(cuò)報(bào)文所屬消息的起 始存儲(chǔ)地址,具體實(shí)現(xiàn)過(guò)程這里不再贅述。
[0139] 所述定位模塊430還用于根據(jù)所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首 報(bào)文的偏移地址和所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,定位出所述出錯(cuò)報(bào)文的起始存 儲(chǔ)地址,并從所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址處向所述響應(yīng)端重傳報(bào)文,其中,所述出錯(cuò)報(bào)文 所屬消息的起始存儲(chǔ)地址即為所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的起始存儲(chǔ)地址。
[0140] 具體的,由于出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址即為出錯(cuò)報(bào)文所屬消息的首報(bào)文 的起始存儲(chǔ)地址,所述定位模塊430可根據(jù)偏移地址與出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址 的和定位出錯(cuò)報(bào)文的起始存儲(chǔ)地址,即出錯(cuò)報(bào)文的起始存儲(chǔ)地址=出錯(cuò)報(bào)文所屬消息的起 始存儲(chǔ)地址+偏移地址,并從出錯(cuò)報(bào)文的起始存儲(chǔ)地址處向響應(yīng)端重傳報(bào)文。
[0141] 圖5是本發(fā)明實(shí)施例提供的一種報(bào)文重傳的響應(yīng)端。如圖所示本發(fā)明實(shí)施例中的 響應(yīng)端至少可以包括數(shù)據(jù)隊(duì)列接收模塊510和消息發(fā)送模塊520,其中:
[0142] 接收模塊510,用于接收請(qǐng)求端發(fā)送的多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè) 消息,所述消息包括至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有 報(bào)文都是連續(xù)編號(hào)的。
[0143] 請(qǐng)參閱如圖7所示的一種簡(jiǎn)化的RDMA傳輸網(wǎng)絡(luò)的示意圖,簡(jiǎn)化的RDMA傳輸網(wǎng)絡(luò) 至少包括CPU、HCA(Host Direct Memory Access,主機(jī)端通道適配器)以及內(nèi)存條。CPU用 于向HCA發(fā)布調(diào)度命令,HCA用于通過(guò)網(wǎng)絡(luò)向?qū)Χ薍CA發(fā)送消息,內(nèi)存條用于存儲(chǔ)消息。整 個(gè)消息發(fā)送過(guò)程中,CPU不會(huì)執(zhí)行復(fù)制消息的操作,只需控制HCA直接將消息發(fā)送到對(duì)端 HCA,進(jìn)而將消息存入對(duì)端內(nèi)存條的存儲(chǔ)空間。
[0144] 具體的,接收模塊510接收請(qǐng)求端經(jīng)網(wǎng)絡(luò)發(fā)送來(lái)的多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列 包括至少一個(gè)消息,所述消息包括至少一個(gè)報(bào)文。其中,所述數(shù)據(jù)隊(duì)列如圖7中QP(Q UeUe Pair,隊(duì)列對(duì))所示,QP0與QP1組成一個(gè)數(shù)據(jù)隊(duì)列,兩端建立數(shù)據(jù)隊(duì)列后方能發(fā)送消息。需 要指出的是,在發(fā)送過(guò)程中,消息被切分為至少一個(gè)報(bào)文,每個(gè)報(bào)文的幀頭記錄有其對(duì)應(yīng)的 序列號(hào),即 PSN(Packet Sequence Number,報(bào)文序列號(hào))。
[0145] 消息發(fā)送模塊520,用于在從所述數(shù)據(jù)隊(duì)列包括的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí),生成 報(bào)錯(cuò)消息并將所述報(bào)錯(cuò)消息發(fā)送到所述請(qǐng)求端,所述報(bào)錯(cuò)消息包括用于獲得所述出錯(cuò)報(bào)文 的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的消息、所述出錯(cuò)報(bào)文 所屬消息的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào),其中,所述數(shù)據(jù)隊(duì)列 的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào)兩者與所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地 址之間具有對(duì)應(yīng)關(guān)系,以使所述請(qǐng)求端根據(jù)所述偏移值與所述報(bào)文的長(zhǎng)度的乘積計(jì)算出所 述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址,并根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì) 列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào)定位出所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,進(jìn) 而根據(jù)所述偏移地址和所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址定位出所述出錯(cuò)報(bào)文的起 始存儲(chǔ)地址,從而從所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址處開(kāi)始重傳報(bào)文。
[0146] 所述出錯(cuò)報(bào)文至少包括以下三種:丟包或發(fā)送超時(shí)的報(bào)文、非預(yù)期的報(bào)文以及未 準(zhǔn)備好存儲(chǔ)地址的報(bào)文,其中丟包或發(fā)送超時(shí)的報(bào)文和非預(yù)期的報(bào)文為常見(jiàn)的出錯(cuò)報(bào)文。 具體的,針對(duì)這兩種常見(jiàn)的出錯(cuò)報(bào)文,消息發(fā)送模塊520判斷消息中的報(bào)文的序列號(hào)是否 較前一個(gè)報(bào)文的序列號(hào)按預(yù)設(shè)排列規(guī)則遞增,若發(fā)現(xiàn)報(bào)文的序列號(hào)不是較前一個(gè)報(bào)文的序 列號(hào)按預(yù)設(shè)排列規(guī)則遞增,則判定該報(bào)文為所述出錯(cuò)報(bào)文。例如:假設(shè)所述預(yù)設(shè)排列規(guī)則為 依次遞增1,請(qǐng)參閱如圖8所示的一種消息與對(duì)應(yīng)報(bào)文的示意圖,若當(dāng)前報(bào)文預(yù)期的PSN = 13,但實(shí)際接收到的報(bào)文的PSN尹13(如:=25),與前一個(gè)報(bào)文的PSN( = 12)相比不是遞 增的,則判定當(dāng)前報(bào)文為出錯(cuò)報(bào)文,且出錯(cuò)報(bào)文的PSN = 13,即出錯(cuò)報(bào)文的PSN是以出錯(cuò)報(bào) 文所屬消息的首報(bào)文的序列號(hào)為基數(shù),按照一定順序進(jìn)行計(jì)數(shù)得到的一個(gè)數(shù)值。
[0147] 進(jìn)一步地,在消息發(fā)送模塊520獲取出錯(cuò)報(bào)文時(shí),消息發(fā)送模塊520會(huì)根據(jù)出錯(cuò)報(bào) 文的PSN和出錯(cuò)報(bào)文所屬消息的首報(bào)文(即消息切分為報(bào)文后,報(bào)文隊(duì)列的第一個(gè)報(bào)文) 的PSN來(lái)發(fā)送NAK (Negative Acknowledge,報(bào)錯(cuò)消息)??蛇x的,消息發(fā)送模塊520以下面 兩種實(shí)施方式的其中一種方式來(lái)發(fā)送NAK :
[0148] 方式一,直接將出錯(cuò)報(bào)文的PSN( = 13)和首報(bào)文的PSN( = 10)記錄到NAK中,即 NAK包含出錯(cuò)報(bào)文的序列號(hào)和出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào),如圖9所示的一種報(bào) 錯(cuò)消息的示意圖,其中,PSNe為出錯(cuò)報(bào)文的PSN,PSNf為首報(bào)文的PSN ;
[0149] 方式二,計(jì)算出出錯(cuò)報(bào)文的PSN和首報(bào)文的PSN的偏移值Λ PSN(如:Λ PSN = 13-10 = 3),再將Λ PSN記錄到NAK中,S卩NAK包含出錯(cuò)報(bào)文的序列號(hào)相對(duì)于出錯(cuò)報(bào)文所屬 消息的首報(bào)文的序列號(hào)的偏移值,如圖10所示的另一種報(bào)錯(cuò)消息的示意圖。
[0150] 進(jìn)一步的,請(qǐng)求端根據(jù)NAK獲取出錯(cuò)報(bào)文的起始存儲(chǔ)地址,進(jìn)而從所述起始存儲(chǔ) 地址處開(kāi)始重傳報(bào)文。其中,請(qǐng)求端根據(jù)NAK獲取出錯(cuò)報(bào)文的起始存儲(chǔ)地址的方法請(qǐng)參閱 圖4中的【具體實(shí)施方式】,這里不再贅述。
[0151] 圖6是本發(fā)明實(shí)施例中一種報(bào)文重傳的系統(tǒng)的結(jié)構(gòu)示意圖。如圖所示本發(fā)明實(shí)施 例中的報(bào)文重傳的系統(tǒng)至少可以包括請(qǐng)求端61和響應(yīng)端62,其中:
[0152] 所述請(qǐng)求端61為如前文結(jié)合圖4所描述的請(qǐng)求端,用于向響應(yīng)端62發(fā)送多個(gè)數(shù) 據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所述消息包括至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是 固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都是連續(xù)編號(hào)的;
[0153] 所述響應(yīng)端62為如前文結(jié)合圖6所描述的響應(yīng)端,用于接收所述請(qǐng)求端61發(fā)送 的多個(gè)數(shù)據(jù)隊(duì)列,并檢測(cè)所述數(shù)據(jù)隊(duì)列;從所述數(shù)據(jù)隊(duì)列包含的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí) 生成報(bào)錯(cuò)消息;
[0154] 所述請(qǐng)求端61根據(jù)所述報(bào)錯(cuò)消息定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,并從所 述出錯(cuò)報(bào)文的起始存儲(chǔ)地址處向所述響應(yīng)端62重傳報(bào)文。
[0155] 圖14是本發(fā)明實(shí)施例中的另一種報(bào)文重傳的請(qǐng)求端的結(jié)構(gòu)示意圖,如圖14所示, 該請(qǐng)求端可以包括:至少一個(gè)處理器701,例如CPU,至少一個(gè)通信總線702、主機(jī)端通道適 配器703以及存儲(chǔ)器704。其中,通信總線702用于實(shí)現(xiàn)這些組件之間的連接通信。主機(jī)端 通道適配器703用于將請(qǐng)求端接入網(wǎng)絡(luò)。存儲(chǔ)器704可以是RAM (Random Access Memory, 高速存?。┐鎯?chǔ)器,也可以是NVM(Non-Volatile Memory,非易失性)存儲(chǔ)器,例如至少一個(gè) 磁盤(pán)存儲(chǔ)器。存儲(chǔ)器704還可以是遠(yuǎn)離前述處理器701的存儲(chǔ)裝置,例如至少一個(gè)內(nèi)存條。 存儲(chǔ)器704中存儲(chǔ)了一組程序代碼,且處理器701用于根據(jù)存儲(chǔ)器中存儲(chǔ)的程序代碼執(zhí)行 以下操作:
[0156] 向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所述消息包括至 少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都是連續(xù)編號(hào) 的;
[0157] 獲得所述響應(yīng)端發(fā)送來(lái)的報(bào)錯(cuò)消息,所述報(bào)錯(cuò)消息包括用于獲得所述出錯(cuò)報(bào)文的 序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息、所述出錯(cuò)報(bào)文所 屬消息的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào);
[0158] 根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào) 文的序列號(hào)的偏移值的信息獲得所述偏移值,并根據(jù)所述偏移值和所述報(bào)文的長(zhǎng)度的乘 積,獲得所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址;
[0159] 根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào),定位出所述出錯(cuò) 報(bào)文所屬消息的起始存儲(chǔ)地址,其中,所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的 序列號(hào)兩者與所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān)系;
[0160] 根據(jù)所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址和所述出 錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,并從所述出錯(cuò)報(bào) 文的起始存儲(chǔ)地址處向所述響應(yīng)端重傳報(bào)文,其中,所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地 址即為所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的起始存儲(chǔ)地址。
[0161] 可選的,若所述報(bào)錯(cuò)消息攜帶有所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息 的首報(bào)文的序列號(hào),則所述處理器701根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所 述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息獲得所述偏移值的具體操作可以 為:
[0162] 根據(jù)所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào),計(jì)算出 所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值,所述出 錯(cuò)報(bào)文的序列號(hào)是以所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)為基數(shù),按照一定順序進(jìn)行 計(jì)數(shù)得到的一個(gè)數(shù)值。
[0163] 圖15是本發(fā)明實(shí)施例中的另一種報(bào)文重傳的響應(yīng)端的結(jié)構(gòu)示意圖,如圖15所示, 該響應(yīng)端可以包括:至少一個(gè)處理器801,例如CPU,至少一個(gè)通信總線802、主機(jī)端通道適 配器803以及存儲(chǔ)器804。其中,通信總線802用于實(shí)現(xiàn)這些組件之間的連接通信。主機(jī)端 通道適配器803用于將響應(yīng)端接入網(wǎng)絡(luò)。存儲(chǔ)器804可以是RAM (Random Access Memory, 高速存取)存儲(chǔ)器,也可以是NVM(Non-Volatile Memory,非易失性)存儲(chǔ)器,例如至少一個(gè) 磁盤(pán)存儲(chǔ)器。存儲(chǔ)器804還可以是遠(yuǎn)離前述處理器801的存儲(chǔ)裝置,例如至少一個(gè)內(nèi)存條。 存儲(chǔ)器804中存儲(chǔ)了一組程序代碼,且處理器801用于根據(jù)存儲(chǔ)器中存儲(chǔ)的程序代碼執(zhí)行 以下操作:
[0164] 接收請(qǐng)求端發(fā)送的多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所述消息包 括至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都是連續(xù)編 號(hào)的;
[0165] 在從所述數(shù)據(jù)隊(duì)列包括的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí),生成報(bào)錯(cuò)消息并將所述報(bào)錯(cuò) 消息發(fā)送到所述請(qǐng)求端,所述報(bào)錯(cuò)消息包括用于獲取所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出 錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息、所述出錯(cuò)報(bào)文所屬消息的數(shù)據(jù)隊(duì)列的 隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào),其中,所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào) 文所屬消息的序列號(hào)兩者與所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān)系,以 使所述請(qǐng)求端根據(jù)所述偏移值與所述報(bào)文的長(zhǎng)度的乘積計(jì)算出所述出錯(cuò)報(bào)文相對(duì)于所述 出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址,并根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所 屬消息的序列號(hào)定位出所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,從而根據(jù)所述偏移地址和 所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,進(jìn)而從所述 出錯(cuò)報(bào)文的起始存儲(chǔ)地址處開(kāi)始重傳報(bào)文。
[0166] 可選的,處理器801發(fā)送的報(bào)錯(cuò)消息還可以包括所述出錯(cuò)報(bào)文的序列號(hào)和所述出 錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào),以使所述請(qǐng)求端根據(jù)所述出錯(cuò)報(bào)文的序列號(hào)和所述出 錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)計(jì)算出所述偏移值,所述出錯(cuò)報(bào)文的序列號(hào)是以所述出 錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)為基數(shù),按照一定順序進(jìn)行計(jì)數(shù)得到的一個(gè)數(shù)值。
[0167] 本發(fā)明實(shí)施例還提出了一種計(jì)算機(jī)存儲(chǔ)介質(zhì),所述計(jì)算機(jī)存儲(chǔ)介質(zhì)存儲(chǔ)有程序, 所述程序執(zhí)行時(shí)包括本發(fā)明實(shí)施例結(jié)合圖1?圖3所描述的報(bào)文重傳的方法的部分或全部 的步驟。
[0168] 本發(fā)明實(shí)施例的響應(yīng)端若在請(qǐng)求端發(fā)送來(lái)的數(shù)據(jù)隊(duì)列的消息中檢測(cè)到出錯(cuò)報(bào)文, 則生成報(bào)錯(cuò)消息并將報(bào)錯(cuò)消息發(fā)送到請(qǐng)求端,請(qǐng)求端從報(bào)錯(cuò)消息中獲得偏移值,并根據(jù)偏 移值獲得出錯(cuò)報(bào)文相對(duì)于出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址,以及從報(bào)錯(cuò)消息中獲得 數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所屬消息的序列號(hào),并根據(jù)數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和出錯(cuò)報(bào)文所 屬消息的序列號(hào)定位出出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,請(qǐng)求端進(jìn)而根據(jù)偏移地址和出 錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址定位出出錯(cuò)報(bào)文的起始存儲(chǔ)地址,并從起始存儲(chǔ)地址處向 響應(yīng)端重傳報(bào)文,實(shí)現(xiàn)在報(bào)文傳送出錯(cuò)時(shí)重傳出錯(cuò)報(bào)文的功能,且具有延時(shí)小和操作簡(jiǎn)單 的特點(diǎn)。
[0169] 本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以 通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì) 中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁 碟、光盤(pán)、只讀存儲(chǔ)記憶體(Read-Only Memory, ROM)或隨機(jī)存儲(chǔ)記憶體(Random Access Memory,RAM)等。
[0170] 以上所揭露的僅為本發(fā)明較佳實(shí)施例而已,當(dāng)然不能以此來(lái)限定本發(fā)明之權(quán)利范 圍,因此依本發(fā)明權(quán)利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。
【權(quán)利要求】
1. 一種報(bào)文重傳的方法,其特征在于,所述方法包括: 向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所述消息包括至少一 個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都是連續(xù)編號(hào)的; 獲得所述響應(yīng)端發(fā)送來(lái)的報(bào)錯(cuò)消息,所述報(bào)錯(cuò)消息包括用于獲得所述出錯(cuò)報(bào)文的序列 號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息、所述出錯(cuò)報(bào)文所屬消 息的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào); 根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的 序列號(hào)的偏移值的信息獲得所述偏移值,并根據(jù)所述偏移值和所述報(bào)文的長(zhǎng)度的乘積,獲 得所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址; 根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào),定位出所述出錯(cuò)報(bào)文 所屬消息的起始存儲(chǔ)地址,其中,所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列 號(hào)兩者與所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān)系; 根據(jù)所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址和所述出錯(cuò)報(bào) 文所屬消息的起始存儲(chǔ)地址,定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,并從所述出錯(cuò)報(bào)文的 起始存儲(chǔ)地址處向所述響應(yīng)端重傳報(bào)文,其中,所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址即 為所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的起始存儲(chǔ)地址。
2. 根據(jù)權(quán)利要求1所述的報(bào)文重傳方法,其特征在于,所述用于獲得所述出錯(cuò)報(bào)文的 序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息,具體包括: 所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào); 所述根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào) 文的序列號(hào)的偏移值的信息獲得所述偏移值,具體包括: 根據(jù)所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào),計(jì)算出所述 出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值,所述出錯(cuò)報(bào) 文的序列號(hào)是以所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)為基數(shù),按照一定順序進(jìn)行計(jì)數(shù) 得到的一個(gè)數(shù)值。
3. -種報(bào)文重傳的方法,其特征在于,所述方法包括: 接收請(qǐng)求端發(fā)送的多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所述消息包括 至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都是連續(xù)編號(hào) 的; 在從所述數(shù)據(jù)隊(duì)列包括的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí),生成報(bào)錯(cuò)消息并將所述報(bào)錯(cuò)消息 發(fā)送到所述請(qǐng)求端,所述報(bào)錯(cuò)消息包括用于獲取所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào) 文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息、所述出錯(cuò)報(bào)文所屬消息的數(shù)據(jù)隊(duì)列的隊(duì)列 號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào),其中,所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所 屬消息的序列號(hào)兩者與所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān)系,以使所 述請(qǐng)求端根據(jù)所述偏移值與所述報(bào)文的長(zhǎng)度的乘積計(jì)算出所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò) 報(bào)文所屬消息的首報(bào)文的偏移地址,并根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消 息的序列號(hào)定位出所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,從而根據(jù)所述偏移地址和所述 出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,進(jìn)而從所述出錯(cuò) 報(bào)文的起始存儲(chǔ)地址處開(kāi)始重傳報(bào)文。
4. 根據(jù)權(quán)利要求3所述的報(bào)文重傳的方法,其特征在于,所述在從所述數(shù)據(jù)隊(duì)列包括 的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí),生成報(bào)錯(cuò)消息并將所述報(bào)錯(cuò)消息發(fā)送到所述請(qǐng)求端,所述報(bào) 錯(cuò)消息包括用于獲取所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序 列號(hào)的偏移值的信息,包括: 若從所述數(shù)據(jù)隊(duì)列包括的消息中檢測(cè)到出錯(cuò)報(bào)文,生成報(bào)錯(cuò)消息并將所述報(bào)錯(cuò)消息發(fā) 送到所述請(qǐng)求端,所述報(bào)錯(cuò)消息包括所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首 報(bào)文的序列號(hào),以使所述請(qǐng)求端根據(jù)所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首 報(bào)文的序列號(hào)計(jì)算出所述偏移值,所述出錯(cuò)報(bào)文的序列號(hào)是以所述出錯(cuò)報(bào)文所屬消息的首 報(bào)文的序列號(hào)為基數(shù),按照一定順序進(jìn)行計(jì)數(shù)得到的一個(gè)數(shù)值。
5. -種報(bào)文重傳的請(qǐng)求端,其特征在于,所述請(qǐng)求端包括: 發(fā)送模塊,用于向響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所述消 息包括至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都是連 續(xù)編號(hào)的; 獲取模塊,用于獲得所述響應(yīng)端發(fā)送來(lái)的報(bào)錯(cuò)消息,所述報(bào)錯(cuò)消息包括用于獲得所述 出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息、所述 出錯(cuò)報(bào)文所屬消息的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào); 所述獲取模塊還用于根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文 所屬消息的首報(bào)文的序列號(hào)的偏移值的信息獲得所述偏移值,并根據(jù)所述偏移值和所述報(bào) 文的長(zhǎng)度的乘積,獲得所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移地址; 定位模塊,用于根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào),定位 出所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,其中,所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文 所屬消息的序列號(hào)兩者與所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址之間具有對(duì)應(yīng)關(guān)系; 所述定位模塊還用于根據(jù)所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏 移地址和所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址, 并從所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址處向所述響應(yīng)端重傳報(bào)文,其中,所述出錯(cuò)報(bào)文所屬消 息的起始存儲(chǔ)地址即為所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的起始存儲(chǔ)地址。
6. 根據(jù)權(quán)利要求5所述的請(qǐng)求端,其特征在于,所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào) 相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息,具體包括: 所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào); 所述獲取模塊用于根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò)報(bào)文所 屬消息的首報(bào)文的序列號(hào)的偏移值的信息獲得所述偏移值時(shí),具體用于根據(jù)所述出錯(cuò)報(bào)文 的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào),計(jì)算出所述出錯(cuò)報(bào)文的序列號(hào)相對(duì) 于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值,所述出錯(cuò)報(bào)文的序列號(hào)是以所述出 錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)為基數(shù),按照一定順序進(jìn)行計(jì)數(shù)得到的一個(gè)數(shù)值。
7. -種報(bào)文重傳的響應(yīng)端,其特征在于,所述響應(yīng)端包括: 接收模塊,用于接收請(qǐng)求端發(fā)送的多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息,所 述消息包括至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文都 是連續(xù)編號(hào)的; 消息發(fā)送模塊,用于在從所述數(shù)據(jù)隊(duì)列包括的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí),生成報(bào)錯(cuò)消 息并將所述報(bào)錯(cuò)消息發(fā)送到所述請(qǐng)求端,所述報(bào)錯(cuò)消息包括用于獲得所述出錯(cuò)報(bào)文的序列 號(hào)相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的消息、所述出錯(cuò)報(bào)文所屬消 息的數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)以及所述出錯(cuò)報(bào)文所屬消息的序列號(hào),其中,所述數(shù)據(jù)隊(duì)列的隊(duì)列 號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào)兩者與所述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址之間 具有對(duì)應(yīng)關(guān)系,以使所述請(qǐng)求端根據(jù)所述用于獲得所述出錯(cuò)報(bào)文的序列號(hào)相對(duì)于所述出錯(cuò) 報(bào)文所屬消息的首報(bào)文的序列號(hào)的偏移值的信息獲得所述偏移值,并根據(jù)所述偏移值與所 述報(bào)文的長(zhǎng)度的乘積計(jì)算出所述出錯(cuò)報(bào)文相對(duì)于所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的偏移 地址,所述請(qǐng)求端根據(jù)所述數(shù)據(jù)隊(duì)列的隊(duì)列號(hào)和所述出錯(cuò)報(bào)文所屬消息的序列號(hào)定位出所 述出錯(cuò)報(bào)文所屬消息的起始存儲(chǔ)地址,進(jìn)而根據(jù)所述偏移地址和所述出錯(cuò)報(bào)文所屬消息的 起始存儲(chǔ)地址定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,從所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址處開(kāi) 始重傳報(bào)文。
8. 根據(jù)權(quán)利要求7所述的響應(yīng)端,其特征在于,所述消息發(fā)送模塊用于在從所述數(shù)據(jù) 隊(duì)列包括的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí),生成報(bào)錯(cuò)消息并將所述報(bào)錯(cuò)消息發(fā)送到所述請(qǐng)求 端,所述報(bào)錯(cuò)消息包括所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列 號(hào),以使所述請(qǐng)求端根據(jù)所述出錯(cuò)報(bào)文的序列號(hào)和所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列 號(hào)計(jì)算出所述偏移值,所述出錯(cuò)報(bào)文的序列號(hào)是以所述出錯(cuò)報(bào)文所屬消息的首報(bào)文的序列 號(hào)為基數(shù),按照一定順序進(jìn)行計(jì)數(shù)得到的一個(gè)數(shù)值。
9. 一種報(bào)文重傳的系統(tǒng),其特征在于,所述系統(tǒng)包括如權(quán)利要求5或6所述的請(qǐng)求端和 如權(quán)利要求7或8所述的響應(yīng)端,其中 : 所述請(qǐng)求端用于向所述響應(yīng)端發(fā)送多個(gè)數(shù)據(jù)隊(duì)列,所述數(shù)據(jù)隊(duì)列包括至少一個(gè)消息, 所述消息包括至少一個(gè)報(bào)文,所述報(bào)文的長(zhǎng)度是固定的,且所述數(shù)據(jù)隊(duì)列包括的所有報(bào)文 都是連續(xù)編號(hào)的; 所述響應(yīng)端用于接收所述請(qǐng)求端發(fā)送的多個(gè)數(shù)據(jù)隊(duì)列,并檢測(cè)所述數(shù)據(jù)隊(duì)列;從所述 數(shù)據(jù)隊(duì)列包含的消息中檢測(cè)到出錯(cuò)報(bào)文時(shí)生成報(bào)錯(cuò)消息; 所述請(qǐng)求端根據(jù)所述報(bào)錯(cuò)消息定位出所述出錯(cuò)報(bào)文的起始存儲(chǔ)地址,并從所述出錯(cuò)報(bào) 文的起始存儲(chǔ)地址處向所述響應(yīng)端重傳報(bào)文。
【文檔編號(hào)】H04L1/18GK104065465SQ201410250643
【公開(kāi)日】2014年9月24日 申請(qǐng)日期:2014年6月6日 優(yōu)先權(quán)日:2014年6月6日
【發(fā)明者】石仔良, 陳步林 申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
镇赉县| 徐汇区| 潼关县| 咸阳市| 蓝山县| 弥勒县| 西丰县| 积石山| 甘洛县| 泽库县| 边坝县| 东至县| 望江县| 开鲁县| 锦州市| 乌苏市| 海伦市| 宜春市| 葵青区| 沂南县| 从江县| 基隆市| 浦江县| 华亭县| 利川市| 安吉县| 宁津县| 宜良县| 彭水| 视频| 安龙县| 上杭县| 绍兴县| 元朗区| 湘乡市| 敦煌市| 阳春市| 阜城县| 嘉义县| 凭祥市| 武陟县|