TCP,UDP淺析

     話不多說,直接上乾貨;
	網絡學習過程主要參考了《UNIX網絡編程卷1:套接字聯網API(第3版)》,《Windows Sockets網絡編程》,還有微軟官方文檔,前兩本書的PDF版下載鏈接:http://pan.baidu.com/s/1bozBif9 密碼:ps14
--------------------------------------------------------------------------------------------------------------------

TCP(Transmission Control Protocol)
----TCP是一個面向連接的,可靠的,具有擁塞控制的,以字節流的形式進行全雙工傳輸的傳輸層協議;
	下面就來一一解釋上面所說的各個特性;
	面向連接的:TCP在開始進行正式的數據傳輸時需要先在發送端和接受端建立連接,這裏就涉及到三次握手的建立連接過程,然後在傳輸完成後需要斷開連接,這時候就需要進行四次握手,之後的文章中會進行詳細的討論;
	可靠的:TCP向另一端發送數據時,他要求對端返回一個確認,如果沒有收到確認,TCP就會自動重傳數據並等待更長的時間,在數次重傳失敗後,TCP才放棄,如此在嘗試發送數據上所花的總時間一般爲4~10分鐘(依賴具體實現);但需要注意的是,TCP並不保證數據一定能被對方接收;TCP保證數據如果能到達接收端,那麼就能被正確有序的接收;
	具有擁塞控制的:TCP有一個接收窗口字段,這個字段用於流量控制,用於指示接收方願意接受的字節數量,當接收放讀取數據時,接收窗口就增大,收到數據時接收窗口就減小,具體控制細節這裏就不展開了(其實是裏面的細節還沒研究透徹-_-#);
	字節流形式的:TCP以字節流的方式進行傳送,並不管理邊界,即分組中不會攜帶分組大小的信息,這點與後面要討論的UDP是有所不同的;
	全雙工的:TCP在一個給定的連接上可以既發送數據又接收數據,因此TCP需要爲每個數據流的方向跟蹤諸如序列號和通告窗口大小等狀態信息;
	傳輸層協議:就是OSI七層網絡模型中的傳輸層啦

UDP(User Datagram Protocol)
----UDP是一個無連接的,不可靠的,無擁塞控制的以數據報的形式傳輸的傳輸層協議
	UDP並不需要建立連接就可以直接發送,接收數據,並且不提供重傳機制,不保證數據能到達接收端,也不保證
正確有序的到達接收端,也不提供擁塞控制機制,UDP也可以是全雙工的;

TCP連接的建立:三次握手
	下面以客戶端稱主動建立連接的一端,以服務端稱被動建立連接的一端;
	1.客戶端向服務端發送一個SYN,即同步分組,請求建立連接,函數調用:socket()用於創建socket,connect()用
於發起連接;
	2.服務端接受到該分組後向客戶端發送一個ACK分組,序列號爲SYN+1,同時發送一個SYN分組,序列號爲服務端
初始序列號+1,函數調用:socket()創建socket,bind()將socket進行命名,listen()監聽客戶端的請求,accept()接受請
求;
	3.客戶端接收到服務端的ACK和SYN分組後向服務端發送一個ACK分組,序列號爲SYN+1(這裏的SYN是服務端
的),connect()函數調用返回,服務端接受到ACK分組,accept()返回,開始read();
	至此,TCP連接建立,可以調用相關函數進行數據傳輸了。

TCP連接終止:四次握手
	1.客戶端發送一個FIN分組,請求斷開連接;調用close()函數,這裏不再發送數據,但是還可以接收數據;
	2.服務端接收到FIN分組,發送一個ACK分組,繼續讀取隊列中存在的分組,
	3.服務端的接收隊列已經讀取完成,發送FIN分組,調用close(),read()返回0;
	4.客戶端接受到FIN分組,發送一個ACK分組,至此TCP連接終止;

TCP客戶端狀態轉換圖:
	
TCP服務端狀態轉換圖:
	

TIME_WAIT狀態存在的原因:
	




	

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章