自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Web開發(fā)應(yīng)該知道的計算機網(wǎng)絡(luò)知識

開發(fā) 前端
作為一名程序員,不可能不與網(wǎng)絡(luò)打交道。現(xiàn)在我們的手機,電腦,不夸張地說,離開了網(wǎng)絡(luò)就是一塊“廢鐵”,它們的作用將大打折扣。本文的作用呢,主要是針對不是非網(wǎng)絡(luò)專業(yè)開發(fā)的人員準(zhǔn)備的, 以’最短的時間,了解計網(wǎng)最多的知識’為前提起筆。

前言

作為一名程序員,不可能不與網(wǎng)絡(luò)打交道。現(xiàn)在我們的手機,電腦,不夸張地說,離開了網(wǎng)絡(luò)就是一塊“廢鐵”,它們的作用將大打折扣。本文的作用呢,主要是針對不是非網(wǎng)絡(luò)專業(yè)開發(fā)的人員準(zhǔn)備的, 以’最短的時間,了解計網(wǎng)最多的知識’為前提起筆。

概述

先來了解下各種我們知道, 但是不太了解的專業(yè)名詞的意思

因特網(wǎng)

[[210887]]

因特網(wǎng)

因特網(wǎng)是當(dāng)今世界上最大的網(wǎng)絡(luò),是”網(wǎng)絡(luò)的網(wǎng)絡(luò)”。 即因特網(wǎng)是所有網(wǎng)絡(luò)互連起來的一個巨型網(wǎng)絡(luò)。

因特網(wǎng)的組成:

  • 邊緣部分 : 主機
  • 核心部分 : 大量網(wǎng)絡(luò)和連接這些網(wǎng)絡(luò)的路由器(此路由器不是我們家用的路由器)

以太網(wǎng)

以太網(wǎng)是現(xiàn)在最常用的局域網(wǎng)通信協(xié)議, 以太網(wǎng)上傳輸?shù)氖荕AC幀。由于以太網(wǎng)同一時間只允許一臺計算機發(fā)送數(shù)據(jù), 所以必須有一套檢測機制, 那就是CSMA/CD協(xié)議:

  • 多點接入 : 多臺計算機以多點接入的方式連接在一根總線上
  • 載波監(jiān)聽 : 不管是否正在發(fā)送, 每個站都必須不停地檢測信道
  • 碰撞檢測 : 邊發(fā)送邊監(jiān)聽

OSI

開放系統(tǒng)互連基本參考模型,只要遵守這個OSI標(biāo)準(zhǔn), 任何兩個系統(tǒng)都能進行通信。 OSI是七層協(xié)議體系結(jié)構(gòu),而TCP/IP是一個四層協(xié)議體系結(jié)構(gòu), 于是我們采取折中的方法, 學(xué)習(xí)計算機網(wǎng)絡(luò)原理的時候往往用的是五層協(xié)議的體系結(jié)構(gòu) :物理層,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,傳輸層和應(yīng)用層。

協(xié)議體系結(jié)構(gòu)

物理層

計算機的世界里只有0和1,正如你現(xiàn)在所看這篇文章的文字,存儲在計算機中也是一大串0和1的組合。 但是這些數(shù)字不能在真實的物理介質(zhì)中傳輸?shù)模?而需要把它轉(zhuǎn)換為光信號或者電信號,所以這一層負責(zé)將這些比特流(0101)與光電信號進行轉(zhuǎn)換。

如果沒有物理層, 那么也就不存在互聯(lián)網(wǎng),不存在數(shù)據(jù)的共享,因為數(shù)據(jù)無法在網(wǎng)絡(luò)中流動。

數(shù)據(jù)鏈路層

數(shù)據(jù)在這一層不再是以比特流的形式傳輸, 而是分割成一個一個的幀再進行傳輸。

MAC地址

又稱計算機的硬件地址, 被固化在適配器(網(wǎng)卡)ROM上的占48位的地址。MAC地址可以用來唯一區(qū)別一臺計算機,因為它在全球是獨一無二的。

分組交換

由于數(shù)據(jù)在這次曾要被分割成一個一個的幀,由于不同的鏈路規(guī)定了不同的最大幀長,即MTU(最大傳輸單元), 凡是超出這個MTU的幀都必須被分塊。 例如一臺貨車一次能運輸5噸的貨物, 而有條公路限載重2噸,那么你只好分3次運輸。

網(wǎng)橋

網(wǎng)橋工作在數(shù)據(jù)鏈路層,根據(jù)MAC幀的目的地址對收到的幀進行轉(zhuǎn)發(fā)和過濾。

以太網(wǎng)交換機

實際上就是一個多接口的網(wǎng)橋, 以太網(wǎng)交換機的每個接口都直接與一個單個主機或另一個集線器相連, 可以很容易實現(xiàn)VLAN(虛擬局域網(wǎng))

以太網(wǎng)的MAC幀

MAC幀的格式為 :

MAC幀格式

  • 目的地址 : 接收方48位的MAC地址
  • 源地址 : 發(fā)送方48位的MAC地址
  • 類型字段 : 標(biāo)志上一層使用的是什么協(xié)議, 0×0800為IP數(shù)據(jù)報

網(wǎng)絡(luò)層

如果只有數(shù)據(jù)鏈路層沒有網(wǎng)絡(luò)層,,數(shù)據(jù)就只能在同一條鏈路上傳輸,不能跨鏈路傳輸。有了網(wǎng)絡(luò)層,數(shù)據(jù)便能跨域不同的數(shù)據(jù)鏈路傳輸。

IP地址

IP地址又稱為軟件地址,存儲在計算機的存儲器上, IPv4地址為32位,IPv6地址為128位。

IP地址和MAC地址

  • 網(wǎng)絡(luò)層以上使用IP地址, 數(shù)據(jù)鏈路層以下使用MAC地址
  • IP地址是邏輯地址, MAC地址是物理地址
  • IP分組中首部的源地址和目的地址在傳輸中不會改變, MAC幀中首部的源地址和目的地址每到一個路由器會改變一次

IP地址分類

IP地址 = {<網(wǎng)絡(luò)號>, <主機號>}

A類地址 : 0.0.0.0 ~ 127.0.0.0

B類地址 : 128.0.0.0 ~ 191.255.0.0

C類地址 : 192.0.0.0 ~ 223.255.255.0

劃分子網(wǎng)之后的IP地址

IP地址 = {<網(wǎng)絡(luò)號>, <子網(wǎng)號>, <主機號>}

例如某單位擁有一個B類IP地址, 145.13.0.0,但凡目的地址為145.13.x.x的數(shù)據(jù)報都會被送到這個網(wǎng)絡(luò)上的路由器R。內(nèi)部劃分子網(wǎng)后變成 : 145.13.3.0, 145.13.7.0,145.13.21.0. 但是對外仍表現(xiàn)為一個網(wǎng)絡(luò),即145.13.0.0. 這樣路由器R收到報文后,再根據(jù)目的地址發(fā)到對應(yīng)的子網(wǎng)上。

子網(wǎng)掩碼

一般由一串1和一串0組成,不管網(wǎng)絡(luò)有沒有劃分子網(wǎng),將子網(wǎng)掩碼和IP地址做按位與運算即可得出網(wǎng)絡(luò)地址。

所有的網(wǎng)絡(luò)都必須使用子網(wǎng)掩碼,同時在路由表中必須有子網(wǎng)掩碼這一欄。 如果一個網(wǎng)絡(luò)不劃分子網(wǎng),那么該網(wǎng)絡(luò)的子網(wǎng)掩碼就是默認的子網(wǎng)掩碼。

A類地址的默認子網(wǎng)掩碼為255.0.0.0

B類地址的默認子網(wǎng)掩碼為255.255.0.0

C類地址的默認子網(wǎng)掩碼為255.255.255.0

盡管劃分子網(wǎng)增加了靈活性,但是卻減少了能夠連接在網(wǎng)絡(luò)上的主機總數(shù)。

構(gòu)成超網(wǎng)的IP地址

IP地址 = {<網(wǎng)絡(luò)前綴>, <主機號>}

使用網(wǎng)絡(luò)前綴, 無分類域間路由選擇CIDR。

例如,128.14.35.7/20, 意思是前20位為網(wǎng)絡(luò)前綴,后12位為主機號。 另外,CIDR把網(wǎng)絡(luò)前綴相同的連續(xù)的IP地址組成一個”CIDR地址塊”。

地址掩碼 : CIDR使用32位的地址掩碼, 類似于子網(wǎng)掩碼。

IP數(shù)據(jù)報

在網(wǎng)絡(luò)層, 數(shù)據(jù)是以IP數(shù)據(jù)報(IP分組)的形式傳輸?shù)?/p>

IP數(shù)據(jù)報的格式

首部前20字節(jié)為固定長度, 是所有IP數(shù)據(jù)報必備的. 后4字節(jié)是可選字段, 其長度可變。

IP數(shù)據(jù)報首部固定的字段分析:

  • 版本號 : IP協(xié)議的版本, IPv4或IPv6。
  • 首部長度 : 記錄了首部的長度,最大為1111, 即15個32位字長,即60字節(jié)。當(dāng)首部長度不是4字節(jié)的整數(shù)倍時, 需要使用最后的填充字段加以填充。
  • 服務(wù)類型 : 一般無用。
  • 總長度 : 指首部和數(shù)據(jù)之和的長度, 最大為216-1 = 65535字節(jié)。但是由于數(shù)據(jù)鏈路層規(guī)定每一幀的數(shù)據(jù)長度都有最大長度MTU, 以太網(wǎng)規(guī)定MTU為1500字節(jié),所以超出范圍的數(shù)據(jù)報就必須進行分片處理。
  • 標(biāo)識 : 每產(chǎn)生一個IP數(shù)據(jù)報,計數(shù)器就+1, 并將此值賦值給標(biāo)識字段。 再以后需要分片的數(shù)據(jù)報中, 標(biāo)識相同說明是同一個數(shù)據(jù)報。
  • 標(biāo)志 : 占3位, 最低位記為MF(More Fragment)。 MF = 1說明還有分片;MF = 0說明這已經(jīng)是最后一個分片。 中間一位記為DF(Don’t Fragment),意思是不能分片。 只有當(dāng)DF = 0時才允許分片。
  • 段位移 : 又稱片位移, 相對于用戶數(shù)據(jù)字段的起點,該片從何處開始。 片位移以8個字節(jié)為偏移單位。 所以,每個分片的長度一定是8字節(jié)的整數(shù)倍。
  • 生存時間 : TTL(Time To Live)。 數(shù)據(jù)報能在因特網(wǎng)中經(jīng)過路由器的最大次數(shù)為255次, 每經(jīng)過一個路由器則TTL – 1,為0時丟棄該報文。
  • 協(xié)議 : 記錄該報文所攜帶的數(shù)據(jù)是使用何種協(xié)議。
  • 首部檢驗和 : 只檢驗數(shù)據(jù)報的首部,不檢驗數(shù)據(jù)部分。 不為0則丟棄報文。
  • 源地址和目的地址 : 不解釋。

IP層轉(zhuǎn)發(fā)分組的流程

每個路由器內(nèi)部都維護一個路由表, 路由表包含以下內(nèi)容(目的網(wǎng)絡(luò)地址, 下一跳地址)。

使用子網(wǎng)時分組轉(zhuǎn)發(fā)時,路由表必須包含以下三項內(nèi)容:目的網(wǎng)絡(luò)地址, 子網(wǎng)掩碼和下一跳地址。

特定主機路由 : 對特定的目的地址指明一個路由

默認路由 : 不知道分組該發(fā)給哪個路由器時就發(fā)給默認路由。當(dāng)一個網(wǎng)絡(luò)只有很少的對外連接時使用默認路由非常合適。

路由器的分組轉(zhuǎn)發(fā)算法

  • 從數(shù)據(jù)報中拿到目的IP地址D, 得出目的網(wǎng)絡(luò)地址N
  • 若N就是與此路由器直接相連的某個網(wǎng)絡(luò)地址, 則直接交付(不需要再交給其他路由器轉(zhuǎn)發(fā), 直接找到該目的主機交付), 否則 -> (3)
  • 若路由表中有目的地址為D的特定主機路由, 則把數(shù)據(jù)報傳給該路由器, 否則 -> (4)
  • 若路由表中有到達網(wǎng)絡(luò)N的路由, 則把數(shù)據(jù)報傳給該路由器, 否則 -> (5)
  • 若路由表中有默認路由, 則交給該路由器, 否則 -> (6)
  • 報告轉(zhuǎn)發(fā)分組出錯

虛擬專用網(wǎng)VPN

因特網(wǎng)中的所有路由器對該目的地址是專用地址的數(shù)據(jù)報一律不轉(zhuǎn)發(fā), 下面有3種專用地址(虛擬IP地址)

10.0.0.0 ~ 10.255.255.255

172.16.0.0 ~ 172.31.255.255

192.168.0.0 ~ 192.168.255.255

假設(shè)現(xiàn)在公司A有一個部門在廣州和另一個在上海, 而他們在當(dāng)?shù)囟加凶约旱膶S镁W(wǎng). 那么怎么將這兩個專用網(wǎng)連接起來呢?

  • 租用電信的通信線路為本機構(gòu)專用, 但是太貴了
  • 利用公用的因特網(wǎng)當(dāng)做通信載體, 這就是虛擬專用網(wǎng)VPN

網(wǎng)絡(luò)地址轉(zhuǎn)換NAT

多個專用網(wǎng)內(nèi)部的主機公用一個NAT路由器的IP地址, 在主機發(fā)送和接收IP數(shù)據(jù)報時必須先通過NAT路由器進行網(wǎng)絡(luò)地址轉(zhuǎn)換。

NAT路由器的工作原理

不僅如此, NAT還能使用端口號, 搖身一變成為網(wǎng)絡(luò)地址和端口轉(zhuǎn)換NAPT

ARP協(xié)議

ARP是解決同一個局域網(wǎng)上的主機或路由器的IP地址和MAC地址的映射問題, 即 IP地址 -> ARP -> MAC地址

每一個主機都有一個ARP高速緩存, 里面有本局域網(wǎng)上的各主機和路由器的IP地址到MAC地址的映射表. 以下是ARP的工作原理:

 

ARP的工作原理.jpg

那如果是跨網(wǎng)絡(luò)使用ARP呢?

  • 在本網(wǎng)絡(luò)上廣播
  • 未找到該主機, 則到路由器
  • 路由器幫忙轉(zhuǎn)發(fā)(在另一網(wǎng)絡(luò)上廣播)
  • 找到了則完成ARP請求, 未找到則返回(2)

傳輸層

這一層是重中之重, 因為數(shù)據(jù)鏈路層, 網(wǎng)絡(luò)層這兩層的數(shù)據(jù)傳輸都是不可靠的, 盡最大能力交付的. 什么意思的? 就是它們不負責(zé)提交給你的就是正確的數(shù)據(jù). 然而這一層的TCP協(xié)議將要提供可靠傳輸

這一層主要重點是兩個協(xié)議 : UDP 和 TCP

用戶數(shù)據(jù)報協(xié)議UDP

UDP主要特點 :

  • 無連接
  • 盡最大努力交付
  • 面向報文 : 應(yīng)用層交下來的報文直接加上UDP頭部就往IP層扔, 不合并也不拆分
  • 沒有擁塞控制
  • 支持一對一, 一對多, 多對一和多對多的交互通信
  • 首部開銷小, 只有8個字節(jié)

UDP首部

UDP首部格式

  • 源端口 : 源端口號. 在需要對方回信時選用, 不需要則全0
  • 目的端口 : 目的端口號. 這在終點交付報文時必須要使用到
  • 長度 : UDP數(shù)據(jù)報的長度, 最小值為8(僅有首部)
  • 檢驗和 : 與IP數(shù)據(jù)報只檢驗首部不同的是, UDP需要把首部和數(shù)據(jù)部分一起檢驗

傳輸控制協(xié)議TCP

TCP主要特點 :

  • 面向連接的運輸層協(xié)議
  • 每一條TCP連接只能有2個端點, TCP是點對點的
  • 提供可靠交付
  • 全雙工通信
  • 面向字節(jié)流

TCP的工作流程

TCP字節(jié)流

 

TCP的連接

TCP連接的端點叫套接字(socket)

socket = (IP地址 : 端口號)

每一條TCP連接唯一地被通信兩端的兩個端點(socket)所確定. 即 :

TCP連接 ::= {socket1, socket2} = {(IP1 : port1), (IP2 : port2)}

TCP報文段的首部

 TCP報文段的首部

  • 源端口和目的端口 : 同UDP端口作用
  • 序號 : 本報文段的數(shù)據(jù)的第一個字節(jié)的序號
  • 確認號 : 期望收到對方下一個報文段的第一個數(shù)據(jù)字節(jié)的序號

若確認號 = N, 則表明 : 到序號N-1為止的所有數(shù)據(jù)都已正常收到

  • 數(shù)據(jù)偏移 : TCP報文段的首部長度
  • 保留 : 以后用, 目前為0
  • 緊急URG : 若URG = 1時, 說明緊急指針字段有效, 告訴系統(tǒng)這是緊急數(shù)據(jù), 應(yīng)盡快傳送. 例如突然要中斷傳送
  • 確認ACK : ACK = 1時確認號才有效, ACK = 0時確認號無效. TCP規(guī)定, 連接建立后所有傳送的報文段都必須把ACK置1
  • 推送PSH : 若PSH = 1, 則接收方收到報文段之后不再等到整個緩存滿而是直接向上交付
  • 復(fù)位RST : 當(dāng)RST = 1, 說明TCP連接有嚴(yán)重錯誤, 必須釋放連接再重連
  • 同步SYN : 在連接建立時用來同步序號. 當(dāng)SYN = 1, ACK = 0時表明這是一個連接請求報文段, 對方若同意建立連接, 則在響應(yīng)的報文段中置SYN = 1, ACK = 1
  • 終止FIN : 當(dāng)FIN = 1, 表明此報文段的發(fā)送方數(shù)據(jù)已發(fā)送完畢, 并要求釋放連接
  • 窗口 : 告訴對方 : 從本報文段首部中的確認號算起, 接收方目前允許對方發(fā)送的數(shù)據(jù)量. 這是作為接收方讓發(fā)送方設(shè)置其發(fā)送窗口的依據(jù)
  • 檢驗和 : 同UDP, 檢驗首部和數(shù)據(jù)部分
  • 緊急指針 : 當(dāng)URG = 1時有效, 指出緊急數(shù)據(jù)的末尾在報文段的位置
  • 選項 : 最大可40字節(jié), 沒有則為0

最大報文段長度MSS(Maximum Segment Size) : 每一個TCP報文段中數(shù)據(jù)字段的最大長度,若不填寫則為默認的536字節(jié)。

窗口

TCP中很重要的一個概念, 那就是窗口(發(fā)送窗口和接收窗口)

窗口

 

由于停止等待協(xié)議非常低效,于是衍生出窗口這一概念。上圖為發(fā)送方維持的發(fā)送窗口, 位于發(fā)送窗口的5個分組都可以連續(xù)發(fā)送出去而不需要等待對方的確認。每收到一個確認, 就把發(fā)送窗口前移一個分組的位置。這大大提高了信道利用率!

接收方不必發(fā)送每個分組的確認報文,而是采用累積確認的方式。也就是說, 對按序到達的最后一個分組發(fā)送確認報文。

超時重傳

如果發(fā)送方等待一段時間后, 還是沒收到 ACK 確認報文,就會啟動超時重傳。 這個等待的時間為重傳超時時間(RTO, Retransmission TimeOut)。

然而, RTO 的值不是固定的,這個時間總是略大于連接往返時間(RTT,Round Trip Time)。假設(shè)報文發(fā)送過去需要5秒,對方收到后發(fā)送確認報文回來也需要5秒,那么RTT就為10秒, 那這RTO就要比10秒要略大一些。那么超過RTO之后還沒有收到確認報文就認為報文丟失了,就要重傳。

流量控制

利用滑動窗口和報文段的發(fā)送時機來進行流量控制。

擁塞控制

發(fā)送方維持一個擁塞窗口cwnd, 發(fā)送窗口 = 擁塞窗口。

慢開始 : cwnd = 1, 然后每經(jīng)過一個傳輸輪次就翻倍

擁塞避免 : 讓cwnd緩慢增大, 每經(jīng)過一個傳輸輪次就+1

慢開始門限ssthresh :

當(dāng)cwnd < ssthresh, 使用慢開始算法當(dāng)cwnd > ssthresh, 使用擁塞避免算法當(dāng)cwnd = ssthresh, 隨意

擁塞控制

只要判斷網(wǎng)絡(luò)出現(xiàn)擁塞, 把ssthresh設(shè)為當(dāng)前發(fā)送擁塞窗口的一半(不能小于2),并把cwnd設(shè)為1,重新執(zhí)行慢開始算法。

除了慢開始和擁塞避免算法外, 還有一組快重傳和快恢復(fù)算法 :

快重傳 : 接收方及時發(fā)送確認, 而發(fā)送方只要一連收到三個重復(fù)確認, 馬上重傳

快恢復(fù) : 當(dāng)發(fā)送方一連收到三個重復(fù)確認時, ssthresh減半, cwnd設(shè)為ssthresh.

TCP三次握手

TCP三次握手建立連接和四次揮手?jǐn)嚅_連接是面試愛問的知識點。

TCP三次握手

Q : 為什么要三次握手, 兩次不可以嗎?

A : 試想一下, A第一次發(fā)送請求連接, 但是在網(wǎng)絡(luò)某節(jié)點滯留了, A超時重傳, 然后這一次一切正常, A跟B就愉快地進行數(shù)據(jù)傳輸了. 等到連接釋放了以后, 那個迷失了的連接請求突然到了B那, 如果是兩次握手的話, B發(fā)送確認, 它們就算是建立起了連接了. 事實上A并不會理會這個確認, 因為我壓根沒有要傳數(shù)據(jù)啊. 但是B卻傻傻地以為有數(shù)據(jù)要來, 苦苦等待. 結(jié)果就是造成資源的浪費.

更加接地氣的解釋就是 : A打電話給B

第一次握手 : 你好, 我是A, 你能聽到我說話嗎第二次握手 : 聽到了, 我是B, 你能聽到我說話嗎第三次握手 : 聽到了, 我們可以開始聊天了三次握手其實就是為了檢測雙方的發(fā)送和接收能力是否正常, 你說呢?

TCP四次揮手

TCP四次揮手

 

Q : 為什么要四次揮手, 而不是兩次, 三次?

A :

首先, 由于TCP的全雙工通信, 雙方都能作為數(shù)據(jù)發(fā)送方. A想要關(guān)閉連接, 必須要等數(shù)據(jù)都發(fā)送完畢, 才發(fā)送FIN給B. (此時A處于半關(guān)閉狀態(tài))

然后, B發(fā)送確認ACK, 并且B此時如果要發(fā)送數(shù)據(jù), 就發(fā)送(例如做一些釋放前的處理)

再者, B發(fā)送完數(shù)據(jù)之后, 發(fā)送FIN給A. (此時B處于半關(guān)閉狀態(tài))

然后, A發(fā)送ACK, 進入TIME-WAIT狀態(tài)

最后, 經(jīng)過2MSL時間后沒有收到B傳來的報文, 則確定B收到了ACK了. (此時A, B才算是處于完全關(guān)閉狀態(tài))

PS : 仔細分析以上步驟就知道為什么不能少于四次揮手了.

Q : 為什么要等待2MSL(Maximum Segment Lifetime)時間, 才從TIME_WAIT到CLOSED?

A : 在Client發(fā)送出最后的ACK回復(fù),但該ACK可能丟失。Server如果沒有收到ACK,將不斷重復(fù)發(fā)送FIN片段。所以Client不能立即關(guān)閉,它必須確認Server接收到了該ACK。Client會在發(fā)送出ACK之后進入到TIME_WAIT狀態(tài)。Client會設(shè)置一個計時器,等待2MSL的時間。如果在該時間內(nèi)再次收到FIN,那么Client會重發(fā)ACK并再次等待2MSL。MSL指一個片段在網(wǎng)絡(luò)中最大的存活時間,2MSL就是一個發(fā)送和一個回復(fù)所需的最大時間。如果直到2MSL,Client都沒有再次收到FIN,那么Client推斷ACK已經(jīng)被成功接收,則結(jié)束TCP連接。

更加接地氣的解釋 :

第一次揮手 : A告訴B, 我沒數(shù)據(jù)發(fā)了, 準(zhǔn)備關(guān)閉連接了, 你要發(fā)送數(shù)據(jù)嗎第二次揮手 : B發(fā)送最后的數(shù)據(jù)第三次揮手 : B告訴A, 我也要關(guān)閉連接了第四次揮手 : A告訴B你可以關(guān)閉了, 我這邊也關(guān)閉了

應(yīng)用層

應(yīng)用層協(xié)議最著名的就是HTTP, FTP了, 還有一個重要的DNS

域名系統(tǒng)(DNS, Domain Name System)

DNS 能將域名(例如, www.jianshu.com)解析成IP地址。

域名服務(wù)器分類

  • 根域名服務(wù)器 : 最高層次的域名服務(wù)器
  • 頂級域名服務(wù)器 : 如其名
  • 權(quán)限域名服務(wù)器 : 負責(zé)一個區(qū)的應(yīng)服務(wù)器
  • 本地域名服務(wù)器 : 主機發(fā)送DNS查詢請求就是發(fā)給它

DNS查詢

DNS查詢

  • 主機向本地域名服務(wù)器的查詢一般都是采用遞歸查詢
  • 本地域名服務(wù)器向根域名服務(wù)器的查詢通常是采用迭代查詢

遞歸查詢 : B問A廣州怎么去, A不知道, A就問C, C不知道就問D...直到知道了再一層一層轉(zhuǎn)告直到A告訴B.  迭代查詢 : B問A廣州怎么去, A不知道, A就告訴你可以去問C, 然后B就去問C, C不知道, C就告訴你可以去問D, 然后B就去問D...直到B知道為止

DNS查詢例子 : 域名為x.tom.com的主機想知道y.jerry.com的IP地址

  • 主機x.tom.com先向本地域名服務(wù)器dns.tom.com進行遞歸查詢
  • 本地域名服務(wù)器采用迭代查詢. 它先問一個根域名服務(wù)器
  • 根域名服務(wù)器告訴它, 你去問頂級域名服務(wù)器dns.com
  • 本地域名服務(wù)器問頂級域名服務(wù)器dns.com
  • 頂級域名服務(wù)器告訴它, 你去問權(quán)限域名服務(wù)器dns.jerry.com
  • 本地域名服務(wù)器問權(quán)限域名服務(wù)器dns.jerry.com
  • 權(quán)限域名服務(wù)器dns.jerry.com告訴它所查詢的主機的IP地址
  • 本地域名服務(wù)器把查詢結(jié)果告訴主機x.tom.com

PS : 該查詢使用UDP, 并且為了提高DNS查詢效率, 每個域名服務(wù)器都使用高速緩存.

URL

URL的格式 : <協(xié)議>://<主機>:<端口>/<路徑>, 端口和路徑有時可省略.

使用HTTP協(xié)議的URL : http://<主機>:<端口>/<路徑>, HTTP默認端口號是80

HTTP協(xié)議

HTTP是面向事務(wù)的, 即它傳輸?shù)臄?shù)據(jù)是一個整體, 要么全部收到, 要么全部收不到.

萬維網(wǎng)的工作過程

 

每一次HTTP請求就需要建立一次TCP連接和釋放TCP連接.

HTTP是無連接, 無狀態(tài)的. 每一次請求都是作為一次新請求.

HTTP/1.0 缺點 : 無連接, 每一次請求都要重新建立TCP連接, 所以每一次HTTP請求都要花費2倍RTT時間(一次TCP請求, 一次HTTP請求)

HTTP/1.1 : 使用持續(xù)連接, 即保持TCP連接一段時間.

HTTP/1.1持續(xù)工作的兩種工作方式 : 非流水線方式和流水線方式    非流水線方式 : 收到一個請求的響應(yīng)再發(fā)下一個請求, 效率低, 浪費資源    流水線方式 : 能夠同時發(fā)送多個請求, 效率高

HTTP的GET和POST

GET 請求通常用于查詢、獲取數(shù)據(jù),而 POST 請求則用于發(fā)送數(shù)據(jù)

GET 請求的參數(shù)在URL中, 因此絕不能用GET請求傳輸敏感數(shù)據(jù), 而POST 請求的參數(shù)在請求頭中, 安全性略高于GET請求

ps : POST請求的數(shù)據(jù)也是以明文的形式存放在請求頭中, 因此也不安全

Cookie

萬維網(wǎng)使用Cookie來跟蹤用戶, 表示HTTP服務(wù)器和用戶之間傳遞的狀態(tài)信息.

Cookie工作原理 :

1. 用戶瀏覽某網(wǎng)站, 該網(wǎng)站的服務(wù)器為用戶產(chǎn)生一個唯一的識別碼,并以此為索引在服務(wù)器后端數(shù)據(jù)庫中產(chǎn)生一個項目

2. 返回給用戶的HTTP響應(yīng)報文中添加一條 "Set-cookie",值為該識別碼,如1233。用戶的瀏覽器將該cookie保存起來,在用于繼續(xù)瀏覽該網(wǎng)站時發(fā)送的每一個HTTP請求都會有一行 Cookie: 123于是,這個網(wǎng)站就知道Cookie為123的這個用戶做了什么,為這個用戶維護一個獨立的列表(如購物車)。

當(dāng)然,Cookie是把雙刃劍,方便的同時也帶有危險性,例如隱私泄露等, 用戶可以自行決定是否使用Cookie。

Session

Cookie是保存在客戶端上的,而Session是保存在服務(wù)器中。當(dāng)服務(wù)器收到用戶發(fā)出的Cookie時, 會根據(jù)Cookie中的SessionID來查找對應(yīng)的Session,如沒有則會生成一個新的SessionID返回給用戶。

總而言之,Cookie和Session就是同一樣?xùn)|西存放地方不同而已。

HTTPS

HTTPS協(xié)議 

HTTPS協(xié)議在HTTP協(xié)議的基礎(chǔ)上,在HTTP和TCP中間加入了一層SSL/TLS加密層, 解決了HTTP不安全的問題: 冒充, 篡改, 竊聽三大風(fēng)險。

責(zé)任編輯:龐桂玉 來源: Web開發(fā)
相關(guān)推薦

2010-06-29 10:29:19

計算機網(wǎng)絡(luò)協(xié)議

2020-12-17 08:09:25

計算機網(wǎng)絡(luò)網(wǎng)絡(luò)TCP

2015-04-09 10:21:23

ASCII碼表IP地址分類以太網(wǎng)幀

2010-06-12 16:56:37

2010-09-08 20:42:09

計算機網(wǎng)絡(luò)協(xié)議

2010-09-08 20:45:31

計算機網(wǎng)絡(luò)協(xié)議

2015-05-28 11:09:00

2010-06-13 15:08:07

計算機網(wǎng)絡(luò)協(xié)議

2010-06-14 18:54:57

計算機網(wǎng)絡(luò)協(xié)議

2024-09-10 08:24:24

2024-09-27 10:11:59

2013-05-14 13:02:17

計算機網(wǎng)絡(luò)基礎(chǔ)協(xié)議

2010-09-02 16:02:45

計算機網(wǎng)絡(luò)協(xié)議

2013-03-08 12:51:03

計算機網(wǎng)絡(luò)基礎(chǔ)協(xié)議DHCP

2024-03-28 11:32:38

計算機網(wǎng)絡(luò)集線器連接設(shè)備

2010-09-02 16:56:10

計算機網(wǎng)絡(luò)協(xié)議

2011-07-27 21:28:53

計算機網(wǎng)絡(luò)服務(wù)

2021-08-10 11:24:03

結(jié)構(gòu)網(wǎng)絡(luò)分層

2010-09-08 21:01:44

計算機網(wǎng)絡(luò)協(xié)議

2023-02-08 08:47:13

計算機網(wǎng)絡(luò)MAC
點贊
收藏

51CTO技術(shù)棧公眾號