歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix基礎知識

UNIX網絡編程:如何產生RST

產生RST的3個條件:

1. 建立連接的SYN到達某端口,但是該端口上沒有正在監聽的服務。

如:IP為192.168.1.33的主機上並沒有開啟WEB服務(端口號為0x50),這時我們通過IE去訪問192.168.1.33,通過Wireshark抓包,可以看到,對此SYN包的回復為RST。說明此服務器(即IP192.168.1.33)是存在的,不過其上並沒有運行WEB Server(如apache)的程序

2. TCP想取消一個已有連接。

基於什麼樣的情況才會取消一個已有的連接?

3. TCP接收到了一個根本不存在的的連接上的分節。

我們知道,TCP在數據傳輸前,要通過三路握手(three-way handshake)建立連接,即連接建立起後,服務器和客戶端都有一個關於此連接的描述,具體形式表現為套接口對,如果收到的某TCP分節,根據源IP,源tcp port number,及目的IP,目的tcp port number在本地(指服務器或客戶端)找不到相應的套接口對,TCP則認為在一個不存在的連接上收到了分節,說明此連接已錯,要求重新建立連接,於是發出了RST的TCP包!

今天遇到的問題就是 server 端被殺調了,結果client不知道,仍然拿原來的socket去操作,結果server返回rst的tcp包,client異步讀返回錯誤。

查看本欄目更多精彩內容:http://www.bianceng.cn/OS/unix/

Copyright © Linux教程網 All Rights Reserved