TCP之RST傳送場景

工程師WWW發表於2015-01-23
TCP之RST傳送場景
 
1.connect一個不存在的埠;
 
2.向一個已經關掉的連線send資料;
 
3.向一個已經崩潰的對端傳送資料(連線之前已經被建立);
 
4.close(sockfd)時,直接丟棄接收緩衝區未讀取的資料,並給對方發一個RST。這個是由SO_LINGER選項來控制的;
 
5.a重啟,收到b的保活探針,a發rst,通知b。
 
TCP socket在任何狀態下,只要收到RST包,即可進入CLOSED初始狀態。
 
值得注意的是RST報文段不會導致另一端產生任何響應,另一端根本不進行確認。收到RST的一方將終止該連線。程式行為如下:
 
阻塞模型下,核心無法主動通知應用層出錯,只有應用層主動呼叫read()或者write()這樣的IO系統呼叫時,核心才會利用出錯來通知應用層對端RST。
非阻塞模型下,select或者epoll會返回sockfd可讀,應用層對其進行讀取時,read()會報錯RST。

相關文章