1. 程式人生 > >5-5 網絡編程

5-5 網絡編程

虛擬 -o 路由器 發出 int spa tab 技術 idt

1,軟件的開發架構

C\S架構:Client與Server ,中文意思:客戶端與服務器端架構,這種架構也是從用戶層面(也可以是物理層面)來劃分的。

B\S架構:Browser與Server,中文意思:瀏覽器端與服務器端架構,這種架構是從用戶層面來劃分的。

2,網絡基礎

交換機,同一個局域網內的機器之間的交流就需要交換機。

路由器,跨局域網機器之間的交流,不同的交換機連接到路由器。

網關IP:跨局域網的機器之間不能直接通信,只能通過網關ip通信。

mac地址:每塊網卡出廠時都被燒制上一個世界唯一的mac地址,長度為48位2進制,通常由12位16進制數表示(前六位是廠商編號,後六位是流水線號)。

子網掩碼就是表示子網絡特征的一個參數。

ip協議,表示一臺電腦在網絡中的位置。

  • 規定網絡地址的協議叫ip協議,它定義的地址稱之為ip地址,廣泛采用的v4版本即ipv4,它規定網絡地址由32位2進制表示
  • 範圍0.0.0.0-255.255.255.255
  • 一個ip地址通常寫成四段十進制數,例:172.16.10.1

端口,在同一臺電腦上,同一時刻,每一個端口號,只能為一個運行中的程序提供服務 ,,只有擁到互聯網通信的程序,才會擁有端口的概念。端口是虛擬的,端口的範圍是0-65535,1-1024是系統占用,一般用8000到10000的端口。

arp協議,查詢ip地址和MAC地址的對應關系,地址解析協議,即arp協議是根據ip地址獲取物理地址的tcp/ip協議。

3,TCP協議和UDP協議

tcp協議,傳輸控制協議,提供的是面向連接,可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間建立一個tcp協議,之後才能傳輸數據。tcp協議提供超時重發,丟棄重復數據,檢驗數據流量控制等功能,保證數據能從一端傳到另一端。

當應用程序希望通過 TCP 與另一個應用程序通信時,它會發送一個通信請求。這個請求必須被送到一個確切的地址。在雙方“握手”之後,TCP 將在兩個應用程序之間建立一個全雙工 (full-duplex) 的通信。

這個全雙工的通信將占用兩個計算機之間的通信線路,直到它被一方或雙方關閉為止。

技術分享圖片

TCP是因特網中的傳輸層協議,使用三次握手協議建立連接。當主動方發出SYN連接請求後,等待對方回答SYN+ACK[1
],並最終對對方的 SYN 執行 ACK 確認。這種建立連接的方法可以防止產生錯誤的連接。[1] TCP三次握手的過程如下: 客戶端發送SYN(SEQ=x)報文給服務器端,進入SYN_SEND狀態。 服務器端收到SYN報文,回應一個SYN (SEQ=y)ACK(ACK=x+1)報文,進入SYN_RECV狀態。 客戶端收到服務器端的SYN報文,回應一個ACK(ACK=y+1)報文,進入Established狀態。 三次握手完成,TCP客戶端和服務器端成功地建立連接,可以開始傳輸數據了。 tcp的三次握手
建立一個連接需要三次握手,而終止一個連接要經過四次握手,這是由TCP的半關閉(half-close)造成的。
(1) 某個應用進程首先調用close,稱該端執行“主動關閉”(active close)。該端的TCP於是發送一個FIN分節,表示數據發送完畢。
(2) 接收到這個FIN的對端執行 “被動關閉”(passive close),這個FIN由TCP確認。
註意:FIN的接收也作為一個文件結束符(end-of-file)傳遞給接收端應用進程,放在已排隊等候該應用進程接收的任何其他數據之後,因為,FIN的接收意味著接收端應用進程在相應連接上再無額外數據可接收。
(3) 一段時間後,接收到這個文件結束符的應用進程將調用close關閉它的套接字。這導致它的TCP也發送一個FIN。
(4) 接收這個最終FIN的原發送端TCP(即執行主動關閉的那一端)確認這個FIN。[1] 
既然每個方向都需要一個FIN和一個ACK,因此通常需要4個分節。
註意:
(1) “通常”是指,某些情況下,步驟1的FIN隨數據一起發送,另外,步驟2和步驟3發送的分節都出自執行被動關閉那一端,有可能被合並成一個分節。[2] 
(2) 在步驟2與步驟3之間,從執行被動關閉一端到執行主動關閉一端流動數據是可能的,這稱為“半關閉”(half-close)。
(3) 當一個Unix進程無論自願地(調用exit或從main函數返回)還是非自願地(收到一個終止本進程的信號)終止時,所有打開的描述符都被關閉,這也導致仍然打開的任何TCP連接上也發出一個FIN。
無論是客戶還是服務器,任何一端都可以執行主動關閉。通常情況是,客戶執行主動關閉,但是某些協議,例如,HTTP/1.0卻由服務器執行主動關閉。[2]

udp協議,用戶數據包協議,是一個簡單的面向數據包的運輸層協議,udp 不提供可靠性,它只是把應用程序傳給ip層的數據包發送出去,但並不能保證他們能到達目的地。由於udp在傳輸數據時不用在客戶和服務器之間建立連接,且沒有超時重發等機制,故而傳輸速度很快。

現在Internet上流行的協議是TCP/IP協議,該協議中對低於1024的端口都有確切的定義,
他們對應著Internet上一些常見的服務。這些常見的服務可以分為使用TCP端口(面向連接)和使用UDP端口(面向無連接)兩種。 說到TCP和UDP,首先要明白“連接”和“無連接”的含義,他們的關系可以用一個形象地比喻來說明,就是打電話和寫信。兩個人如果要通話,
首先要建立連接——即打電話時的撥號,等待響應後——即接聽電話後,才能相互傳遞信息,
最後還要斷開連接——即掛電話。寫信就比較簡單了,
填寫好收信人的地址後將信投入郵筒,收信人就可以收到了。從這個分析可以看出,
建立連接可以在需要痛心地雙方建立一個傳遞信息的通道,
在發送方發送請求連接信息接收方響應後,由於是在接受方響應後才開始傳遞信息,而且是在一個通道中傳送,
因此接受方能比較完整地收到發送方發出的信息,即信息傳遞的可靠性比較高。
但也正因為需要建立連接,使資源開銷加大(在建立連接前必須等待接受方響應,
傳輸信息過程中必須確認信息是否傳到及斷開連接時發出相應的信號等),
獨占一個通道,在斷開連接錢不能建立另一個連接,即兩人在通話過程中第三方不能打入電話。
而無連接是一開始就發送信息(嚴格說來,這是沒有開始、結束的),只是一次性的傳遞,是先不需要接受方的響應,
因而在一定程度上也無法保證信息傳遞的可靠性了,
就像寫信一樣,我們只是將信寄出去,卻不能保證收信人一定可以收到。 TCP是面向連接的,有比較高的可靠性, 一些要求比較高的服務一般使用這個協議,如FTP、Telnet、SMTP、HTTP、POP3等。 而UDP是面向無連接的,使用這個協議的常見服務有DNS、SNMP、QQ等。對於QQ必須另外說明一下,QQ2003以前是只使用UDP協議的,
其服務器使用8000端口,偵聽是否有信息傳來,客戶端使用4000端口,
向外發送信息(這也就不難理解在一般的顯IP的QQ版本中顯示好友的IP地址信息中端口常為4000或其後續端口的原因了),
即QQ程序既接受服務又提供服務,在以後的QQ版本中也支持使用TCP協議了。

互聯網協議與osi模型

互聯網協議按照功能不同分為osi七層或tcp/ip五層或tcp/ip四層

技術分享圖片

每層運行常見物理設備

技術分享圖片

每層運行常見的協議

技術分享圖片

5-5 網絡編程