TCP IP詳解 傳送ACK和RST的場景

2021-08-31 23:34:32 字數 1049 閱讀 9754

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

在有以下幾種情景,tcp會把ack包發出去:

1.收到1個包,啟動200ms定時器,等到200ms的定時器到點了(第二個包沒來),於是對這個包的確認ack被傳送。這叫做「延遲傳送」;

2.收到1個包,啟動200ms定時器,200ms定時器還沒到,第二個資料報又來了(兩個資料報乙個ack);

3.收到1個包,啟動200ms定時器,還沒超時,正好要給對方發點內容。於是對這個包的確認ack就跟著捎過去。這叫做「捎帶傳送」;

4.每當tcp接收到乙個超出期望序號的失序資料時,它總是傳送乙個確認序號為其期望序號的ack;

5.視窗更新或者也叫做開啟視窗(接收端視窗達到最大的時候,接收快取中的資料全部推向程序導致接收快取為空),通知傳送端可以繼續傳送;

6.正常情況下對對方保活探針的響應,詳見tcp keepalive

有以下情況會傳送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。

給我老師的人工智慧教程打call!

《TCP IP詳解》 卷一 ARP和RARP協議

首先,我們要弄明白乙個概念 網路實現當中的位址。在網路中,只要提到位址,我們會馬上想到ip位址。實際上,資料在乙太網上傳輸的時候,並不是直接根據ip位址確定目的介面的,而是根據乙個叫做乙太網位址的東西確定 的。裝置驅動程式從不檢查ip資料報中的目的ip位址!和ip位址類似,乙太網位址是乙個48bit...

《TCP IP詳解》 卷一 廣播和多播

在前面學習ip位址的概念的時候,我們會了解到ip位址分為三類 單播位址 廣播位址和多播位址。單播位址我們實際上接觸的非常多,這裡就記錄一些廣播和多播的學習筆記。在普通的乙太網單播通訊時,每個乙太網幀包括了目的主機和源主機的位址,並發給單個的目的主機。這樣的二個主機之間的通訊不會干擾同乙個網路中的其他...

《TCP IP協議詳解》第12章 廣播和多播

廣播和多播僅用於udp。tcp是面向連線的協議,意味著兩個主機內的程序間存在一條連線。過濾過程 首先,網絡卡檢視由通道傳送過來的幀,確定是否接收該幀,若接收後就將它傳往裝置驅動程式。通常網絡卡僅接收那些目的位址為網絡卡實體地址或廣播位址的幀。另外,多數介面均被設定為混合模式,這種模式能接收每個幀的乙...