天天看點

TCP/IP協定碎碎念

整個TCP過程描述:

1)伺服器預設的狀态是LISTEN,用戶端先向伺服器發送一個SYS,表明自己要求連結,這時候用戶端處于SYS_SENT狀态;

2)伺服器收到SYS,傳回一個ACK,同時再補上一個SYS,這時候伺服器端處于SYS_RECEIVE狀态;

3)用戶端收到了伺服器傳回的SYS,自己進化成ESTABLISHED狀态,然後應答那個ACK,伺服器接收到這個應答ACK,進化成ESTABLISHED狀态。這樣兩個就算徹底連接配接了。

以上簡稱“三次握手”。

然後客戶機與伺服器可以傳送資料,keepalive。

4)用戶端向伺服器發送一個FIN告訴伺服器可以斷開連接配接了,此時用戶端處于FIN_WAIT 1狀态。

5)伺服器收到這個資訊得知可以斷開連接配接了,伺服器處于CLOSE_WAIT狀态,然後發送資訊告訴用戶端,伺服器這時候處于LAST_ACK狀态。

6)用戶端收到伺服器确認斷開連接配接的資訊,進化成FIN_WAIT 2狀态,最後成為TIME_WAIT狀态。等待一些時間已確定能收到伺服器的應答。

以上過程簡稱“四次揮手”。

TCP的傳輸過程一共是十一個狀态:LISTEN,SYS_SENT,SYS_RECEIVE,ESTABLISHED,FIN_WAIT 1,FIN_WAIT 2,CLOSE_WAIT,CLOSEING,LAST_ACK,TIME_WAIT,CLOSED.

CLOSEING:等待遠端TCP 的連接配接終止請求确認

CLOSED:不在連接配接狀态(其實是不存在的)

那麼為什麼TCP非要采取三次握手呢?

主要原因就是防止“由于網絡阻塞,失效的資訊又複活”的情況,舉個例子:

A要給B傳資料,開始的時候A傳了一次請求,但是這個請求失效了,于是過了一段時間之後,A又傳了一次請求,這個時候B收到了,兩個開始快樂的交流。交流完畢,雙方斷開。但是這個時候那個失效的資訊終于爬到了B端,B也會如期打開端口跟A建立連接配接,A一看B來張開懷抱,那麼A也要張開懷抱,但是A原打算要的資料已經都得到了,這一次雖然建立了連結,已經沒東西可以要了。那麼這樣的連結就是空連接配接,白白浪費帶寬。

TCP VS UDP

先說相同點,他倆都可以全雙工,而且都是端到端的傳輸層通信協定。

TCP一般用來進行檔案傳輸,因為檔案的傳輸要求真真切切,一絲一毫都不能少,是以每一次建立必須要求資料都是十全十美。

TCP隻能一對一,不支援廣播和多點傳播,TCP是面向位元組流的。傳輸速度慢。

UDP一般用來網絡語音傳輸,建立為主,通信品質其次。

UDP雖然不可靠但是也會盡全力傳遞,他是面向封包的,應用層給UDP什麼樣的封包,UDP就傳送什麼樣的封包。

UDP支援一對一,一對多,多對多(各種視訊會議),傳輸速度快。

 本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1746515

繼續閱讀