- 論壇徽章:
- 0
|
TCP會不會丟包?
TCP是一種面向連接的,可靠的,端到端的協(xié)議。\r\n之所以說是面象連接的,是因為在通信開始的時候,雙方要三次握手,其實是四次握手。比如兩臺機器發(fā)送端A,接收端B通信\r\n1、A說:“你在不在呀?”\r\n2、B說:“我在!盶r\n3、B接著說:“你在不在呀?”\r\n4、A說:“我在。”\r\n為什么要四次呢?在第2次握手的時候接收端B不是已經(jīng)確定A在了嗎?不是的,因為萬一有人偽造了ip包冒充A呢,所以B要確認一下A到底在不在。\r\n之所以說是可靠的,是對傳輸層的上一層,即應用層來說是可靠的。發(fā)送方發(fā)送的字節(jié)流會原封不動的被接受方的應用層吸收。想比較而言,udp就是不可靠的嘍,這個協(xié)議不能保證應用層能可靠的接收數(shù)據(jù),所以,采用udp協(xié)議的軟件要在應用層負責可靠,譬如QQ。\r\n之所以說是端到端的,是因為這個協(xié)議不考慮傳輸層以下是怎么實現(xiàn)的。就象世界上只有兩臺機器,需要考慮路由么?也好比在發(fā)送端和接收端的傳輸層連接了一個管子,所以也叫流模式。發(fā)送端發(fā)送的積木拼圖被按順序編了號,在接受端又會按順序組裝起來。\r\n至于丟包,是因為網(wǎng)絡曾或者數(shù)據(jù)鏈路層或者物理層造成的。如果是因為TCP協(xié)議本身的問題,接收端會發(fā)送icmp差錯報告,報告發(fā)送端TCP協(xié)議不可達.\r\n如果包沒有按順序到達,譬如編號1,5,而沒有收到2,3,4,應用程序直到2,3,4都到達的時候才會讀取。\r\n對于已經(jīng)建立的連接,如果長時間沒有數(shù)據(jù)交流,也會終止鏈接,釋放tcp協(xié)議所開辟的緩存。 |
|