【文章內(nèi)容簡(jiǎn)介】
應(yīng)答時(shí),發(fā)送請(qǐng)求時(shí)的線路與CUPS斷開(kāi),機(jī)構(gòu)可以選擇由CUPS將應(yīng)答報(bào)文通過(guò)其他工作正常的線路返回,機(jī)構(gòu)也可以選擇由CUPS丟棄此應(yīng)答報(bào)文。雖然真正含義上的原路返回為上文定義的內(nèi)容,但銀聯(lián)處理中心還支持更廣義的概念,能夠提供如下兩個(gè)粒度的原路返回功能:對(duì)機(jī)構(gòu)的通訊主機(jī),銀聯(lián)可提供通訊主機(jī)組管理,原路返回粒度可控制到該組。即,只通過(guò)該組內(nèi)的連接返回,但并不是發(fā)起請(qǐng)求的連接。這樣可以控制是返回到同一個(gè)處理中心,還是返回到同一臺(tái)通訊主機(jī);對(duì)機(jī)構(gòu)的通訊主機(jī),銀聯(lián)還可提供單個(gè)IP管理,原路返回粒度可控制到該IP。即,只通過(guò)該IP中的連接返回,但并不是發(fā)起請(qǐng)求的連接。因此,銀聯(lián)處理中心是提供了更為廣義的“線路組原路返回”概念。即,交易應(yīng)答可以通過(guò)與交易請(qǐng)求上送線路在同一組的任一線路返回。線路分組的方法可以應(yīng)入網(wǎng)機(jī)構(gòu)的要求采取不同的策略(比如:入網(wǎng)機(jī)構(gòu)側(cè)屬于同一個(gè)中心/同一臺(tái)服務(wù)器/同一個(gè)IP的線路分在同一組)?!?文件傳輸?shù)倪B接數(shù)目和方式入網(wǎng)機(jī)構(gòu)和銀聯(lián)處理中心之間的文件傳輸不是實(shí)時(shí)性的聯(lián)機(jī)業(yè)務(wù),因此規(guī)定使用短連接的方式。雙方建立一條全雙工的連接,連接建立后,雙方在同一條連接上收發(fā)請(qǐng)求和應(yīng)答。當(dāng)文件傳送完成后,雙方關(guān)閉連接。圖12 文件傳輸?shù)倪B接示意圖 通信負(fù)載均衡銀聯(lián)處理中心和每個(gè)入網(wǎng)機(jī)構(gòu)建立多條連接不僅為了防止單點(diǎn)故障,還應(yīng)在多條通信連接上實(shí)現(xiàn)通信負(fù)載均衡。例如,銀聯(lián)處理中心通過(guò)兩條或四條發(fā)送連接向入網(wǎng)機(jī)構(gòu)發(fā)送報(bào)文時(shí),可以采用簡(jiǎn)單輪詢的方式,即從第一條發(fā)送連接開(kāi)始路由,第一個(gè)報(bào)文從第一條發(fā)送連接發(fā)送,第二個(gè)報(bào)文從第二條發(fā)送連接發(fā)送,依次類推,到最后一個(gè)連接時(shí)再路由到第一條可用的發(fā)送連接。圖13 簡(jiǎn)單輪詢方式除了簡(jiǎn)單輪詢的方法,還可以通過(guò)監(jiān)測(cè)各通信服務(wù)器和各條連接的負(fù)載情況動(dòng)態(tài)調(diào)整各條連接的路由選擇。通過(guò)將銀聯(lián)處理中心和入網(wǎng)機(jī)構(gòu)之間的通信負(fù)載合理的分配到各條連接和各臺(tái)通信服務(wù)器上,可以防止出現(xiàn)某臺(tái)通信服務(wù)器上處理壓力過(guò)大的問(wèn)題?!?Socket選項(xiàng)設(shè)置在利用socket技術(shù)編寫(xiě)通信程序時(shí),為了保證通信雙方可以正常通信,需要設(shè)置相關(guān)的選項(xiàng),其中有的選項(xiàng)是協(xié)議相關(guān)的。在不同的系統(tǒng)中,socket選項(xiàng)有不同的默認(rèn)值。這里只規(guī)定幾個(gè)主要的socket選項(xiàng)設(shè)置,其他選項(xiàng)均使用系統(tǒng)默認(rèn)值。a) 保持socket的“LINGER”選項(xiàng)為缺省狀態(tài),即“關(guān)閉”狀態(tài)。這個(gè)選項(xiàng)影響到使用TCP協(xié)議的socket關(guān)閉操作的行為。設(shè)置該選項(xiàng)為“關(guān)閉”狀態(tài),使socket關(guān)閉操作保持默認(rèn)行為,即close()函數(shù)調(diào)用立即返回,如果socket發(fā)送緩沖區(qū)中還有數(shù)據(jù),則系統(tǒng)會(huì)發(fā)送這些數(shù)據(jù)。b) 設(shè)置socket的“REUSEADDR”為“打開(kāi)”狀態(tài)。設(shè)置這個(gè)選項(xiàng)可以保證socket監(jiān)聽(tīng)進(jìn)程在異常退出并重新啟動(dòng)后,仍可以成功綁定到原監(jiān)聽(tīng)端口。該選項(xiàng)主要用在監(jiān)聽(tīng)socket連接請(qǐng)求的服務(wù)器端。c) 設(shè)置socket的“KeepAlive”為“打開(kāi)”狀態(tài),設(shè)置這個(gè)選項(xiàng)可以保證在socket連接沒(méi)有流量時(shí),自動(dòng)開(kāi)始發(fā)送KeepAlive偵測(cè)包,偵測(cè)socket是否已經(jīng)斷開(kāi)。 協(xié)議定義 參考資料有關(guān)TCP/IP協(xié)議的背景信息和協(xié)議定義可以參考以下文檔:a) RFC 791 Internet Protocol for the IP protocol;b) RFC 792 Internet Control Message Protocol for the ICMP protocol;c) RFC 793 Transmission Control Protocol for the TCP protocol;d) RFC 1122 Requirements for Internet Hosts — Communication Layers;e) RFC 1123 Requirements for Internet Hosts — Application and Support;g) RFC 959 File Transfer Protocol?!?協(xié)議定義范圍本節(jié)論述的通信控制協(xié)議以TCP/IP協(xié)議為基礎(chǔ),規(guī)定了銀聯(lián)處理中心和入網(wǎng)機(jī)構(gòu)之間建立多條socket連接的方式,雙方在多條連接上傳輸報(bào)文的方法以及通信異常的檢測(cè)和處理方法?!?基本規(guī)定 數(shù)據(jù)編碼格式銀聯(lián)處理中心和入網(wǎng)機(jī)構(gòu)之間傳送的所有數(shù)據(jù)均是八位的二進(jìn)制數(shù)據(jù),沒(méi)有特殊含義字符和控制字符?!?通信接口和業(yè)務(wù)流程的無(wú)關(guān)性通信接口程序不對(duì)交易報(bào)文的類型作識(shí)別,不對(duì)報(bào)文內(nèi)容作處理。因此,業(yè)務(wù)流程上的任何變動(dòng)對(duì)通信接口程序無(wú)影響,反之亦然?!?聯(lián)機(jī)交易控制協(xié)議 建立連接 連接建立過(guò)程銀聯(lián)處理中心和入網(wǎng)機(jī)構(gòu)在建立連接時(shí),采用的是client-server方式。服務(wù)方監(jiān)聽(tīng)客戶的連接請(qǐng)求,客戶方調(diào)用connect()發(fā)送連接請(qǐng)求,開(kāi)始TCP的三步握手過(guò)程。雙方連接建立的過(guò)程如下:圖14 連接建立過(guò)程a) 服務(wù)方調(diào)用accept()準(zhǔn)備接收連接請(qǐng)求;b) 客戶方調(diào)用connect()發(fā)起連接請(qǐng)求,使客戶方的TCP發(fā)送同步數(shù)據(jù)段(SYN段)。服務(wù)方TCP收到后返回應(yīng)答(ACK段),同時(shí)發(fā)送自己的同步數(shù)據(jù)段??蛻舴絚onnect()調(diào)用返回;c) 客戶方TCP對(duì)服務(wù)方的同步數(shù)據(jù)段返回應(yīng)答,連接建立,服務(wù)方accept()調(diào)用返回。當(dāng)連接成功建立或發(fā)生錯(cuò)誤時(shí),客戶方的connect()調(diào)用返回??赡馨l(fā)生的錯(cuò)誤有以下幾種情況:a) 客戶方TCP在一定時(shí)間內(nèi)沒(méi)有收到SYN段的應(yīng)答,調(diào)用返回超時(shí)錯(cuò)誤ETIMEDOUT。不同系統(tǒng)規(guī)定的超時(shí)時(shí)間從75秒到幾分鐘不等。b) 如果服務(wù)方TCP給客戶方TCP重置應(yīng)答RST,調(diào)用返回連接拒絕錯(cuò)誤,說(shuō)明在服務(wù)方?jīng)]有監(jiān)聽(tīng)進(jìn)程運(yùn)行,或監(jiān)聽(tīng)進(jìn)程已退出。c) 如果網(wǎng)絡(luò)中某路由器返回目的不可達(dá)的ICMP應(yīng)答,則客戶機(jī)系統(tǒng)會(huì)重發(fā)連接請(qǐng)求直到超時(shí),此時(shí)調(diào)用返回主機(jī)不可達(dá)錯(cuò)誤EHOSTUNREACH。Connect調(diào)用使客戶端TCP從CLOSED狀態(tài)轉(zhuǎn)變到SYN_SENT狀態(tài)。如果連接成功建立,則轉(zhuǎn)變到ESTABLISHED狀態(tài)。如果出錯(cuò),則socket不再可用,必須被關(guān)閉。圖15 socket連接建立狀態(tài)轉(zhuǎn)換圖 連接建立時(shí)序?qū)τ趩喂し绞蕉?,在銀聯(lián)處理中心和入網(wǎng)機(jī)構(gòu)初始建立連接時(shí),要求先由入網(wǎng)機(jī)構(gòu)發(fā)起連接請(qǐng)求。銀聯(lián)處理中心在監(jiān)聽(tīng)端口監(jiān)聽(tīng)入網(wǎng)機(jī)構(gòu)的連接請(qǐng)求,在接收到入網(wǎng)機(jī)構(gòu)的連接請(qǐng)求并通過(guò)合法性檢查后,根據(jù)入網(wǎng)機(jī)構(gòu)的IP地址和監(jiān)聽(tīng)端口號(hào)向入網(wǎng)機(jī)構(gòu)發(fā)起連接請(qǐng)求,完成一進(jìn)一出兩條單工長(zhǎng)連接的建立。在該連接對(duì)的建立過(guò)程中,銀聯(lián)處理中心將設(shè)置一進(jìn)一出兩條單工長(zhǎng)連接建立的最長(zhǎng)時(shí)間間隔參數(shù)值。如果中心建立好接收連接后,在最長(zhǎng)1分鐘內(nèi)仍無(wú)法建立與機(jī)構(gòu)的發(fā)送連接,則中心主動(dòng)斷開(kāi)與該發(fā)送連接相對(duì)應(yīng)的接收連接,回復(fù)到偵聽(tīng)狀態(tài),等待接收入網(wǎng)機(jī)構(gòu)重新建立連接的請(qǐng)求。建立其他連接的過(guò)程與此相同。如果建立連接的過(guò)程超時(shí)或發(fā)生錯(cuò)誤,則關(guān)閉本地socket后,重新建立連接。如果一條連接