系統(tǒng)的了解一下,網(wǎng)絡(luò)信息的交互,什么是互聯(lián)網(wǎng),在我們小時(shí)候校辩,網(wǎng)絡(luò)不發(fā)達(dá)的過(guò)去,我們的課本都是這樣描述的辈挂,信息高速路惶洲,這個(gè)詞是最準(zhǔn)確的描述了按声。
互聯(lián)網(wǎng)的核心是數(shù)據(jù)data,當(dāng)下我們?cè)谑謾C(jī)上進(jìn)行各種網(wǎng)絡(luò)活動(dòng),無(wú)一不是信息的傳遞恬吕,那么現(xiàn)在開(kāi)始系統(tǒng)的介紹一下數(shù)據(jù)是如何傳遞的签则。
輸入(input)->輸出(output)。
信息的交互是這樣的:
客戶端發(fā)送數(shù)據(jù)铐料,服務(wù)端接受客戶發(fā)送的數(shù)據(jù)請(qǐng)求渐裂,進(jìn)行處理,然后返回給客戶端,然后以某種格式顯示給用戶钠惩。
舉個(gè):
- 如果用戶請(qǐng)求的是一個(gè)文本芯义,那么在這個(gè)請(qǐng)求中會(huì)告訴服務(wù)端,我請(qǐng)求的類型是文本,也會(huì)告訴服務(wù)端妻柒,我的客戶端支持那種文本的格式。服務(wù)端收到后知道這個(gè)客戶端支持那種方法的文本即系耘分,然后就會(huì)用這個(gè)類型處理二進(jìn)制并返回?cái)?shù)據(jù)举塔,然后會(huì)告訴客戶端文本的解析方式,然后去解析
- 如果用戶請(qǐng)求的是一個(gè)圖片,那么和上面的過(guò)程一樣。那么服務(wù)端也會(huì)返回二進(jìn)制抵代,但是會(huì)告訴客戶端胖眷,要用打開(kāi)圖片的方式去解析
請(qǐng)求是怎么產(chǎn)生的低飒,請(qǐng)求是什么樣的
- Request
URL:https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/mancard/css/card_min_dee38e45.css
Request Method:GET
Status Code:200 OK (from disk cache)
Remote Address:58.215.118.32:443
Referrer Policy:unsafe-url
URL告訴他請(qǐng)求的地址是https://ss0.bdstatic.com,請(qǐng)求方式是GET,這個(gè)網(wǎng)址的ip地址是58.215.118.32,端口號(hào)是443芽丹,因?yàn)槭荋TTPS安全請(qǐng)求默認(rèn)是443,HTTP是80端口
那么客戶端是怎么找到這個(gè)ip地址的呢?
這個(gè)涉及到DNS解析[Domain Name System,域名系統(tǒng)]卜朗,是什么意思呢?計(jì)算機(jī)首先在本地的host文件中拔第。
windows中位置是:C盤 -> Windows -> System32 -> drives -> etc -> hosts文件
Mac中文職是:/etc/host
如果找到就直接去找改地址請(qǐng)求咕村,如果沒(méi)有找到就會(huì)去你所在的局域網(wǎng)中的DNS 服務(wù)器中繼續(xù)找,如果還沒(méi)有就像當(dāng)前dns服務(wù)所在的上級(jí)網(wǎng)絡(luò)中的DNS查詢,這個(gè)時(shí)間我們不用關(guān)心,因?yàn)檫@個(gè)速度是光速(光纖),那么如何知道自己的DNS服務(wù)器地址呢?
windows中需要在cmd中輸入ipconfig
mac中需要在打開(kāi)設(shè)置直接查看DNS服務(wù)地址
那么ip我們介紹完了么?當(dāng)然是沒(méi)有的了蚊俺。ip可是全世界的共享資源呀懈涛,只是是很多的。我們復(fù)習(xí)一下ip的知識(shí)泳猬。
IP
我們的互聯(lián)網(wǎng)之所以互聯(lián)就是因?yàn)槭褂昧艘粋€(gè)協(xié)議TCP/IP協(xié)議批钠,關(guān)于這個(gè)協(xié)議,筆者在大二那年圖書(shū)館里面讀過(guò),記得是一個(gè)日本人寫(xiě)的兩本書(shū)得封,但是名字就忘記了埋心,之后就沒(méi)有真正意義上讀過(guò),但是不知不覺(jué)了解了很多忙上。但是里面涉及的政治和知識(shí)都很博大精深拷呆,筆者在大學(xué)那年看的是韓老師講的,至今保存
<<計(jì)算機(jī)網(wǎng)絡(luò)原理>>
這里做一個(gè)簡(jiǎn)短的介紹
IP分為五類
- A類地址
- A類地址網(wǎng)絡(luò)號(hào)范圍:1.0.0.0---126.0.0.0
- B類地址
- B類地址網(wǎng)絡(luò)號(hào)范圍:128.0.0.0---191.255.0.0。
- C類地址
- C類地址網(wǎng)絡(luò)號(hào)范圍:192.0.0.0---223.255.255.0晨横。
- D類地址
- D類地址范圍:224.0.0.0---239.255.255.255
- E類地址
- E類地址范圍:240.0.0.0---255.255.255.254
詳情的解析如果需要了解請(qǐng)看 教程
我們每個(gè)計(jì)算的第地址保證是:192.168.1.XXX 最大不能超過(guò)255.
Port
什么是端口呢?我們雖然能夠通過(guò)一個(gè)IP地址,找到某一臺(tái)計(jì)算機(jī)的位置洋腮,但是如何知道讓計(jì)算機(jī)上的那個(gè)應(yīng)用程序去處理呢?就是通過(guò)port知道某臺(tái)計(jì)算機(jī)上的某一個(gè)應(yīng)用程序的,比如mysql數(shù)據(jù)庫(kù)是3306 手形,rabbit是5672啥供,tomcat默認(rèn)是8080.一樣,是不是這樣解析就很明了库糠,good伙狐,進(jìn)行下一步。
好了通過(guò)上面的IP:port瞬欧,我們知道找那臺(tái)計(jì)算機(jī)上的那個(gè)應(yīng)用application去處理了贷屎,那么我們?cè)谏钊肓私庖幌拢瑪?shù)據(jù)是如何通過(guò)網(wǎng)絡(luò)傳輸?shù)哪?
這里我們?cè)谝胍粋€(gè)概念艘虎,這個(gè)概念筆者記憶尤深唉侄。筆者在讀大二的網(wǎng)絡(luò)經(jīng)濟(jì)學(xué)老師,特意在課堂上補(bǔ)充過(guò)野建。這個(gè)就是OSI模型
OSI網(wǎng)絡(luò)模型
我們自上而下開(kāi)始解釋
-
應(yīng)用層
什么是應(yīng)用層呢?簡(jiǎn)單來(lái)說(shuō)属划,應(yīng)用層就是我們能用眼直觀看到,eg.瀏覽器
-
表示層
應(yīng)用程序和網(wǎng)絡(luò)之間的翻譯官,在表示層候生,數(shù)據(jù)將按照網(wǎng)絡(luò)能理解的方案進(jìn)行格式化同眯;
-
會(huì)話層
負(fù)責(zé)在網(wǎng)絡(luò)中的兩節(jié)點(diǎn)之間建立、維持和終止通信唯鸭。 會(huì)話層的功能包括:建立通信鏈接须蜗,保持會(huì)話過(guò)程通信鏈接的暢通,同步兩個(gè)節(jié)點(diǎn)之間的對(duì)話,決定通信是否被中斷以及通信中斷時(shí)決定從何處重新發(fā)送明肮。eg.兩臺(tái)計(jì)算機(jī)開(kāi)始回話了
-
傳輸層
O S I 模型中最重要的一層菱农。傳輸協(xié)議同時(shí)進(jìn)行流量控制或是基于接收方可接收數(shù)據(jù)的快慢程度規(guī)定適當(dāng)?shù)陌l(fā)送速率。除此之外晤愧,傳輸層按照網(wǎng)絡(luò)能處理的最大尺寸將較長(zhǎng)的數(shù)據(jù)包進(jìn)行強(qiáng)制分割大莫。例如,以太網(wǎng)無(wú)法接收大于1 5 0 0 字節(jié)的數(shù)據(jù)包官份。發(fā)送方節(jié)點(diǎn)的傳輸層將數(shù)據(jù)分割成較小的數(shù)據(jù)片只厘,同時(shí)對(duì)每一數(shù)據(jù)片安排一序列號(hào),以便數(shù)據(jù)到達(dá)接收方節(jié)點(diǎn)的傳輸層時(shí)舅巷,能以正確的順序重組羔味。該過(guò)程即被稱為排序。
比如在韓老師的課堂上是這樣講的:對(duì)于網(wǎng)絡(luò)包比較大的钠右,進(jìn)行切割赋元,然后給每一個(gè)包一個(gè)序號(hào),當(dāng)服務(wù)端接受到飒房,就開(kāi)始排序搁凸,然后只作為一個(gè)整體輸出
-
網(wǎng)絡(luò)層
網(wǎng)絡(luò)地址翻譯成對(duì)應(yīng)的物理地址,并決定如何將數(shù)據(jù)從發(fā)送方路由到接收方狠毯,eg护糖,快遞要選擇從哪里走,走一條最近的路嚼松,這個(gè)路就是有路由開(kāi)始選則的會(huì)告訴你嫡良,這個(gè)就相當(dāng)于大學(xué)寢室的路由器
-
數(shù)據(jù)鏈路層
直接來(lái)一個(gè),就是將信息數(shù)據(jù)献酗,轉(zhuǎn)換為電信號(hào)寝受,高壓低壓表示1,0罕偎。
-
物理層
O S I 模型的最低層或第一層很澄,該層包括物理連網(wǎng)媒介,如電纜連線連接器颜及。物理層的協(xié)議產(chǎn)生并檢測(cè)電壓以便發(fā)送和接收攜帶數(shù)據(jù)的信號(hào)痴怨。
信息發(fā)送端將請(qǐng)求信息,通過(guò)自上而下轉(zhuǎn)換器予,將應(yīng)用能看懂的,轉(zhuǎn)為機(jī)器和網(wǎng)絡(luò)能看懂的捐迫,而服務(wù)則是將機(jī)器和網(wǎng)絡(luò)能看懂的轉(zhuǎn)換為應(yīng)用能解析的乾翔,當(dāng)然這個(gè)解析就是自下而上解析的
于是就產(chǎn)生了這個(gè)響應(yīng)Response,然后有瀏覽器去解析
Response
Response Headers
Accept-Ranges:bytes
Age:1327416
Cache-Control:max-age=2592000
Content-Encoding:gzip
Content-Type:text/css
Date:Thu, 08 Jun 2017 05:03:18 GMT
ETag:W/"5886468e-cb5c"
Expires:Thu, 22 Jun 2017 20:18:31 GMT
Last-Modified:Mon, 23 Jan 2017 18:08:14 GMT
Ohc-Response-Time:1 0 0 0 0 0
Server:bfe/1.0.8.13-sslpool-patch
Vary:Accept-Encoding
我們開(kāi)一下后端是如何處理,接受請(qǐng)求的
/**
* 保存訂單到數(shù)據(jù)庫(kù)
* @param request 瀏覽器的請(qǐng)求體
* @param response 響應(yīng)對(duì)象
* @return
*/
@RequestMapping(value = "/shenghuojiaofei/v1/order", method = RequestMethod.POST)
public ResponseBuilder.IResponseVo saveOrder( HttpServletRequest request,HttpServletResponse response) {
...處理邏輯信息
}
后端根據(jù)request或用戶的請(qǐng)求信息,然后對(duì)數(shù)據(jù)進(jìn)行處理反浓,如果當(dāng)處理不了萌丈,就去其他后臺(tái)請(qǐng)求,然后把用戶想要的信息雷则,整理到response對(duì)象中返回
【.】這就是網(wǎng)絡(luò)信息的一個(gè)前后端交互過(guò)程辆雾。
但是真實(shí)交互遠(yuǎn)比這個(gè)復(fù)雜,比如tcp的三次握手四次揮手,在比如12306月劈,雙十一秒殺活動(dòng)的高并發(fā)度迂,里面涉及很多協(xié)議和通信技術(shù),筆者不在這里描述猜揪,在以后的日子里惭墓,會(huì)娓娓道來(lái)。
附錄
最后僅接合本文筆者推薦兩本書(shū)
- HTTP權(quán)威指南
- TCP/IP詳解