概述
在TCP協(xié)議中,RST標識復位咧欣,用來異常的關閉鏈接。在TCP的設計中它是不可或缺的轨帜,發(fā)送RST包關閉鏈接時魄咕,不必等緩沖區(qū)的數(shù)據(jù)都發(fā)送出去。直接丟棄緩沖區(qū)中的數(shù)據(jù)蚌父,發(fā)送RST包哮兰。而接受段收到RST包后,也不必發(fā)送ACK包來確認梢什。
產生RST包的一些原因
1. 請求的目標端口未打開奠蹬,服務端發(fā)送RST包。
2. 請求超時嗡午。
3. Socket內核接收緩沖區(qū)Recv-Q中的數(shù)據(jù)未完全被應用程序讀取囤躁,而關閉該Socket。
此時應用程序關閉socket鏈接對象荔睹。
產生RST段
4. 向已關閉的Socket中發(fā)送數(shù)據(jù)狸演。(send與close調用)
tcp一端調用close關閉。
socket另一端調用send向已關閉的socket發(fā)送數(shù)據(jù)
tcp一端調用close關閉僻他,當前socket處于FIN_WAIT2定時器周期宵距。
tcp另一端在FIN_WAIT2定時器超時之前調用close方法,正常返回ACK確認包吨拗。
tcp一端調用close關閉满哪,當前socket處于FIN_WAIT2定時器周期。
FIN_WAIT2超時
tcp另一端在FIN_WAIT2超時后調用close
如果調用close()方法劝篷,關閉的Socket代表的鏈接依然處于FIN_WAIT2狀態(tài)哨鸭,則正常返回ACK確認包。如果狀態(tài)FIN_WAIT2的超時娇妓,則close()調用后【向FIN_WAIT2超時狀態(tài)的連接發(fā)送FIN】像鸡,依然會返回RST包。