功能及作用
一般說來,無論何時一個報文段發往基準的連接(referencedconnection)出現錯誤,TCP都會發出一個複位報文段(這裡提到的“基準的連接”是指由目的IP地址和目的端口号以及源IP地址和源端口号指明的連接。)
使用場景
到不存在的端口的連接請求
産生複位的一種常見情況是當連接請求到達時,目的端口沒有進程正在監聽。對于UDP,當一個數據報到達目的端口時,該端口沒在使用,它将産生一個ICMP端口不可達的信息。而TCP則使用複位。
異常終止一個連接
終止一個連接的正常方式是一方發送FIN。有時這也稱為有序釋放(orderlyrelease),因為在所有排隊數據都已發送之後才發送FIN,正常情況下沒有任何數據丢失。但也有可能發送一個複位報文段而不是FIN來中途釋放一個連接。有時稱這為異常釋放(abortiverelease)。
異常終止一個連接對應用程序來說有兩個優點:
(1)丢棄任何待發數據并立即發送複位報文段;
(2)RST的接收方會區分另一端執行的是異常關閉還是正常關閉。應用程序使用的API必須提供産生異常關閉而不是正常關閉的手段。
需要注意的是RST報文段不會導緻另一端産生任何響應,另一端根本不進行确認。收到RST的一方将終止該連接,并通知應用層連接複位。
檢測半打開連接
如果一方已經關閉或異常終止連接而另一方卻還不知道,我們将這樣的TCP連接稱為半打開(Half-Open)的。任何一端的主機異常都可能導緻發生這種情況。隻要不打算在半打開連接上傳輸數據,仍處于連接狀态的一方就不會檢測另一方已經出現異常。
半打開連接的另一個常見原因是當服務器主機突然掉電而不是正常的結束服務應用程序後再關機,服務器主機重啟後,從客戶向服務器發送另一行字符。由于服務器的TCP已經重新啟動,它将丢失複位前連接的所有信息,因此它不知道數據報文段中提到的連接。TCP的處理原則是接收方以複位作為應答。