網(wǎng)絡(luò)編程
軟件結(jié)構(gòu)
C/S結(jié)構(gòu) :全稱(chēng)為Client/Server結(jié)構(gòu),是指客戶(hù)端和服務(wù)器結(jié)構(gòu)。常見(jiàn)程序有QQ、迅雷等軟件。
B/S結(jié)構(gòu) :全稱(chēng)為Browser/Server結(jié)構(gòu),是指瀏覽器和服務(wù)器結(jié)構(gòu)。常見(jiàn)瀏覽器有谷歌、火狐等。
兩種架構(gòu)各有優(yōu)勢(shì),但是無(wú)論哪種架構(gòu),都離不開(kāi)網(wǎng)絡(luò)的支持。網(wǎng)絡(luò)編程,就是在一定的協(xié)議下,實(shí)現(xiàn)兩臺(tái)計(jì)算機(jī) 的通信的程序。
網(wǎng)絡(luò)通信協(xié)議
網(wǎng)絡(luò)通信協(xié)議:通信協(xié)議是對(duì)計(jì)算機(jī)必須遵守的規(guī)則,只有遵守這些規(guī)則,計(jì)算機(jī)之間才能進(jìn)行通信。協(xié)議中對(duì)數(shù)據(jù)的傳輸格式、傳輸速率、傳輸步驟等做了 統(tǒng)一規(guī)定,通信雙方必須同時(shí)遵守,最終完成數(shù)據(jù)交換。
TCP/IP協(xié)議: 傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議( Transmission Control Protocol/Internet Protocol),是 Internet最基本、最廣泛的協(xié)議。它定義了計(jì)算機(jī)如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。它 的內(nèi)部包含一系列的用于處理數(shù)據(jù)通信的協(xié)議,并采用了4層的分層模型,每一層都呼叫它的下一層所提供的 協(xié)議來(lái)完成自己的需求。

鏈路層:鏈路層是用于定義物理傳輸通道,通常是對(duì)某些網(wǎng)絡(luò)連接設(shè)備的驅(qū)動(dòng)協(xié)議,例如針對(duì)光纖。網(wǎng)絡(luò)提供的驅(qū)動(dòng)
網(wǎng)絡(luò)層:網(wǎng)絡(luò)層是整個(gè)TCP/CP協(xié)議的核心,它主要用于將傳輸?shù)臄?shù)據(jù)進(jìn)行分組,將分組數(shù)據(jù)發(fā)送到目標(biāo)計(jì)算機(jī)或者網(wǎng)絡(luò)。
運(yùn)輸層:主要使網(wǎng)絡(luò)程序進(jìn)行通信,在進(jìn)行網(wǎng)絡(luò)通信時(shí),可以采用TCP協(xié)議,也可以采用UDP協(xié)議。
應(yīng)用層:主要負(fù)責(zé)應(yīng)用程序的協(xié)議,例如HTTP協(xié)議。FTP協(xié)議等。
協(xié)議分類(lèi)
通信的協(xié)議還是比較復(fù)雜的, java.net 包中包含的類(lèi)和接口,它們提供低層次的通信細(xì)節(jié)。我們可以直接使用這 些類(lèi)和接口,來(lái)專(zhuān)注于網(wǎng)絡(luò)程序開(kāi)發(fā),而不用考慮通信的細(xì)節(jié)。
java.net 包中提供了兩種常見(jiàn)的網(wǎng)絡(luò)協(xié)議的支持
TCP:傳輸控制協(xié)議 (Transmission Control Protocol)。TCP協(xié)議是面向連接的通信協(xié)議,即傳輸數(shù)據(jù)之前, 在發(fā)送端和接收端建立邏輯連接,然后再傳輸數(shù)據(jù),它提供了兩臺(tái)計(jì)算機(jī)之間可靠無(wú)差錯(cuò)的數(shù)據(jù)傳輸。
- 三次握手:TCP協(xié)議中,在發(fā)送數(shù)據(jù)的準(zhǔn)備階段,客戶(hù)端與服務(wù)器之間的三次交互,以保證連接的可 靠。
- 第一次握手,客戶(hù)端向服務(wù)器端發(fā)出連接請(qǐng)求,等待服務(wù)器確認(rèn)。
- 第二次握手,服務(wù)器端向客戶(hù)端回送一個(gè)響應(yīng),通知客戶(hù)端收到了連接請(qǐng)求。
- 第三次握手,客戶(hù)端再次向服務(wù)器端發(fā)送確認(rèn)信息,確認(rèn)連接。整個(gè)交互過(guò)程如下圖所示。
完成三次握手,連接建立后,客戶(hù)端和服務(wù)器就可以開(kāi)始進(jìn)行數(shù)據(jù)傳輸了。由于這種面向連接的特性,TCP協(xié)議可 以保證傳輸數(shù)據(jù)的安全,所以應(yīng)用十分廣泛,例如下載文件、瀏覽網(wǎng)頁(yè)等。
UDP:用戶(hù)數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol)。UDP協(xié)議是一個(gè)面向無(wú)連接的協(xié)議。傳輸數(shù)據(jù)時(shí),不需要建立連接,不管對(duì)方端服務(wù)是否啟動(dòng),直接將數(shù)據(jù)、數(shù)據(jù)源和目的地都封裝在數(shù)據(jù)包中,直接發(fā)送。每個(gè)數(shù)據(jù)包的大小限制在64k以?xún)?nèi)。它是不可靠協(xié)議,因?yàn)闊o(wú)連接,所以傳輸速度快,但是容易丟失數(shù)據(jù)。日常應(yīng)用中,例如視頻會(huì)議、QQ聊天等。
網(wǎng)絡(luò)編程三要素
協(xié)議
協(xié)議:計(jì)算機(jī)網(wǎng)絡(luò)通信必須遵守的規(guī)則
IP地址
IP地址:指互聯(lián)網(wǎng)協(xié)議地址(Internet Protocol Address),俗稱(chēng)IP。IP地址用來(lái)給一個(gè)網(wǎng)絡(luò)中的計(jì)算機(jī)設(shè) 備做唯一的編號(hào)。假如我們把“個(gè)人電腦”比作“一臺(tái)電話(huà)”的話(huà),那么“IP地址”就相當(dāng)于“電話(huà)號(hào)碼”。
IP地址分類(lèi)
IPv4:是一個(gè)32位的二進(jìn)制數(shù),通常被分為4個(gè)字節(jié),表示成 a.b.c.d 的形式,例如 192.168.65.100 。其 中a、b、c、d都是0~255之間的十進(jìn)制整數(shù),那么最多可以表示42億個(gè)。
IPv6:由于互聯(lián)網(wǎng)的蓬勃發(fā)展,IP地址的需求量愈來(lái)愈大,但是網(wǎng)絡(luò)地址資源有限,使得IP的分配越發(fā)緊張。 有資料顯示,全球IPv4地址在2011年2月分配完畢。 為了擴(kuò)大地址空間,擬通過(guò)IPv6重新定義地址空間,采用128位地址長(zhǎng)度,每16個(gè)字節(jié)一組,分成8組十六進(jìn) 制數(shù),表示成 ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 ,號(hào)稱(chēng)可以為全世界的每一粒沙子編上一個(gè)網(wǎng) 址,這樣就解決了網(wǎng)絡(luò)地址資源數(shù)量不夠的問(wèn)題。
常用命令
查看本機(jī)IP地址,在控制臺(tái)輸入:
ipconfig
檢查網(wǎng)絡(luò)是否連通,在控制臺(tái)輸入:
ping 空格 IP地址
特殊的IP地址
本機(jī)IP地址: 127.0.0.1 、 localhost
端口號(hào)
端口號(hào)是用來(lái)標(biāo)識(shí)設(shè)備中的進(jìn)程(應(yīng)用程序)
端口號(hào):用兩個(gè)字節(jié)表示的整數(shù),它的取值范圍是0~65535。
其中0~1023之間的端口號(hào)用于一些知名的網(wǎng)絡(luò)服務(wù)和應(yīng)用,普通的應(yīng)用程序需要使用1024以上的端口號(hào)。如果端口號(hào)被另外一個(gè)服務(wù)或應(yīng)用所占用,會(huì)導(dǎo)致當(dāng)前程序啟動(dòng)失敗(不能重復(fù))。
常用的端口號(hào):
1.80端口 網(wǎng)絡(luò)接口
2.數(shù)據(jù)庫(kù) mysql:3306 orale:1521
3.Tomcat服務(wù)器:8080