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