串口服務器四問四答
問:什么是ACK?
答:ACK的全稱為Acknowledge character,即確認字符,表示接收到的字符無錯誤。
接收站對所收到的報文進行檢查,若未發現錯誤,便向發送站發出確認回答ACK,表明信息已被正確接收,并準備好接收下一份報文。該控制字符可由中心結點發送,也可由遠地結點發送。如果發送方沒有收到信號,那么發送方可能會重發當前的數據包,也可能停止傳送數據,具體情況取決于所采用的網絡協議。
TCP報文格式中的控制位由6個標志位構成,其中一個就是ACK,ACK為1表示確認號有效,為0表示報文中不包含確認信息,忽略確認號字段。
問:什么是三次握手?
答:第一次握手:建立連接時,客戶端發送syn包(seq=j)到服務器,并進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(seq=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態。
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。
完成三次握手,客戶端與服務器開始傳送數據。
問:為什么需要三次握手?
答:1、為了防止舊的重復連接從而引起連接混亂的問題。
在網絡狀況比較復雜或者網絡狀況比較差的情況下,發送方可能會連續發送多次建立連接的請求。如果 TCP 握手的次數只有兩次,那么接收方只能選擇接受請求或者拒絕接受請求,但它并不清楚這次的請求是正常的請求,還是由于網絡環境問題而導致的過期請求,如果是過期請求的話就會造成錯誤的連接。
2、同步初始化序列化。
TCP 為了保證在不穩定的網絡環境中構建一個穩定的數據連接,它就需要一個“序列號”字段來保證自己的穩定性,而這個序列號的作用就是防止數據包重復發送,以及有效的解決數據包接收時順序顛倒的問題。
問:什么是TCP通信?
答:傳輸控制協議(TCP,Transmission Control Protocol)是為了在不可靠的互聯網絡上提供可靠的端到端字節流而專門設計的一個傳輸協議。
因為互聯網絡的不同部分可能有截然不同的拓撲結構、帶寬、延遲、數據包大小和其他參數。TCP的設計目標是能夠動態地適應互聯網絡的這些特性,而且具備面對各種故障時的健壯性。
應用層向TCP層發送用于網間傳輸的、用8位字節表示的數據流,然后TCP把數據流分區成適當長度的報文段(通常受該計算機連接的網絡的數據鏈路層的最大傳輸單元(MTU)的限制)。之后TCP把結果包傳給IP層,由它來通過網絡將包傳送給接收端實體的TCP層。TCP為了保證不發生丟包,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然后接收端實體對已成功收到的包發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那么對應的數據包就被假設為已丟失將會被進行重傳。TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算校驗和。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。