欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
計算機網(wǎng)絡(luò )基礎必備(三次握手,四次握手,以及HTTP協(xié)議相關(guān))

目錄


或許你會(huì )碰到這些問(wèn)題

瀏覽器中輸入一個(gè) URL 至頁(yè)面呈現,網(wǎng)絡(luò )上都發(fā)生了什么事?

能說(shuō)說(shuō) ISO 七層模型和 TCP/IP 四層模型嗎?

TCP/IP 與 HTTP 有什么關(guān)系嗎?

TCP協(xié)議與UDP協(xié)議的區別?

請詳細介紹一下 TCP 的三次握手機制,為什么要三次握手?揮手卻又是四次呢?

詳細講一下TCP的滑動(dòng)窗口?知道流量控制和擁塞控制嗎?

說(shuō)一下對稱(chēng)加密與非對稱(chēng)加密?

狀態(tài)碼 206 是什么意思?

你們用的 https 是吧,https 工作原理是什么?

那么對于這些問(wèn)題,你又是如何回答的呢。

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

通信協(xié)議

通信協(xié)議(communications protocol)是指雙方實(shí)體完成通信或服務(wù)所必須遵循的規則和約定。通過(guò)通信信道和設備互連起來(lái)的多個(gè)不同地理位置的數據通信系統,要使其能協(xié)同工作實(shí)現信息交換和資源共享,它們之間必須具有共同的語(yǔ)言。交流什么、怎樣交流及何時(shí)交流,都必須遵循某種互相都能接受的規則。這個(gè)規則就是通信協(xié)議。

網(wǎng)絡(luò )模型

隨著(zhù)技術(shù)的發(fā)展,計算機的應用越來(lái)越廣泛,計算機之間的通信開(kāi)始了百花齊放的狀態(tài),每個(gè)具有獨立計算服務(wù)體系的信息技術(shù)公司都會(huì )建立自己的計算機通信規則,而這種情況會(huì )導致異構計算機之間無(wú)法通信,極大的阻礙了網(wǎng)絡(luò )通信的發(fā)展,至此為了解決這個(gè)問(wèn)題,國際標準化組織(ISO)制定了OSI模型,該模型定義了不同計算機互聯(lián)的標準,OSI模型把網(wǎng)絡(luò )通信的工作分為7層,分別是物理層、數據鏈路層、網(wǎng)絡(luò )層、傳輸層、會(huì )話(huà)層、表示層和應用層。

這七層模型是設計層面的概念,每一層都有固定要完成的職責和功能,分層的好處在于清晰和功能獨立性,但分層過(guò)多會(huì )使層次變的更加復雜,雖然不需要實(shí)現本層的功能,但是也需要構造本層的上下文,空耗系統資源,所以在落地實(shí)施網(wǎng)絡(luò )通信模型的時(shí)候將這七層模型簡(jiǎn)化合并為四層模型分別是應用層、傳輸層、網(wǎng)絡(luò )層、網(wǎng)絡(luò )接口層(各層之間的模型、協(xié)議統稱(chēng)為:TCP/IP協(xié)議簇)。

從上圖可以看到,TCP/IP模型合并了OSI模型的應用層、表示層和會(huì )話(huà)層,將OSI模型的數據鏈路層和物理層合并為網(wǎng)絡(luò )訪(fǎng)問(wèn)層。

上圖還列出了各層模型對應TCP/IP協(xié)議棧中的協(xié)議以及各層協(xié)議之間的關(guān)系。比如DNS協(xié)議是建立在TCP和UDP協(xié)議的基礎上,FTP、HTTP、TELNET協(xié)議建立在TCP協(xié)議的基礎上,NTP、TFTP、SNMP建立在UDP協(xié)議的基礎上,而TCP、UDP協(xié)議又建立在IP協(xié)議的基礎上,以此類(lèi)推….

OSI中的層功能TCP/IP協(xié)議族
應用層文件傳輸,電子郵件,文件服務(wù),虛擬終端TFTP,HTTP,SNMP,FTP,SMTP,DNS,RIP,Telnet
表示層數據格式化,代碼轉換,數據加密無(wú)
會(huì )話(huà)層控制應用程序之間會(huì )話(huà)能力;如不同軟件數據分發(fā)給不同軟件ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets
傳輸層端到端傳輸數據的基本功能TCP、UDP
網(wǎng)絡(luò )層定義IP編址,定義路由功能;如不同設備的數據轉發(fā)IP,ICMP,RIP,OSPF,BGP,IGMP
數據鏈路層定義數據的基本格式,如何傳輸,如何標識SLIP,CSLIP,PPP,ARP,RARP,MTU
物理層二進(jìn)制數據形式在物理媒體上傳輸數據ISO2110,IEEE802

當我們某一個(gè)網(wǎng)站上不去的時(shí)候。通常會(huì )ping一下這個(gè)網(wǎng)站

ping 可以說(shuō)是ICMP的最著(zhù)名的應用,是TCP/IP協(xié)議的一部分。利用ping命令可以檢查網(wǎng)絡(luò )是否連通,可以很好地幫助我們分析和判定網(wǎng)絡(luò )故障。

二、TCP/IP

數據在網(wǎng)絡(luò )中傳輸最終一定是通過(guò)物理介質(zhì)傳輸。物理介質(zhì)就是把電腦連接起來(lái)的物理手段,常見(jiàn)的有光纖、雙絞線(xiàn),以及無(wú)線(xiàn)電波,它決定了電信號(0和1)的傳輸方式,物理介質(zhì)的不同決定了電信號的傳輸帶寬、速率、傳輸距離以及抗干擾性等等。網(wǎng)絡(luò )數據傳輸就像快遞郵寄,數據就是快件。只有路打通了,你的”快遞”才能送到,因此物理介質(zhì)是網(wǎng)絡(luò )通信的基石。

寄快遞首先得稱(chēng)重、確認體積(確認數據大小),貴重物品還得層層包裹填充物確保安全,封裝,然后填寫(xiě)發(fā)件地址(源主機地址)和收件地址(目標主機地址),確認快遞方式。對于偏遠地區,快遞不能直達,還需要中途轉發(fā)。網(wǎng)絡(luò )通信也是一樣的道理,只不過(guò)把這些步驟都規定成了各種協(xié)議。

TCP/IP的模型的每一層都需要下一層所提供的協(xié)議來(lái)完成自己的目的。我們來(lái)看下數據是怎么通過(guò)TCP/IP協(xié)議模型從一臺主機發(fā)送到另一臺主機的。

當用戶(hù)通過(guò)HTTP協(xié)議發(fā)起一個(gè)請求,應用層、傳輸層、網(wǎng)絡(luò )互聯(lián)層和網(wǎng)絡(luò )訪(fǎng)問(wèn)層的相關(guān)協(xié)議依次對該請求進(jìn)行包裝并攜帶對應的首部,最終在網(wǎng)絡(luò )訪(fǎng)問(wèn)層生成以太網(wǎng)數據包,以太網(wǎng)數據包通過(guò)物理介質(zhì)傳輸給對方主機,對方接收到數據包以后,然后再一層一層采用對應的協(xié)議進(jìn)行拆包,最后把應用層數據交給應用程序處理。

TCP/IP 與 HTTP

TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協(xié)議/網(wǎng)際協(xié)議)是指能夠在多個(gè)不同網(wǎng)絡(luò )間實(shí)現信息傳輸的協(xié)議簇。TCP/IP 協(xié)議不僅僅指的是 TCP 和 IP 兩個(gè)協(xié)議,而是指一個(gè)由FTP、SMTP、TCP、UDP、IP等協(xié)議構成的協(xié)議簇, 只是因為在TCP/IP協(xié)議中TCP協(xié)議和IP協(xié)議最具代表性,所以被稱(chēng)為T(mén)CP/IP協(xié)議。

而HTTP是應用層協(xié)議,主要解決如何包裝數據。

“IP”代表網(wǎng)際協(xié)議,TCP 和 UDP 使用該協(xié)議從一個(gè)網(wǎng)絡(luò )傳送數據包到另一個(gè)網(wǎng)絡(luò )。把IP想像成一種高速公路,它允許其它協(xié)議在上面行駛并找到到其它電腦的出口。TCP和UDP是高速公路上的“卡車(chē)”,它們攜帶的貨物就是像HTTP,文件傳輸協(xié)議FTP這樣的協(xié)議等。

TCP 與 UDP

都屬于傳輸層協(xié)議。

TCP(Transmission Control Protocol,傳輸控制協(xié)議)是面向連接的協(xié)議,也就是說(shuō),在收發(fā)數據前,必須和對方建立可靠的連接。一個(gè)TCP連接必須有三次握手、四次揮手。

UDP(User Data Protocol,用戶(hù)數據報協(xié)議)是一個(gè)非連接的協(xié)議,傳輸數據之前源端和終端不建立連接, 當它想傳送時(shí)就簡(jiǎn)單地去抓取來(lái)自應用程序的數據,并盡可能快地把它扔到網(wǎng)絡(luò )上

TCPUDP
連接性面向連接面向非連接
傳輸可靠性可靠不可靠
報文面向字節流面向報文
效率傳輸效率低傳輸效率高
流量控制滑動(dòng)窗口無(wú)
擁塞控制慢開(kāi)始、擁塞避免、快重傳、快恢復無(wú)
傳輸速度
應用場(chǎng)合對效率要求低,對準確性要求高或要求有連接的場(chǎng)景對效率要求高,對準確性要求低

TCP和UDP協(xié)議的一些應用

TCP連接的建立與終止

TCP雖然是面向字節流的,但TCP傳送的數據單元卻是報文段。一個(gè)TCP報文段分為首部和數據兩部分,而TCP的全部功能體現在它首部中的各字段的作用。

TCP報文段首部的前20個(gè)字節是固定的(下圖),后面有4n字節是根據需要而增加的選項(n是整數)。因此TCP首部的最小長(cháng)度是20字節。

TCP報文首部

  • 源端口和目的端口,各占2個(gè)字節,分別寫(xiě)入源端口和目的端口;

  • 序列號(Sequence number),占4字節。序號范圍是【0,2^32 - 1】,共2^32個(gè)序號。序號增加到 2^32-1后,下一個(gè)序號就又回到 0。TCP是面向字節流的。在一個(gè)TCP連接中傳送的字節流中的每一個(gè)字節都按順序編號。整個(gè)要傳送的字節流的起始序號必須在連接建立時(shí)設置。首部中的序號字段值則是指的是本報文段所發(fā)送的數據的第一個(gè)字節的序號。例如,一報文段的序號是301,而接待的數據共有100字節。這就表明:本報文段的數據的第一個(gè)字節的序號是301,最后一個(gè)字節的序號是400。顯然,下一個(gè)報文段(如果還有的話(huà))的數據序號應當從401開(kāi)始,即下一個(gè)報文段的序號字段值應為401。這個(gè)字段的序號也叫“報文段序號”;

  • 確認號(Acknowledge number),占4個(gè)字節,是期望收到對方下一個(gè)報文的第一個(gè)數據字節的序號。例如,B收到了A發(fā)送過(guò)來(lái)的報文,其序列號字段是501,而數據長(cháng)度是200字節,這表明B正確的收到了A發(fā)送的到序號700為止的數據。因此,B期望收到A的下一個(gè)數據序號是701,于是B在發(fā)送給A的確認報文段中把確認號置為701;

  • 數據偏移,占4位,它指出TCP報文段的數據起始處距離TCP報文段的起始處有多遠。

  • 保留,占6位,保留為今后使用,但目前應置為0;

  • 緊急URG(URGent),當URG=1,表明緊急指針字段有效。告訴系統此報文段中有緊急數據;

  • 確認ACK(ACKnowledgment),僅當ACK=1時(shí),確認號字段才有效。TCP規定,在連接建立后所有報文的傳輸都必須把ACK置1

  • 推送PSH(PuSH) ,當兩個(gè)應用進(jìn)程進(jìn)行交互式通信時(shí),有時(shí)在一端的應用進(jìn)程希望在鍵入一個(gè)命令后立即就能收到對方的響應,這時(shí)候就將PSH=1;

  • 復位RST(ReSeT),當RST=1,表明TCP連接中出現嚴重差錯,必須釋放連接,然后再重新建立連接;

  • 同步SYN(SYNchronization),在連接建立時(shí)用來(lái)同步序號。當SYN=1,ACK=0,表明是連接請求報文,若同意連接,則響應報文中應該使SYN=1,ACK=1

  • 終止FIN(FINis),用來(lái)釋放連接。當FIN=1,表明此報文的發(fā)送方的數據已經(jīng)發(fā)送完畢,并且要求釋放

    • 窗口,占2字節,指的是通知接收方,發(fā)送本報文你需要有多大的空間來(lái)接受;
  • 檢驗和,占2字節,校驗首部和數據這兩部分;

  • 緊急指針,占2字節,指出本報文段中的緊急數據的字節數;

  • 選項,長(cháng)度可變,定義一些其他的可選的參數

TCP是一種面向連接的單播協(xié)議,在發(fā)送數據前,通信雙方必須在彼此間建立一條連接。所謂的“連接”,其實(shí)是客戶(hù)端和服務(wù)器的內存里保存的一份關(guān)于對方的信息,如ip地址、端口號等。

接下來(lái)通過(guò)這張圖熟悉一下

TCP 三次握手

所謂三次握手(Three-way Handshake),是指建立一個(gè) TCP 連接時(shí),需要客戶(hù)端和服務(wù)器總共發(fā)送3個(gè)包。

三次握手的目的是連接服務(wù)器指定端口,建立 TCP 連接,并同步連接雙方的序列號和確認號,交換 TCP 窗口大小信息。

TCP連接建立需要經(jīng)過(guò)“三次握手"(there way handshake)。這個(gè)過(guò)程可以描述如下。

  • 第一次握手(同步SYN=1, 連接請求報文seq=x)

    (1)最初的客戶(hù)端TCP進(jìn)程是處于CLOSE(關(guān)閉)狀態(tài)。當客戶(hù)端準備發(fā)起一次TCP連接,進(jìn)人SYN-SEND(準備發(fā)送)狀態(tài)時(shí),它首先向處于LISTEN(收聽(tīng))狀態(tài)的服務(wù)器端CP進(jìn)程發(fā)送第一個(gè)控制位SYN=1的“連接建立請求報文”?!斑B接建立請求報文"不攜帶數據字段,但是需要給報文一個(gè)序號,圖中標為“SYN=1,seq=x"。

    需要注意的是:“連接建立請求報文”的序號seq 值x是隨機產(chǎn)生的,但是不能為0。隨機數x不能為0的理由是:避免因TCP連接非正常斷開(kāi)而可能引起的混亂。如果在連接突然中斷時(shí),可能有一個(gè)或兩個(gè)進(jìn)程同時(shí)等待對方的確認應答.而這個(gè)時(shí)候有一個(gè)新連接的建立連接。

    序號也是從0開(kāi)始,那么接收進(jìn)程就有可能認為是對方重傳的報文,這樣就有可能造成連接過(guò)程的錯誤。為了避免可能引起的問(wèn)題,協(xié)議規定SYN報文序號seq值I必須隨機產(chǎn)生,并且不能為0,

    ? 客戶(hù)端發(fā)送連接請求報文段,這是報文首部中的同步位SYN=1,同時(shí)選擇一個(gè)初始序列號 seq=x ,此時(shí),客戶(hù)端進(jìn)程進(jìn)入了 SYN-SENT(同步已發(fā)送狀態(tài))狀態(tài)。TCP規定,SYN報文段(SYN=1的報文段)不能攜帶數據,但需要消耗掉一個(gè)序號;

  • 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1)

    ? 服務(wù)器端在接收到“連接建立請求報文”之后, 如果同意建立連接,則向客戶(hù)端發(fā)送第二個(gè)控制位SYN=1、ACK=1的“連接建立請求確認報文”。確認號ack=x+1,表示是對第一個(gè)“連接建立請求報文”(序號seq=x)的確認。同樣,“連接建立請求確認報文"不攜帶數據字段,但是需要給報文一個(gè)序號(seq=y)。圖中標為“SYN= 1,ACK= l,seq=y,ack=x+1"。這時(shí)服務(wù)器進(jìn)人SYN-RCVD(準備接收)狀態(tài)。

    ? 服務(wù)器收到客戶(hù)端的SYN報文段,如果同意連接,則發(fā)出確認報文。確認報文中應該 ACK=1,SYN=1,確認號ACKnum=x+1,同時(shí),自己還要發(fā)送SYN請求信息,SYN=1,為自己初始化一個(gè)序列號 seq=y,服務(wù)器端將上述所有信息放到一個(gè)報文段(即SYN+ACK報文段)中,一并發(fā)送給客戶(hù)端,此時(shí),TCP服務(wù)器進(jìn)程進(jìn)入了SYN-RCVD(同步收到)狀態(tài)。這個(gè)報文也不能攜帶數據,但是同樣要消耗一個(gè)序號

  • 第三次握手(ACK=1,ACKnum=y+1)

    ? 在接收到“連接建立請求確認報文”之后,客戶(hù)端發(fā)送第三個(gè)控制位ACK=1"連接建立請求確認報文”。由于該報文是對“連接建立請求確認報文”(序號seq=:y)的確認,因此確認序號ack=y+1。同樣,“連接建立請求確認報文”不攜帶數據字段。但是需要給報文一個(gè)序號。按照TCP協(xié)議規定,這個(gè)“連接建立請求確認報文”的序號仍然為x十1.圖中標為“ACK= 1,seq=x+1 ,ack=y+1"。這時(shí)客戶(hù)端進(jìn)入ESTABLISHED(已建立連接)狀態(tài)。

    ? 客戶(hù)端收到服務(wù)器的SYN+ACK報文段,再次發(fā)送確認包(ACK),SYN 標志位為0,ACK 標志位為1,確認號 ACKnum = y+1,這個(gè)報文段發(fā)送完畢以后,客戶(hù)端和服務(wù)器端都進(jìn)入ESTABLISHED(已建立連接)狀態(tài),完成TCP三次握手。

為什么需要三次握手呢?兩次不行嗎?

為了防止已失效的連接請求報文段突然又傳送到了服務(wù)端,因而產(chǎn)生錯誤。

具體例子:“已失效的連接請求報文段”的產(chǎn)生在這樣一種情況下:client發(fā)出的第一個(gè)連接請求報文段并沒(méi)有丟失,而是在某個(gè)網(wǎng)絡(luò )結點(diǎn)長(cháng)時(shí)間的滯留了,以致延誤到連接釋放以后的某個(gè)時(shí)間才到達server。本來(lái)這是一個(gè)早已失效的報文段。但server收到此失效的連接請求報文段后,就誤認為是client再次發(fā)出的一個(gè)新的連接請求。于是就向client發(fā)出確認報文段,同意建立連接。假設不采用“三次握手”,那么只要server發(fā)出確認,新的連接就建立了。由于現在client并沒(méi)有發(fā)出建立連接的請求,因此不會(huì )理睬server的確認,也不會(huì )向server發(fā)送數據。但server卻以為新的運輸連接已經(jīng)建立,并一直等待client發(fā)來(lái)數據。這樣,server的很多資源就白白浪費掉了。采用“三次握手”的辦法可以防止上述現象發(fā)生。例如剛才那種情況,client不會(huì )向server的確認發(fā)出確認。server由于收不到確認,就知道client并沒(méi)有要求建立連接?!?/p>

TCP 四次揮手

TCP 的連接的拆除需要發(fā)送四個(gè)包,因此稱(chēng)為四次揮手(Four-way handshake),也叫做改進(jìn)的三次握手。客戶(hù)端或服務(wù)器均可主動(dòng)發(fā)起揮手動(dòng)作。

  • 第一次揮手(FIN=1,seq=x)

    (1)當客戶(hù)準備各結束一次數據傳輸,主動(dòng)提出釋放TCP連接時(shí),進(jìn)入FIN-WAIT-1(釋放等待-1)狀態(tài)。它向服服務(wù)器端發(fā)送第一個(gè)控制位FIN=1的“連接釋放請求報文”,接出連接釋放清求,停止發(fā)送數據?!斑B接釋放請求報文"不攜帶數據字段。但是需要給報文一個(gè)序號

    圖中標為FIN=1,seq=u"”。 “u“等于客戶(hù)端發(fā)送的最后一個(gè)字節的序號加1,

    主機1(可以使客戶(hù)端,也可以是服務(wù)器端),設置seq=x,向主機2發(fā)送一個(gè)FIN報文段;此時(shí),主機1進(jìn)入FIN_WAIT_1狀態(tài);這表示主機1沒(méi)有數據要發(fā)送給主機2了;

  • 第二次揮手(ACK=1,ACKnum=x+1)

    (2)服務(wù)器在接收到“連接釋放請求報文”之后,需要向客戶(hù)發(fā)回“連接釋放請求確認報文”,表示對接收第一個(gè)連接釋放請求報文的確認,因此ack =u+1。這個(gè)“連接釋放請求報文”的序號為V等于服務(wù)器發(fā)送的最后一個(gè)字節序號加1。圖中標為“ACK= l,seq=t,ack=u+1".

    TCP服務(wù)器進(jìn)程向高層應用進(jìn)程通知客戶(hù)請求釋放TCP連接,客戶(hù)到服務(wù)器的TCP連接斷開(kāi)。但是,服務(wù)器到客戶(hù)的TCP連接還沒(méi)有斷開(kāi),如果服務(wù)器還有數據報文需要發(fā)送時(shí),它還可以繼續發(fā)送直至完畢。這種狀態(tài)稱(chēng)為半關(guān)閉(helf-close)狀態(tài)。這個(gè)狀態(tài)需要持續一段時(shí)間??蛻?hù)在接收到服務(wù)器發(fā)送的ACK報文之后進(jìn)人FIN-WAIT-2狀態(tài):服務(wù)器進(jìn)入CLOSE WAIT狀態(tài)。

    ? 主機2收到了主機1發(fā)送的FIN報文段,向主機1回一個(gè)ACK報文段,Acknnum=x+1,主機1進(jìn)入FIN_WAIT_2狀態(tài);主機2告訴主機1,我“同意”你的關(guān)閉請求;

  • 第三次揮手(FIN=1,seq=y)

    (3)服務(wù)器的高層應用程序已經(jīng)沒(méi)有數據需要發(fā)送時(shí),它會(huì )通知TCP可以釋放法地這時(shí)服務(wù)器向客戶(hù)發(fā)送“連接釋放請求報文”。這個(gè)“連接釋放請求報文”的序號取決干大業(yè)關(guān)閉狀態(tài)時(shí),服務(wù)器端是否發(fā)送過(guò)數據報文。因此序號假定為w。圖中標為“FIN=1ACK=1,seq=w,ack=u+1”。服務(wù)器端經(jīng)過(guò)LAST-ACK狀態(tài)之后轉回到LISTENC聽(tīng))狀態(tài)。

    主機2向主機1發(fā)送FIN報文段,請求關(guān)閉連接,同時(shí)主機2進(jìn)入LAST_ACK 狀態(tài)

  • 第四次揮手(ACK=1,ACKnum=y+1)

    (4)客戶(hù)在接收到FIN報文之后向服務(wù)器發(fā)送“連接釋放請求確認報文”報文,表示對服務(wù)器"連接釋放請求報文”的確認。圖中ACK報文記為“ACK=1,seu+l,ack=w+1”。

    主機1收到主機2發(fā)送的FIN報文段,向主機2發(fā)送ACK報文段,然后主機1進(jìn)入TIME_WAIT狀態(tài);主機2收到主機1的ACK報文段以后,就關(guān)閉連接;此時(shí),主機1等待2MSL后依然沒(méi)有收到回復,則證明Server端已正常關(guān)閉,那好,主機1也可以關(guān)閉連接了,進(jìn)入 CLOSED 狀態(tài)。

    主機 1 等待了某個(gè)固定時(shí)間(兩個(gè)最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,沒(méi)有收到服務(wù)器端的 ACK ,認為服務(wù)器端已經(jīng)正常關(guān)閉連接,于是自己也關(guān)閉連接,進(jìn)入 CLOSED 狀態(tài)。

為什么連接的時(shí)候是三次握手,關(guān)閉的時(shí)候卻是四次握手?

因為當Server端收到Client端的SYN連接請求報文后,可以直接發(fā)送SYN+ACK報文。其中ACK報文是用來(lái)應答的,SYN報文是用來(lái)同步的。但是關(guān)閉連接時(shí),當Server端收到FIN報文時(shí),很可能并不會(huì )立即關(guān)閉SOCKET,所以只能先回復一個(gè)ACK報文,告訴Client端,“你發(fā)的FIN報文我收到了”。只有等到我Server端所有的報文都發(fā)送完了,我才能發(fā)送FIN報文,因此不能一起發(fā)送。故需要四步握手。

由于 TCP 協(xié)議是全雙工的,也就是說(shuō)客戶(hù)端和服務(wù)端都可以發(fā)起斷開(kāi)連接。兩邊各發(fā)起一次斷開(kāi)連接的申請,加上各自的兩次確認,看起來(lái)就像執行了四次揮手。

為什么TIME_WAIT狀態(tài)需要經(jīng)過(guò)2MSL(最大報文段生存時(shí)間)才能返回到CLOSE狀態(tài)?

雖然按道理,四個(gè)報文都發(fā)送完畢,我們可以直接進(jìn)入CLOSE狀態(tài)了,但是我們必須假象網(wǎng)絡(luò )是不可靠的,有可以最后一個(gè)ACK丟失。所以TIME_WAIT狀態(tài)就是用來(lái)重發(fā)可能丟失的ACK報文。

還有一個(gè)原因,防止類(lèi)似與“三次握手”中提到了的“已經(jīng)失效的連接請求報文段”出現在本連接中??蛻?hù)端發(fā)送完最后一個(gè)確認報文后,在這個(gè)2MSL時(shí)間中,就可以使本連接持續的時(shí)間內所產(chǎn)生的所有報文段都從網(wǎng)絡(luò )中消失。這樣新的連接中不會(huì )出現舊連接的請求報文。

四個(gè)計時(shí)器

保持計時(shí)器:

為了保證TCP工作正常、有序地進(jìn)行,TCP設置了保持計時(shí)器(keep timer),用來(lái)防止TCP連接處以長(cháng)時(shí)期空閑。如果客戶(hù)端建立到服務(wù)器端的連接,傳輸一此數據,然后停止傳輸,可能是這個(gè)客戶(hù)端出故障。在這種情況下,這個(gè)連接將永遠處于打開(kāi)狀態(tài)。為了解決這種問(wèn)題,一般是在服務(wù)器端設置保持計時(shí)器。當服務(wù)器端收到客戶(hù)端的報文時(shí),就將保持計時(shí)器復位。如果服務(wù)器端過(guò)了設定的時(shí)間沒(méi)有收到客戶(hù)端的信息,它就發(fā)送探測報文。如果發(fā)送10個(gè)探測報文(每一個(gè)相隔75s)還沒(méi)有響應,就假設客戶(hù)端出現故障,進(jìn)而終止該連接。

時(shí)間等待計時(shí)器:

為了保證TCP連接釋放過(guò)程正常地進(jìn)行.TCP設置了時(shí)間等待計時(shí)器(TIME waITTimer)。當TCP關(guān)閉一個(gè)連接時(shí),它并不認為這個(gè)連接馬上就真正地關(guān)閉。這時(shí),客戶(hù)端進(jìn)入TIME-WAIT狀態(tài),需要再等待兩個(gè)最長(cháng)報文壽命(maximum segment lfetime,MSL)時(shí)間之后,才真正進(jìn)人CLOSE(關(guān)閉)狀態(tài)。

客戶(hù)端與服務(wù)器端經(jīng)過(guò)“四次握手”之后,確認雙方已經(jīng)同意釋放連接,客戶(hù)端仍然需要采取延遲2MSL時(shí)間,確保服務(wù)器在最后階段發(fā)送給客戶(hù)端的數據,以及客戶(hù)端發(fā)送給服務(wù)器的最后一個(gè)ACK報文都能正確地被接收防止因個(gè)別報文傳輸錯誤導致連接釋放失敗。

重傳計時(shí)器

TCP使用重傳計時(shí)器(retransmission timer)來(lái)控制報文確認與等待重傳的時(shí)間,當發(fā)送端TCP發(fā)送一個(gè)報文時(shí),首先將它的一個(gè)報文的副本放人重傳隊列,同時(shí)啟動(dòng)一個(gè)面傳計時(shí)器。重傳計時(shí)器設定一個(gè)值,例如400ms,然后開(kāi)始倒計時(shí)。在重傳計時(shí)器倒計時(shí)到0之前收到確認,表示該報文傳輸成功;如果在計時(shí)器倒計時(shí)到0之時(shí)沒(méi)收到確認,表示該報文傳輸失敗.準備重傳該報文。

堅持計時(shí)器

在執行滑動(dòng)窗口控制的過(guò)程中.要求發(fā)送端在接收到零窗口通告之后就停止發(fā)送,這個(gè)過(guò)程直到接收端的TCP再發(fā)出一個(gè)非零窗口通告為止。但是,如果下一個(gè)非零窗口通告丟失,那么發(fā)送端將無(wú)休止地等待接收端的通知,這就會(huì )造成死鎖。為防止非零窗口通知丟失造成“死鎖”的現象出現,TCP設置了一個(gè)“堅持計時(shí)器"(persistence timer)。

當發(fā)送端的TCP收到一個(gè)零窗口通知時(shí),就啟動(dòng)堅持計時(shí)器。當堅持計時(shí)器時(shí)間到,發(fā)送端的TCP就發(fā)送一個(gè)零窗口探測報文。這個(gè)報文只有一個(gè)字節的數據,它有一個(gè)序號,但它的序號不需要確認。零窗口探測報文的作用是提示接收端:非零窗口通知丟失,必須重傳。

堅持計時(shí)器的值設置為重傳時(shí)間的數值,最大為60秒。如果發(fā)出的第一個(gè)零窗口探測報文沒(méi)有收到應答,則需發(fā)送第二個(gè)零窗口探測報文,直到收到非零窗口為止。

TCP協(xié)議如何來(lái)保證傳輸的可靠性

對于可靠性,TCP通過(guò)以下方式進(jìn)行保證:

  • 數據包校驗:目的是檢測數據在傳輸過(guò)程中的任何變化,若校驗出包有錯,則丟棄報文段并且不給出響應,這時(shí)TCP發(fā)送數據端超時(shí)后會(huì )重發(fā)數據;
  • 對失序數據包重排序:既然TCP報文段作為IP數據報來(lái)傳輸,而IP數據報的到達可能會(huì )失序,因此TCP報文段的到達也可能會(huì )失序。TCP將對失序數據進(jìn)行重新排序,然后才交給應用層;
  • 丟棄重復數據:對于重復數據,能夠丟棄重復數據;
  • 應答機制:當TCP收到發(fā)自TCP連接另一端的數據,它將發(fā)送一個(gè)確認。這個(gè)確認不是立即發(fā)送,通常將推遲幾分之一秒;
  • 超時(shí)重發(fā):當TCP發(fā)出一個(gè)段后,它啟動(dòng)一個(gè)定時(shí)器,等待目的端確認收到這個(gè)報文段。如果不能及時(shí)收到一個(gè)確認,將重發(fā)這個(gè)報文段;
  • 流量控制:TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發(fā)送接收端緩沖區所能接納的數據,這可以防止較快主機致使較慢主機的緩沖區溢出,這就是流量控制。TCP使用的流量控制協(xié)議是可變大小的滑動(dòng)窗口協(xié)議。

詳細講一下TCP的滑動(dòng)窗口

滑動(dòng)窗口機制

如果發(fā)送方把數據發(fā)送得過(guò)快,接收方可能會(huì )來(lái)不及接收,這就會(huì )造成數據的丟失。所謂流量控制就是讓發(fā)送方的發(fā)送速率不要太快,要讓接收方來(lái)得及接收。

利用滑動(dòng)窗口機制可以很方便地在TCP連接上實(shí)現對發(fā)送方的流量控制。

從上面的圖可以看到滑動(dòng)窗口左邊的是已發(fā)送并且被確認的分組,滑動(dòng)窗口右邊是還沒(méi)有輪到的分組?;瑒?dòng)窗口里面也分為兩塊,一塊是已經(jīng)發(fā)送但是未被確認的分組,另一塊是窗口內等待發(fā)送的分組。隨著(zhù)已發(fā)送的分組不斷被確認,窗口內等待發(fā)送的分組也會(huì )不斷被發(fā)送。整個(gè)窗口就會(huì )往右移動(dòng),讓還沒(méi)輪到的分組進(jìn)入窗口內。

可以看到滑動(dòng)窗口起到了一個(gè)限流的作用,也就是說(shuō)當前滑動(dòng)窗口的大小決定了當前 TCP 發(fā)送包的速率,而滑動(dòng)窗口的大小取決于擁塞控制窗口和流量控制窗口的兩者間的最小值。

流量控制

TCP 是全雙工的客戶(hù)端和服務(wù)器均可作為發(fā)送方或接收方,我們現在假設一個(gè)發(fā)送方向接收方發(fā)送數據的場(chǎng)景來(lái)講解流量控制。首先我們的接收方有一塊接收緩存,當數據來(lái)到時(shí)會(huì )先把數據放到緩存中,上層應用等緩存中有數據時(shí)就會(huì )到緩存中取數據。假如發(fā)送方?jīng)]有限制地不斷地向接收方發(fā)送數據,接收方的應用程序又沒(méi)有及時(shí)把接收緩存中的數據讀走,就會(huì )出現緩存溢出,數據丟失的現象,為了解決這個(gè)問(wèn)題,我們引入流量控制窗口。

假設應用程序最后讀走的數據序號是 lastByteRead,接收緩存中接收到的最后一個(gè)數據序號是 lastByteRcv,接收緩存的大小為 RcvSize,那么必須要滿(mǎn)足 lastByteRcv - lastByteRead <= RcvSize 才能保證接收緩存不會(huì )溢出,所以我們定義流量窗口為接收緩存剩余的空間,也就是Rcv = RcvSize - (lastByteRcv - lastByteRead)。只要接收方在響應 ACK 的時(shí)候把這個(gè)窗口的值帶給發(fā)送方,發(fā)送方就能知道接收方的接收緩存還有多大的空間,進(jìn)而設置滑動(dòng)窗口的大小。

擁塞控制

擁塞控制是指發(fā)送方先設置一個(gè)小的窗口值作為發(fā)送速率,當成功發(fā)包并接收到ACK時(shí),便以指數速率增大發(fā)送窗口的大小,直到遇到丟包(超時(shí)/三個(gè)冗余ACK),才停止并調整窗口的大小。這么做能最大限度地利用帶寬,又不至于讓網(wǎng)絡(luò )環(huán)境變得太過(guò)擁擠。

最終滑動(dòng)窗口的值將設置為流量控制窗口和擁塞控制窗口中的較小值。

TCP的擁塞處理

計算機網(wǎng)絡(luò )中的帶寬、交換結點(diǎn)中的緩存及處理機等都是網(wǎng)絡(luò )的資源。在某段時(shí)間,若對網(wǎng)絡(luò )中某一資源的需求超過(guò)了該資源所能提供的可用部分,網(wǎng)絡(luò )的性能就會(huì )變壞,這種情況就叫做擁塞。擁塞控制就是防止過(guò)多的數據注入網(wǎng)絡(luò )中,這樣可以使網(wǎng)絡(luò )中的路由器或鏈路不致過(guò)載。注意,擁塞控制和流量控制不同,前者是一個(gè)全局性的過(guò)程,而后者指點(diǎn)對點(diǎn)通信量的控制。擁塞控制的方法主要有以下四種:

  1. 慢啟動(dòng):不要一開(kāi)始就發(fā)送大量的數據,先探測一下網(wǎng)絡(luò )的擁塞程度,也就是說(shuō)由小到大逐漸增加擁塞窗口的大小;
  2. 擁塞避免:擁塞避免算法讓擁塞窗口緩慢增長(cháng),即每經(jīng)過(guò)一個(gè)往返時(shí)間RTT就把發(fā)送方的擁塞窗口cwnd加1,而不是加倍,這樣擁塞窗口按線(xiàn)性規律緩慢增長(cháng)。
  3. 快重傳:快重傳要求接收方在收到一個(gè) 失序的報文段 后就立即發(fā)出 重復確認(為的是使發(fā)送方及早知道有報文段沒(méi)有到達對方)而不要等到自己發(fā)送數據時(shí)捎帶確認??熘貍魉惴ㄒ幎?#xff0c;發(fā)送方只要一連收到三個(gè)重復確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待設置的重傳計時(shí)器時(shí)間到期。
  4. 快恢復:快重傳配合使用的還有快恢復算法,當發(fā)送方連續收到三個(gè)重復確認時(shí),就執行“乘法減小”算法,把ssthresh門(mén)限減半,但是接下去并不執行慢開(kāi)始算法:因為如果網(wǎng)絡(luò )出現擁塞的話(huà)就不會(huì )收到好幾個(gè)重復的確認,所以發(fā)送方現在認為網(wǎng)絡(luò )可能沒(méi)有出現擁塞。所以此時(shí)不執行慢開(kāi)始算法,而是將cwnd設置為ssthresh的大小,然后執行擁塞避免算法。

服務(wù)器出現了大量CLOSE_WAIT狀態(tài)如何解決

大量 CLOSE_WAIT 表示程序出現了問(wèn)題,對方的 socket 已經(jīng)關(guān)閉連接,而我方忙于讀或寫(xiě)沒(méi)有及時(shí)關(guān)閉連接,需要檢查代碼,特別是釋放資源的代碼,或者是處理請求的線(xiàn)程配置。

講一講SYN超時(shí),洪泛攻擊,以及解決策略

什么 SYN 是洪泛攻擊?在 TCP 的三次握手機制的第一步中,客戶(hù)端會(huì )向服務(wù)器發(fā)送 SYN 報文段。服務(wù)器接收到 SYN 報文段后會(huì )為該TCP分配緩存和變量,如果攻擊分子大量地往服務(wù)器發(fā)送 SYN 報文段,服務(wù)器的連接資源終將被耗盡,導致內存溢出無(wú)法繼續服務(wù)。

解決策略:當服務(wù)器接受到 SYN 報文段時(shí),不直接為該 TCP 分配資源,而只是打開(kāi)一個(gè)半開(kāi)的套接字。接著(zhù)會(huì )使用 SYN 報文段的源Id,目的Id,端口號以及只有服務(wù)器自己知道的一個(gè)秘密函數生成一個(gè) cookie,并把 cookie 作為序列號響應給客戶(hù)端。

如果客戶(hù)端是正常建立連接,將會(huì )返回一個(gè)確認字段為 cookie + 1 的報文段。接下來(lái)服務(wù)器會(huì )根據確認報文的源Id,目的Id,端口號以及秘密函數計算出一個(gè)結果,如果結果的值 + 1等于確認字段的值,則證明是剛剛請求連接的客戶(hù)端,這時(shí)候才為該 TCP 分配資源

這樣一來(lái)就不會(huì )為惡意攻擊的 SYN 報文段分配資源空間,避免了攻擊。

三、HTTP

HTTP1.0、HTTP1.1、HTTP2.0 的區別

post 和 get 的區別

HTTP全稱(chēng)是 HyperText Transfer Protocal,即:超文本傳輸協(xié)議。是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡(luò )通信協(xié)議,它允許將超文本標記語(yǔ)言(HTML)文檔從Web服務(wù)器傳送到客戶(hù)端的瀏覽器。目前我們使用的是HTTP/1.1 版本。所有的WWW文件都必須遵守這個(gè)標準。設計HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁(yè)面的方法。1960年美國人 Ted Nelson 構思了一種通過(guò)計算機處理文本信息的方法,并稱(chēng)之為超文本(hypertext),這成為了HTTP超文本傳輸協(xié)議標準架構的發(fā)展根基。

URI 和 URL

每個(gè)Web 服務(wù)器資源都有一個(gè)名字,這樣客戶(hù)端就可以說(shuō)明他們感興趣的資源是什么了,服務(wù)器資源名被稱(chēng)為統一資源標識符(Uniform Resource Identifier,URI)。URI 就像因特網(wǎng)上的郵政地址一樣,在世界范圍內唯一標識并定位信息資源。

統一資源定位符(URL)是資源標識符最常見(jiàn)的形式。URL 描述了一臺特定服務(wù)器上某資源的特定位置。

現在幾乎所有的 URI 都是 URL。

URI 的第二種形式就是統一資源名(URN)。URN 是作為特定內容的唯一名稱(chēng)使用的,與目前的資源所在地無(wú)關(guān)。

HTTP消息的結構

事務(wù)和報文

客戶(hù)端是怎樣通過(guò)HTTP與Web服務(wù)器及其資源進(jìn)行事務(wù)處理的呢?一個(gè)HTTP事務(wù)由一條請求命令(從客戶(hù)端發(fā)往服務(wù)器)和一個(gè)響應(從服務(wù)器發(fā)回客戶(hù)端)結果組成。這種通信是通過(guò)名為HTTP報文(HTTP Message)的格式化數據塊進(jìn)行的。

HTTP事務(wù):

報文:

HTTP 報文是純文本,不是二進(jìn)制代碼。從 Web 客戶(hù)端發(fā)往 Web 服務(wù)器的 HTTP 報文稱(chēng)為請求報文(request message)。從服務(wù)器發(fā)往客戶(hù)端的報文稱(chēng)為響應報文。

HTTP 報文包括三部分:

  • 起始行
  • 首部字段
  • 主體

方法

Http協(xié)議定義了很多與服務(wù)器交互的方法,最基本的有4種,分別是GET,POST,PUT,DELETE. 一個(gè)URL地址用于描述一個(gè)網(wǎng)絡(luò )上的資源,而HTTP中的GET, POST, PUT, DELETE就對應著(zhù)對這個(gè)資源的查,改,增,刪4個(gè)操作。我們最常見(jiàn)的就是GET和POST了。GET一般用于獲取/查詢(xún)資源信息,而POST一般用于更新資源信息。

  • GET
  • HEAD
  • PUT
  • POST
  • TRACE
  • OPTIONS
  • DELETE

Get與POST的區別

GET與POST是我們常用的兩種HTTP Method,二者之間的區別主要包括如下五個(gè)方面:

  1. 從功能上講,GET一般用來(lái)從服務(wù)器上獲取資源,POST一般用來(lái)更新服務(wù)器上的資源;
  2. 從REST服務(wù)角度上說(shuō),GET是冪等的,即讀取同一個(gè)資源,總是得到相同的數據,而POST不是冪等的,因為每次請求對資源的改變并不是相同的;進(jìn)一步地,GET不會(huì )改變服務(wù)器上的資源,而POST會(huì )對服務(wù)器資源進(jìn)行改變;
  3. 從請求參數形式上看,GET請求的數據會(huì )附在URL之后,即將請求數據放置在HTTP報文的 請求頭 中,以?分割URL和傳輸數據,參數之間以&相連。特別地,如果數據是英文字母/數字,原樣發(fā)送;否則,會(huì )將其編碼為 application/x-www-form-urlencoded MIME 字符串(如果是空格,轉換為+,如果是中文/其他字符,則直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號以16進(jìn)制表示的ASCII);而POST請求會(huì )把提交的數據則放置在是HTTP請求報文的 請求體 中。
  4. 就安全性而言,POST的安全性要比GET的安全性高,因為GET請求提交的數據將明文出現在URL上,而且POST請求參數則被包裝到請求體中,相對更安全。
  5. 從請求的大小看,GET請求的長(cháng)度受限于瀏覽器或服務(wù)器對URL長(cháng)度的限制,允許發(fā)送的數據量比較小,而POST請求則是沒(méi)有大小限制的。

HTTP請求結構:請求方式 + 請求URI + 協(xié)議及其版本

HTTP響應結構:狀態(tài)碼 + 原因短語(yǔ) + 協(xié)議及其版本

狀態(tài)碼

每條HTTP響應報文返回時(shí)都會(huì )攜帶一個(gè)狀態(tài)碼。狀態(tài)碼是一個(gè)三位數字的代碼,告知客戶(hù)端請求是否成功,或者是都需要采取其他動(dòng)作。

  • 1xx:表明服務(wù)端接收了客戶(hù)端請求,客戶(hù)端繼續發(fā)送請求;
  • 2xx:客戶(hù)端發(fā)送的請求被服務(wù)端成功接收并成功進(jìn)行了處理;
  • 3xx:服務(wù)端給客戶(hù)端返回用于重定向的信息;
  • 4xx:客戶(hù)端的請求有非法內容;
  • 5xx:服務(wù)端未能正常處理客戶(hù)端的請求而出現意外錯誤。
  • 200 OK:表示從客戶(hù)端發(fā)送給服務(wù)器的請求被正常處理并返回;
  • 204 No Content:表示客戶(hù)端發(fā)送給客戶(hù)端的請求得到了成功處理,但在返回的響應報文中不含實(shí)體的主體部分(沒(méi)有資源可以返回)
  • 206 Patial Content:表示客戶(hù)端進(jìn)行了范圍請求,并且服務(wù)器成功執行了這部分的GET請求,響應報文中包含由Content-Range指定范圍的實(shí)體內容。
  • 301 Moved Permanently:永久性重定向,表示請求的資源被分配了新的URL,之后應使用更改的URL;
  • 302 Found:臨時(shí)性重定向,表示請求的資源被分配了新的URL,希望本次訪(fǎng)問(wèn)使用新的URL;
  • 303 See Other:表示請求的資源被分配了新的URL,應使用GET方法定向獲取請求的資源
  • 304 Not Modified:表示客戶(hù)端發(fā)送附帶條件(是指采用GET方法的請求報文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的請求時(shí),服務(wù)器端允許訪(fǎng)問(wèn)資源,但是請求為滿(mǎn)足條件的情況下返回改狀態(tài)碼;
  • 400 Bad Request:表示請求報文中存在語(yǔ)法錯誤;
  • 401 Unauthorized:經(jīng)許可,需要通過(guò)HTTP認證;
  • 403 Forbidden:服務(wù)器拒絕該次訪(fǎng)問(wèn)(訪(fǎng)問(wèn)權限出現問(wèn)題)
  • 404 Not Found:表示服務(wù)器上無(wú)法找到請求的資源,除此之外,也可以在服務(wù)器拒絕請求但不想給拒絕原因時(shí)使用;
  • 500 Inter Server Error:表示服務(wù)器在執行請求時(shí)發(fā)生了錯誤,也有可能是web應用存在的bug或某些臨時(shí)的錯誤時(shí);
  • 503 Server Unavailable:表示服務(wù)器暫時(shí)處于超負載或正在進(jìn)行停機維護,無(wú)法處理請求;

HTTP 是個(gè)應用層協(xié)議。HTTP 無(wú)需操心網(wǎng)絡(luò )通信的具體細節,而是把這些細節都交給了通用可靠的因特網(wǎng)傳輸協(xié)議 TCP/IP。

在 HTTP 客戶(hù)端向服務(wù)器發(fā)送報文之前,需要用網(wǎng)絡(luò )協(xié)議(Internet Protocol,IP)地址和端口號在客戶(hù)端和服務(wù)器之間建立一條 TCP/IP 協(xié)議。而 IP 地址就是通過(guò) URL 提供的,像 http://207.200.21.11:80/index.html,還有使用域名服務(wù)(Domain Name Services,DNS)的 http://www.lazyegg.net。

協(xié)議版本

  • HTTP/0.9

    HTTP協(xié)議的最初版本,功能簡(jiǎn)陋,僅支持 GET 方法,并且僅能請求訪(fǎng)問(wèn) HTML 格式的資源

  • HTTP/1.0

    • 增加了請求方式 POST 和 HEAD
    • 不再局限于0.9版本的HTML格式,根據Content-Type可以支持多種數據格式,即MIME多用途互聯(lián)網(wǎng)郵件擴展,例如text/html、image/jpeg等
    • 同時(shí)也開(kāi)始支持 cache,就是當客戶(hù)端在規定時(shí)間內訪(fǎng)問(wèn)統一網(wǎng)站,直接訪(fǎng)問(wèn)cache即可
    • HTTP請求和回應的格式也變了。除了數據部分,每次通信都必須包括頭信息(HTTP header),用來(lái)描述一些元數據。其他的新增功能還包括狀態(tài)碼(status code)、多字符集支持、多部分發(fā)送(multi-part type)、權限(authorization)、緩存(cache)、內容編碼(content encoding)等
    • 但是1.0版本的工作方式是每次TCP連接只能發(fā)送一個(gè)請求,當服務(wù)器響應后就會(huì )關(guān)閉這次連接,下一個(gè)請求需要再次建立TCP連接,就是不支持keepalive
  • HTTP/1.0+

    在20世紀90年代中葉,為滿(mǎn)足飛快發(fā)展的萬(wàn)維網(wǎng),很多流行的 Web 客戶(hù)端和服務(wù)器飛快的向 HTTP 中添加各種特性,包括持久的 keep-alive 連接、虛擬主機支持,以及代理連接支持都被假如到 HTTP 中,并稱(chēng)為非官方的事實(shí)標準。這種非正式的 HTTP 擴展版本通常稱(chēng)為 HTTP/1.0+

  • HTTP/1.1

    • http1.1是目前最為主流的http協(xié)議版本,從1997年發(fā)布至今,仍是主流的http協(xié)議版本。
    • 引入了持久連接,或叫長(cháng)連接( persistent connection),即TCP連接默認不關(guān)閉,可以被多個(gè)請求復用,不用聲明Connection: keep-alive。
    • 引入了管道機制( pipelining),即在同一個(gè)TCP連接里,客戶(hù)端可以同時(shí)發(fā)送多個(gè)請求,進(jìn)一步改進(jìn)了HTTP協(xié)議的效率。
    • 新增方法:PUT、 PATCH、 OPTIONS、 DELETE。
    • http協(xié)議不帶有狀態(tài),每次請求都必須附上所有信息。請求的很多字段都是重復的,浪費帶寬,影響速度。
  • HTTP/2.0(又名 HTTP-NG)

    • http/2發(fā)布于2015年,目前應用還比較少。
    • http/2是一個(gè)徹底的二進(jìn)制協(xié)議,頭信息和數據體都是二進(jìn)制,并且統稱(chēng)為"幀"(frame):頭信息幀和數據幀。
    • 復用TCP連接,在一個(gè)連接里,客戶(hù)端和瀏覽器都可以同時(shí)發(fā)送多個(gè)請求或回應,且不用按順序一一對應,避免了隊頭堵塞的問(wèn)題,此雙向的實(shí)時(shí)通信稱(chēng)為多工( Multiplexing)。
    • HTTP/2 允許服務(wù)器未經(jīng)請求,主動(dòng)向客戶(hù)端發(fā)送資源,即服務(wù)器推送。
    • 引入頭信息壓縮機制( header compression) ,頭信息使用gzip或compress壓縮后再發(fā)送。

四、HTTPS

HTTP缺點(diǎn):

  1. 通信使用明文不對數據進(jìn)行加密(內容容易被竊聽(tīng))
  2. 不驗證通信方身份(容易偽裝)
  3. 無(wú)法確定報文完整性(內容易被篡改)

因此,HTTP協(xié)議不適合傳輸一些敏感信息,比如:信用卡號、密碼等支付信息。

為了解決HTTP協(xié)議的這一缺陷,需要使用另一種協(xié)議:安全套接字層超文本傳輸協(xié)議 HTTPS,為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL(安全套接層)協(xié)議,SSL依靠證書(shū)來(lái)驗證服務(wù)器的身份,并為瀏覽器和服務(wù)器之間的通信加密。

與 SSL(安全套接層)組合使用的 HTTP 就是 HTTPS

img

HTTP和HTTPS對比

HTTP協(xié)議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協(xié)議傳輸隱私信息非常不安全,為了保證這些隱私數據能加密傳輸,于是網(wǎng)景公司設計了SSL(Secure Sockets Layer)協(xié)議用于對HTTP協(xié)議傳輸的數據進(jìn)行加密,從而就誕生了HTTPS。簡(jiǎn)單來(lái)說(shuō),HTTPS協(xié)議是由SSL+HTTP協(xié)議構建的可進(jìn)行加密傳輸、身份認證的網(wǎng)絡(luò )協(xié)議,要比http協(xié)議安全。

HTTPS和HTTP的區別主要如下:

  1. https協(xié)議需要到ca申請證書(shū),一般免費證書(shū)較少,因而需要一定費用。
  2. http是超文本傳輸協(xié)議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協(xié)議。
  3. http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
  4. http的連接很簡(jiǎn)單,是無(wú)狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構建的可進(jìn)行加密傳輸、身份認證的網(wǎng)絡(luò )協(xié)議,比http協(xié)議安全。

對稱(chēng)加密與非對稱(chēng)加密

主要的加密方法分為兩種:一種是共享密鑰加密(對稱(chēng)密鑰加密),一種是公開(kāi)密鑰加密(非對稱(chēng)密鑰加密)

共享密鑰加密(對稱(chēng)秘鑰加密)

加密與解密使用同一個(gè)密鑰,常見(jiàn)的對稱(chēng)加密算法:DES,AES,3DES等。

img

也就是說(shuō)在加密的同時(shí),也會(huì )把密鑰發(fā)送給對方。在發(fā)送密鑰過(guò)程中可能會(huì )造成密鑰被竊取,那么如何解決這一問(wèn)題呢?

公開(kāi)密鑰(非對稱(chēng)密鑰)

公開(kāi)密鑰使用一對非對稱(chēng)密鑰。一把叫私有密鑰,另一把叫公開(kāi)密鑰。私有密鑰不讓任何人知道,公有密鑰隨意發(fā)送。公鑰加密的信息,只有私鑰才能解密。常見(jiàn)的非對稱(chēng)加密算法:RSA,ECC等。

也就是說(shuō),發(fā)送密文方使用對方的公開(kāi)密鑰進(jìn)行加密,對方接受到信息后,使用私有密鑰進(jìn)行解密。

對稱(chēng)加密加密與解密使用的是同樣的密鑰,所以速度快,但由于需要將密鑰在網(wǎng)絡(luò )傳輸,所以安全性不高。

非對稱(chēng)加密使用了一對密鑰,公鑰與私鑰,所以安全性高,但加密與解密速度慢。

為了解決這一問(wèn)題,https采用對稱(chēng)加密與非對稱(chēng)加密的混合加密方式。

SSL/TSL

SSL(Secure Sockets Layer),中文叫做“安全套接層”。它是在上世紀90年代中期,由網(wǎng)景公司設計的。

SSL 協(xié)議就是用來(lái)解決 HTTP 傳輸過(guò)程的不安全問(wèn)題,到了1999年,SSL 因為應用廣泛,已經(jīng)成為互聯(lián)網(wǎng)上的事實(shí)標準。IETF 就在那年把 SSL 標準化。標準化之后的名稱(chēng)改為 TLS(是“Transport Layer Security”的縮寫(xiě)),中文叫做“傳輸層安全協(xié)議”。

很多相關(guān)的文章都把這兩者并列稱(chēng)呼(SSL/TLS),因為這兩者可以視作同一個(gè)東西的不同階段。

SSL/TLS協(xié)議的基本思路是采用公鑰加密法,也就是說(shuō),客戶(hù)端先向服務(wù)器端索要公鑰,然后用公鑰加密信息,服務(wù)器收到密文后,用自己的私鑰解密。

但是,這里有兩個(gè)問(wèn)題。

  • 如何保證公鑰不被篡改?

解決方法:將公鑰放在數字證書(shū)中。只要證書(shū)是可信的,公鑰就是可信的。

  • 公鑰加密計算量太大,如何減少耗用的時(shí)間?

    每一次對話(huà)(session),客戶(hù)端和服務(wù)器端都生成一個(gè)"對話(huà)密鑰"(session key),用它來(lái)加密信息。由于"對話(huà)密鑰"是對稱(chēng)加密,所以運算速度非???#xff0c;而服務(wù)器公鑰只用于加密"對話(huà)密鑰"本身,這樣就減少了加密運算的消耗時(shí)間。

因此,SSL/TLS協(xié)議的基本過(guò)程是這樣的:

  1. 服務(wù)端將非對稱(chēng)加密的公鑰發(fā)送給客戶(hù)端;
  2. 客戶(hù)端拿著(zhù)服務(wù)端發(fā)來(lái)的公鑰,對對稱(chēng)加密的key做加密并發(fā)給服務(wù)端;
  3. 服務(wù)端拿著(zhù)自己的私鑰對發(fā)來(lái)的密文解密,從來(lái)獲取到對稱(chēng)加密的key;
  4. 二者利用對稱(chēng)加密的key對需要傳輸的消息做加解密傳輸。

HTTPS相比HTTP,在請求前多了一個(gè)「握手」的環(huán)節。

握手過(guò)程中確定了數據加密的密碼。在握手過(guò)程中,網(wǎng)站會(huì )向瀏覽器發(fā)送 SSL 證書(shū),SSL 證書(shū)和我們日常用的身份證類(lèi)似,是一個(gè)支持 HTTPS 網(wǎng)站的身份證明,SSL 證書(shū)里面包含了網(wǎng)站的域名,證書(shū)有效期,證書(shū)的頒發(fā)機構以及用于加密傳輸密碼的公鑰等信息,由于公鑰加密的密碼只能被在申請證書(shū)時(shí)生成的私鑰解密,因此瀏覽器在生成密碼之前需要先核對當前訪(fǎng)問(wèn)的域名與證書(shū)上綁定的域名是否一致,同時(shí)還要對證書(shū)的頒發(fā)機構進(jìn)行驗證,如果驗證失敗瀏覽器會(huì )給出證書(shū)錯誤的提示。

證書(shū)

實(shí)際上,我們使用的證書(shū)分很多種類(lèi)型,SSL證書(shū)只是其中的一種。證書(shū)的格式是由 X.509 標準定義。SSL 證書(shū)負責傳輸公鑰,是一種PKI(Public Key Infrastructure,公鑰基礎結構)證書(shū)。

我們常見(jiàn)的證書(shū)根據用途不同大致有以下幾種:

  1. SSL證書(shū),用于加密HTTP協(xié)議,也就是HTTPS。
  2. 代碼簽名證書(shū),用于簽名二進(jìn)制文件,比如Windows內核驅動(dòng),Firefox插件,Java代碼簽名等等。
  3. 客戶(hù)端證書(shū),用于加密郵件。
  4. 雙因素證書(shū),網(wǎng)銀專(zhuān)業(yè)版使用的USB Key里面用的就是這種類(lèi)型的證書(shū)。

這些證書(shū)都是由受認證的證書(shū)頒發(fā)機構——我們稱(chēng)之為CA(Certificate Authority)機構來(lái)頒發(fā),針對企業(yè)與個(gè)人的不同,可申請的證書(shū)的類(lèi)型也不同,價(jià)格也不同。CA機構頒發(fā)的證書(shū)都是受信任的證書(shū),對于 SSL 證書(shū)來(lái)說(shuō),如果訪(fǎng)問(wèn)的網(wǎng)站與證書(shū)綁定的網(wǎng)站一致就可以通過(guò)瀏覽器的驗證而不會(huì )提示錯誤。

為什么服務(wù)端要發(fā)送證書(shū)給客戶(hù)端

互聯(lián)網(wǎng)有太多的服務(wù)需要使用證書(shū)來(lái)驗證身份,以至于客戶(hù)端(操作系統或瀏覽器等)無(wú)法內置所有證書(shū),需要通過(guò)服務(wù)端將證書(shū)發(fā)送給客戶(hù)端。

客戶(hù)端為什么要驗證接收到的證書(shū)

中間人攻擊

客戶(hù)端<------------攻擊者<------------服務(wù)端
        偽造證書(shū)            攔截請求

客戶(hù)端如何驗證接收到的證書(shū)

為了回答這個(gè)問(wèn)題,需要引入數字簽名(Digital Signature)。

+---------------------+
| A digital signature |
|(not to be confused  |
|with a digital       |
|certificate)         |            +---------+              +--------+
| is a mathematical   |----哈希--->| 消息摘要  |---私鑰加密--->| 數字簽名 |
|technique used       |            +---------+              +--------+
|to validate the      |
|authenticity and     |
|integrity of a       |
|message, software    |
|or digital document. |
+---------------------+

將一段文本通過(guò)哈希(hash)和私鑰加密處理后生成數字簽名。

假設消息傳遞在Bob,Susan和Pat三人之間發(fā)生。Susan將消息連同數字簽名一起發(fā)送給Bob,Bob接收到消息后,可以這樣驗證接收到的消息就是Susan發(fā)送的

+---------------------+
| A digital signature |
|(not to be confused  |
|with a digital       |
|certificate)         |            +---------+
| is a mathematical   |----哈希--->|  消息摘要 |
|technique used       |            +---------+
|to validate the      |                 |
|authenticity and     |                 |
|integrity of a       |                 |
|message, software    |                 對
|or digital document. |                 比
+---------------------+                 |
                                        |
                                        |
          +--------+               +---------+
          | 數字簽名 |---公鑰解密--->|  消息摘要 |
          +--------+               +---------+

當然,這個(gè)前提是Bob知道Susan的公鑰。更重要的是,和消息本身一樣,公鑰不能在不安全的網(wǎng)絡(luò )中直接發(fā)送給Bob。此時(shí)就引入了證書(shū)頒發(fā)機構(Certificate Authority,簡(jiǎn)稱(chēng)CA),CA數量并不多,Bob客戶(hù)端內置了所有受信任CA的證書(shū)。CA對Susan的公鑰(和其他信息)數字簽名后生成證書(shū)。

Susan將證書(shū)發(fā)送給Bob后,Bob通過(guò)CA證書(shū)的公鑰驗證證書(shū)簽名。

Bob信任CA,CA信任Susan 使得 Bob信任Susan,信任鏈(Chain Of Trust)就是這樣形成的。

事實(shí)上,Bob客戶(hù)端內置的是CA的根證書(shū)(Root Certificate),HTTPS協(xié)議中服務(wù)器會(huì )發(fā)送證書(shū)鏈(Certificate Chain)給客戶(hù)端。

HTTPS的工作原理

  1. Client 使用https的URL訪(fǎng)問(wèn) Server,要求與 Server 建立 SSL 連接
  2. Server 把事先配置好的公鑰證書(shū)返回給客戶(hù)端。
  3. Client驗證公鑰證書(shū):比如是否在有效期內,證書(shū)的用途是不是匹配Client請求的站點(diǎn),是不是在CRL吊銷(xiāo)列表里面,它的上一級證書(shū)是否有效,這是一個(gè)遞歸的過(guò)程,直到驗證到根證書(shū)(操作系統內置的Root證書(shū)或者Client內置的Root證書(shū))。如果驗證通過(guò)則繼續,不通過(guò)則顯示警告信息。
  4. Client使用偽隨機數生成器生成加密所使用的對稱(chēng)密鑰,然后用證書(shū)的公鑰加密這個(gè)對稱(chēng)密鑰,發(fā)給Server。
  5. Server使用自己的私鑰(private key)解密這個(gè)消息,得到對稱(chēng)密鑰。至此,Client和Server雙方都持有了相同的對稱(chēng)密鑰。
  6. Server使用對稱(chēng)密鑰加密“明文內容A”,發(fā)送給Client。
  7. Client使用對稱(chēng)密鑰解密響應的密文,得到“明文內容A”。
  8. Client再次發(fā)起HTTPS的請求,使用對稱(chēng)密鑰加密請求的“明文內容B”,然后Server使用對稱(chēng)密鑰解密密文,得到“明文內容B”。

HTTPS的優(yōu)點(diǎn)

盡管HTTPS并非絕對安全,掌握根證書(shū)的機構、掌握加密算法的組織同樣可以進(jìn)行中間人形式的攻擊,但HTTPS仍是現行架構下最安全的解決方案,主要有以下幾個(gè)好處:

  1. 使用HTTPS協(xié)議可認證用戶(hù)和服務(wù)器,確保數據發(fā)送到正確的客戶(hù)機和服務(wù)器;
  2. HTTPS協(xié)議是由SSL+HTTP協(xié)議構建的可進(jìn)行加密傳輸、身份認證的網(wǎng)絡(luò )協(xié)議,要比http協(xié)議安全,可防止數據在傳輸過(guò)程中不被竊取、改變,確保數據的完整性。
  3. HTTPS是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。
  4. 谷歌曾在2014年8月份調整搜索引擎算法,并稱(chēng)“比起同等HTTP網(wǎng)站,采用HTTPS加密的網(wǎng)站在搜索結果中的排名將會(huì )更高”。

HTTPS的缺點(diǎn)

雖然說(shuō)HTTPS有很大的優(yōu)勢,但其相對來(lái)說(shuō),還是存在不足之處的:

  1. HTTPS協(xié)議握手階段比較費時(shí),會(huì )使頁(yè)面的加載時(shí)間延長(cháng)近50%,增加10%到20%的耗電;
  2. HTTPS連接緩存不如HTTP高效,會(huì )增加數據開(kāi)銷(xiāo)和功耗,甚至已有的安全措施也會(huì )因此而受到影響;
  3. SSL證書(shū)需要錢(qián),功能越強大的證書(shū)費用越高,個(gè)人網(wǎng)站、小網(wǎng)站沒(méi)有必要一般不會(huì )用。
  4. SSL證書(shū)通常需要綁定IP,不能在同一IP上綁定多個(gè)域名,IPv4資源不可能支撐這個(gè)消耗。
  5. HTTPS協(xié)議的加密范圍也比較有限,在黑客攻擊、拒絕服務(wù)攻擊、服務(wù)器劫持等方面幾乎起不到什么作用。最關(guān)鍵的,SSL證書(shū)的信用鏈體系并不安全,特別是在某些國家可以控制CA根證書(shū)的情況下,中間人攻擊一樣可行。

HTTP 切換到 HTTPS

如果需要將網(wǎng)站從http切換到https到底該如何實(shí)現呢?

這里需要將頁(yè)面中所有的鏈接,例如js,css,圖片等等鏈接都由http改為https。例如:http://www.baidu.com改為https://www.baidu.com

BTW,這里雖然將http切換為了https,還是建議保留http。所以我們在切換的時(shí)候可以做http和https的兼容,具體實(shí)現方式是,去掉頁(yè)面鏈接中的http頭部,這樣可以自動(dòng)匹配http頭和https頭。例如:將http://www.baidu.com改為//www.baidu.com。然后當用戶(hù)從http的入口進(jìn)入訪(fǎng)問(wèn)頁(yè)面時(shí),頁(yè)面就是http,如果用戶(hù)是從https的入口進(jìn)入訪(fǎng)問(wèn)頁(yè)面,頁(yè)面即使https的。

什么是Cookie,Cookie的使用過(guò)程是怎么樣的?

由于 http 協(xié)議是無(wú)狀態(tài)協(xié)議,如果客戶(hù)通過(guò)瀏覽器訪(fǎng)問(wèn) web 應用時(shí)沒(méi)有一個(gè)保存用戶(hù)訪(fǎng)問(wèn)狀態(tài)的機制,那么將不能持續跟蹤應用的操作。比如當用戶(hù)往購物車(chē)中添加了商品,web 應用必須在用戶(hù)瀏覽別的商品的時(shí)候仍保存購物車(chē)的狀態(tài),以便用戶(hù)繼續往購物車(chē)中添加商品。

cookie 是瀏覽器的一種緩存機制,它可用于維持客戶(hù)端與服務(wù)器端之間的會(huì )話(huà)。由于下面一題會(huì )講到session,所以這里要強調cookie會(huì )將會(huì )話(huà)保存在客戶(hù)端(session則是把會(huì )話(huà)保存在服務(wù)端)

這里以最常見(jiàn)的登陸案例講解cookie的使用過(guò)程:

  1. 首先用戶(hù)在客戶(hù)端瀏覽器向服務(wù)器發(fā)起登陸請求
  2. 登陸成功后,服務(wù)端會(huì )把登陸的用戶(hù)信息設置 cookie 中,返回給客戶(hù)端瀏覽器
  3. 客戶(hù)端瀏覽器接收到 cookie 請求后,會(huì )把 cookie 保存到本地(可能是內存,也可能是磁盤(pán),看具體使用情況而定)
  4. 以后再次訪(fǎng)問(wèn)該 web 應用時(shí),客戶(hù)端瀏覽器就會(huì )把本地的 cookie 帶上,這樣服務(wù)端就能根據 cookie 獲得用戶(hù)信息了

什么是session,有哪些實(shí)現session的機制?

session 是一種維持客戶(hù)端與服務(wù)器端會(huì )話(huà)的機制。但是與 cookie 把會(huì )話(huà)信息保存在客戶(hù)端本地不一樣,session 把會(huì )話(huà)保留在瀏覽器端。

我們同樣以登陸案例為例子講解 session 的使用過(guò)程:

  1. 首先用戶(hù)在客戶(hù)端瀏覽器發(fā)起登陸請求
  2. 登陸成功后,服務(wù)端會(huì )把用戶(hù)信息保存在服務(wù)端,并返回一個(gè)唯一的 session 標識給客戶(hù)端瀏覽器。
  3. 客戶(hù)端瀏覽器會(huì )把這個(gè)唯一的 session 標識保存在起來(lái)
  4. 以后再次訪(fǎng)問(wèn) web 應用時(shí),客戶(hù)端瀏覽器會(huì )把這個(gè)唯一的 session 標識帶上,這樣服務(wù)端就能根據這個(gè)唯一標識找到用戶(hù)信息。

看到這里可能會(huì )引起疑問(wèn):把唯一的 session 標識返回給客戶(hù)端瀏覽器,然后保存起來(lái),以后訪(fǎng)問(wèn)時(shí)帶上,這難道不是 cookie 嗎?

沒(méi)錯,session 只是一種會(huì )話(huà)機制,在許多 web 應用中,session 機制就是通過(guò) cookie 來(lái)實(shí)現的。也就是說(shuō)它只是使用了 cookie 的功能,并不是使用 cookie 完成會(huì )話(huà)保存。與 cookie 在保存客戶(hù)端保存會(huì )話(huà)的機制相反,session 通過(guò) cookie 的功能把會(huì )話(huà)信息保存到了服務(wù)端。

進(jìn)一步地說(shuō),session 是一種維持服務(wù)端與客戶(hù)端之間會(huì )話(huà)的機制,它可以有不同的實(shí)現。以現在比較流行的小程序為例,闡述一個(gè) session 的實(shí)現方案:

  1. 首先用戶(hù)登陸后,需要把用戶(hù)登陸信息保存在服務(wù)端,這里我們可以采用 redis。比如說(shuō)給用戶(hù)生成一個(gè) userToken,然后以 userId 作為鍵,以 userToken 作為值保存到 redis 中,并在返回時(shí)把 userToken 帶回給小程序端。
  2. 小程序端接收到 userToken 后把它緩存起來(lái),以后每當訪(fǎng)問(wèn)后端服務(wù)時(shí)就把 userToken 帶上。
  3. 在后續的服務(wù)中服務(wù)端只要拿著(zhù)小程序端帶來(lái)的 userToken 和 redis 中的 userToken 進(jìn)行比對,就能確定用戶(hù)的登陸狀態(tài)了。

session和cookie有什么區別

經(jīng)過(guò)上面兩道題的闡述,這道題就很清晰了

  1. cookie 是瀏覽器提供的一種緩存機制,它可以用于維持客戶(hù)端與服務(wù)端之間的會(huì )話(huà)
  2. session 指的是維持客戶(hù)端與服務(wù)端會(huì )話(huà)的一種機制,它可以通過(guò) cookie 實(shí)現,也可以通過(guò)別的手段實(shí)現。
  3. 如果用 cookie 實(shí)現會(huì )話(huà),那么會(huì )話(huà)會(huì )保存在客戶(hù)端瀏覽器中
  4. 而 session 機制提供的會(huì )話(huà)是保存在服務(wù)端的。

Other FAQ

從輸入網(wǎng)址到獲得頁(yè)面的過(guò)程

  1. 瀏覽器查詢(xún) DNS,獲取域名對應的IP地址:具體過(guò)程包括瀏覽器搜索自身的DNS緩存、搜索操作系統的DNS緩存、讀取本地的Host文件和向本地DNS服務(wù)器進(jìn)行查詢(xún)等。對于向本地DNS服務(wù)器進(jìn)行查詢(xún),如果要查詢(xún)的域名包含在本地配置區域資源中,則返回解析結果給客戶(hù)機,完成域名解析(此解析具有權威性);如果要查詢(xún)的域名不由本地DNS服務(wù)器區域解析,但該服務(wù)器已緩存了此網(wǎng)址映射關(guān)系,則調用這個(gè)IP地址映射,完成域名解析(此解析不具有權威性)。如果本地域名服務(wù)器并未緩存該網(wǎng)址映射關(guān)系,那么將根據其設置發(fā)起遞歸查詢(xún)或者迭代查詢(xún);
  2. 瀏覽器獲得域名對應的IP地址以后,瀏覽器向服務(wù)器請求建立鏈接,發(fā)起三次握手;
  3. TCP/IP鏈接建立起來(lái)后,瀏覽器向服務(wù)器發(fā)送HTTP請求;
  4. 服務(wù)器接收到這個(gè)請求,并根據路徑參數映射到特定的請求處理器進(jìn)行處理,并將處理結果及相應的視圖返回給瀏覽器;
  5. 瀏覽器解析并渲染視圖,若遇到對js文件、css文件及圖片等靜態(tài)資源的引用,則重復上述步驟并向服務(wù)器請求這些資源;
  6. 瀏覽器根據其請求到的資源、數據渲染頁(yè)面,最終向用戶(hù)呈現一個(gè)完整的頁(yè)面。

XSS 攻擊

XSS 是一種經(jīng)常出現在web應用中的計算機安全漏洞,與SQL注入一起成為web中最主流的攻擊方式。XSS是指惡意攻擊者利用網(wǎng)站沒(méi)有對用戶(hù)提交數據進(jìn)行轉義處理或者過(guò)濾不足的缺點(diǎn),進(jìn)而添加一些腳本代碼嵌入到web頁(yè)面中去,使別的用戶(hù)訪(fǎng)問(wèn)都會(huì )執行相應的嵌入代碼,從而盜取用戶(hù)資料、利用用戶(hù)身份進(jìn)行某種動(dòng)作或者對訪(fǎng)問(wèn)者進(jìn)行病毒侵害的一種攻擊方式。

IP地址的分類(lèi)

IP地址是指互聯(lián)網(wǎng)協(xié)議地址,是IP協(xié)議提供的一種統一的地址格式,它為互聯(lián)網(wǎng)上的每一個(gè)網(wǎng)絡(luò )和每一臺主機分配一個(gè)邏輯地址,以此來(lái)屏蔽物理地址的差異。IP地址編址方案將IP地址空間劃分為A、B、C、D、E五類(lèi),其中A、B、C是基本類(lèi),D、E類(lèi)作為多播和保留使用,為特殊地址。

每個(gè)IP地址包括兩個(gè)標識碼(ID),即網(wǎng)絡(luò )ID和主機ID。同一個(gè)物理網(wǎng)絡(luò )上的所有主機都使用同一個(gè)網(wǎng)絡(luò )ID,網(wǎng)絡(luò )上的一個(gè)主機(包括網(wǎng)絡(luò )上工作站,服務(wù)器和路由器等)有一個(gè)主機ID與其對應。A~E類(lèi)地址的特點(diǎn)如下:

A類(lèi)地址:以0開(kāi)頭,第一個(gè)字節范圍:0~127;

B類(lèi)地址:以10開(kāi)頭,第一個(gè)字節范圍:128~191;

C類(lèi)地址:以110開(kāi)頭,第一個(gè)字節范圍:192~223;

D類(lèi)地址:以1110開(kāi)頭,第一個(gè)字節范圍為224~239;

E類(lèi)地址:以1111開(kāi)頭,保留地址

. 瀏覽器解析并渲染視圖,若遇到對js文件、css文件及圖片等靜態(tài)資源的引用,則重復上述步驟并向服務(wù)器請求這些資源;
6. 瀏覽器根據其請求到的資源、數據渲染頁(yè)面,最終向用戶(hù)呈現一個(gè)完整的頁(yè)面。

XSS 攻擊

XSS 是一種經(jīng)常出現在web應用中的計算機安全漏洞,與SQL注入一起成為web中最主流的攻擊方式。XSS是指惡意攻擊者利用網(wǎng)站沒(méi)有對用戶(hù)提交數據進(jìn)行轉義處理或者過(guò)濾不足的缺點(diǎn),進(jìn)而添加一些腳本代碼嵌入到web頁(yè)面中去,使別的用戶(hù)訪(fǎng)問(wèn)都會(huì )執行相應的嵌入代碼,從而盜取用戶(hù)資料、利用用戶(hù)身份進(jìn)行某種動(dòng)作或者對訪(fǎng)問(wèn)者進(jìn)行病毒侵害的一種攻擊方式。

IP地址的分類(lèi)

IP地址是指互聯(lián)網(wǎng)協(xié)議地址,是IP協(xié)議提供的一種統一的地址格式,它為互聯(lián)網(wǎng)上的每一個(gè)網(wǎng)絡(luò )和每一臺主機分配一個(gè)邏輯地址,以此來(lái)屏蔽物理地址的差異。IP地址編址方案將IP地址空間劃分為A、B、C、D、E五類(lèi),其中A、B、C是基本類(lèi),D、E類(lèi)作為多播和保留使用,為特殊地址。

每個(gè)IP地址包括兩個(gè)標識碼(ID),即網(wǎng)絡(luò )ID和主機ID。同一個(gè)物理網(wǎng)絡(luò )上的所有主機都使用同一個(gè)網(wǎng)絡(luò )ID,網(wǎng)絡(luò )上的一個(gè)主機(包括網(wǎng)絡(luò )上工作站,服務(wù)器和路由器等)有一個(gè)主機ID與其對應。A~E類(lèi)地址的特點(diǎn)如下:

A類(lèi)地址:以0開(kāi)頭,第一個(gè)字節范圍:0~127;

B類(lèi)地址:以10開(kāi)頭,第一個(gè)字節范圍:128~191;

C類(lèi)地址:以110開(kāi)頭,第一個(gè)字節范圍:192~223;

D類(lèi)地址:以1110開(kāi)頭,第一個(gè)字節范圍為224~239;

E類(lèi)地址:以1111開(kāi)頭,保留地址

[外鏈圖片轉存中…(img-wAepEGXL-1593227236350)]

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
「計算機網(wǎng)絡(luò )」計算機網(wǎng)絡(luò )知識,圖解分析,清晰易懂
計算機基礎知識
這才是程序員計算機網(wǎng)絡(luò )知識的入門(mén)基礎!
TCP/IP協(xié)議?!狪P、TCP、UDP、HTTP協(xié)議詳解
計算機網(wǎng)絡(luò )常用知識總結!
OmniPeek 基礎之協(xié)議分析
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久