淺談網(wǎng)絡(luò)編程

引言

網(wǎng)絡(luò)學(xué)習(xí)的核心內(nèi)容就是網(wǎng)絡(luò)協(xié)議的學(xué)習(xí)

  • 網(wǎng)絡(luò)協(xié)議:網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或者說(shuō)是約定的集合
    因?yàn)?strong>不同用戶(hù)的數(shù)據(jù)終端可能采取的字符集是不同的徙垫,兩者需要進(jìn)行通信樊展,必須要在一定的標(biāo)準(zhǔn)上進(jìn)行
  • 目前 TCP/IP 協(xié)議已經(jīng)成為 Internet 中的「通用語(yǔ)言」
    下圖為不同計(jì)算機(jī)群 之間利用 TCP/IP 進(jìn)行通信的示意圖
Paste_Image.png

網(wǎng)絡(luò)層次的劃分

為了使不同計(jì)算機(jī)廠(chǎng)家生產(chǎn)的計(jì)算機(jī)能夠相互通信报亩,以便在更大的范圍內(nèi)建立計(jì)算機(jī)網(wǎng)絡(luò)

  • 國(guó)際標(biāo)準(zhǔn)化組織(ISO)在 1978 年提出了“開(kāi)放系統(tǒng)互聯(lián)參考模型”
    即著名的 OSI/RM 模型(Open System Interconnection/Reference Model)
  • 除了標(biāo)準(zhǔn)的 OSI 七層模型以外卷员,常見(jiàn)的網(wǎng)絡(luò)層次劃分還有 TCP/IP 四層協(xié)議 以及 TCP/IP 五層協(xié)議

各個(gè)模型對(duì)比圖

Paste_Image.png

一、應(yīng)用層「Application Layer」

簡(jiǎn)介

  • 基本數(shù)據(jù)單位:報(bào)文
  • 主要協(xié)議
    FTP(文件傳送協(xié)議)居砖、Telnet(遠(yuǎn)程登錄協(xié)議)虹脯、DNS(域名解析協(xié)議)
    SMTP(郵件傳送協(xié)議)、POP3協(xié)議(郵局協(xié)議)奏候、HTTP協(xié)議(Hyper Text Transfer Protocol)

具體分類(lèi)

  • 會(huì)話(huà)層
    管理主機(jī)之間的會(huì)話(huà)進(jìn)程循集,即負(fù)責(zé) 建立、管理鼻由、終止進(jìn)程之間的會(huì)話(huà)
    通過(guò)在數(shù)據(jù)中插入校驗(yàn)點(diǎn)來(lái)實(shí)現(xiàn)數(shù)據(jù)的同步
  • 表示層
    對(duì)上層數(shù)據(jù)或信息進(jìn)行變換以保證一個(gè)主機(jī)應(yīng)用層信息可以被另一個(gè)主機(jī)的應(yīng)用程序理解
    表示層的數(shù)據(jù)轉(zhuǎn)換包括:數(shù)據(jù)的加密暇榴、壓縮、格式轉(zhuǎn)換等
  • 應(yīng)用層
    為操作系統(tǒng) 或 網(wǎng)絡(luò)應(yīng)用程序 提供 訪(fǎng)問(wèn)網(wǎng)絡(luò)服務(wù)的接口

1. HTTP「Hypertext Transfer Protocol」超文本傳輸協(xié)議

作用:規(guī)定客戶(hù)端和服務(wù)器之間的數(shù)據(jù)傳輸格式
特點(diǎn):

  • 簡(jiǎn)單快速:HTTP協(xié)議簡(jiǎn)單蕉世,HTTP服務(wù)器程序小蔼紧,通信速度快
  • 允許傳輸各種各樣的數(shù)據(jù)
  • HTTP 0.9 和 1.0使用 非持續(xù)連接,限制每次連接只處理一個(gè)請(qǐng)求狠轻,請(qǐng)求做出響應(yīng)后奸例,馬上斷開(kāi),節(jié)省傳輸時(shí)間

1)發(fā)送請(qǐng)求的方法「不同的方法對(duì)資源有不同的操作方式」

  • PUT:增,給服務(wù)器添加資源
  • DELETE:刪查吊,給服務(wù)器刪除資源
  • POST:改谐区,修改服務(wù)器資源
  • GET:查,查找服務(wù)器資源

2)請(qǐng)求參數(shù)

傳遞給服務(wù)器的具體數(shù)據(jù)逻卖,比如:帳號(hào)宋列、密碼
瀏覽器和服務(wù)器對(duì)URL的長(zhǎng)度有限制,一般不超過(guò) 1K

GET請(qǐng)求參數(shù)

  • 格式:URL +?+ 參數(shù)1=值1 +&+ 參數(shù)2=值2「參數(shù)間用 & 隔開(kāi)」
    多值參數(shù)评也,格式:URL +?+ 參數(shù)1=值1 +&+ 參數(shù)1=值2
  • 安全性差「直接將請(qǐng)求暴露在 URL 里」
    GET請(qǐng)求的URL一般會(huì)記錄在服務(wù)器的訪(fǎng)問(wèn)日志里炼杖,服務(wù)器的訪(fǎng)問(wèn)日志是黑客攻擊的重點(diǎn)對(duì)象之一
  • 僅僅是查詢(xún)數(shù)據(jù)使用

POST請(qǐng)求參數(shù)

  • 服務(wù)器參數(shù)全部放在 請(qǐng)求體
  • 理論上,沒(méi)有大小限制盗迟。實(shí)際上坤邪,取決于服務(wù)器的處理能力
  • 安全性好 即便是 POST也要加密后提交
  • 增、刪罚缕、改服務(wù)器數(shù)據(jù)使用

3)HTTP 通信過(guò)程 - 請(qǐng)求

I. 請(qǐng)求頭:對(duì)客戶(hù)端環(huán)境艇纺,請(qǐng)求信息的描述

  • Host: 120.25.226.186:32812 格式:服務(wù)器主機(jī)地址: 端口
  • GET/minion.png HTTP/1.1 格式:請(qǐng)求方法/請(qǐng)求資源路徑 HTTP/協(xié)議版本
  • User-Agent: Mozilla/5.0 客戶(hù)端的類(lèi)型,客戶(hù)端的軟件環(huán)境
  • Accept: text/html, */* 客戶(hù)端所能接收的數(shù)據(jù)類(lèi)型
  • Accept-Language: zh-cn 客戶(hù)端的語(yǔ)言環(huán)境
  • Accept-Encoding: gzip 客戶(hù)端支持的數(shù)據(jù)壓縮格式

II. 請(qǐng)求體:客戶(hù)端發(fā)給服務(wù)器的具體數(shù)據(jù)邮弹,比如:文件數(shù)據(jù)「POST才會(huì)有」

4)HTTP 通信過(guò)程 - 響應(yīng)

I. 響應(yīng)頭:服務(wù)器的描述黔衡,返回?cái)?shù)據(jù)的描述

  • HTTP/1.1 200 OK 格式:HTTP協(xié)議版本 狀態(tài)碼 狀態(tài)名稱(chēng)
  • Server: Apache-Coyote/1.1 服務(wù)器的類(lèi)型
  • Content-Type: image/jpeg 返回?cái)?shù)據(jù)的類(lèi)型
  • Content-Length: 56811 返回?cái)?shù)據(jù)的長(zhǎng)度
  • Date: Mon, 23 Jun 2014 12:54:52 GMT 響應(yīng)的時(shí)間

II. 響應(yīng)體:服務(wù)器返回客戶(hù)端的具體數(shù)據(jù),比如:文件數(shù)據(jù)
III. 常見(jiàn)的響應(yīng)狀態(tài)碼

狀態(tài)碼 英文名稱(chēng) 中文描述
200 OK 請(qǐng)求成功
400 Bad Request 客戶(hù)端請(qǐng)求語(yǔ)法錯(cuò)誤肠鲫,服務(wù)器無(wú)法解析
404 NotFound 根據(jù)客戶(hù)端的請(qǐng)求员帮,找不到資源
500 Internal Server Error 服務(wù)器內(nèi)部錯(cuò)誤無(wú)法完成請(qǐng)求

2. DNS 「Domain Name System」域名系統(tǒng)協(xié)議

簡(jiǎn)介

  • DNS 就是進(jìn)行域名解析的服務(wù)器

  • DNS 命名用于 Internet 等 TCP/IP 網(wǎng)絡(luò)中或粮,通過(guò)用戶(hù)友好的名稱(chēng)查找計(jì)算機(jī)和服務(wù)

  • 用于命名导饲、組織到域?qū)哟谓Y(jié)構(gòu)中的計(jì)算機(jī)和網(wǎng)絡(luò)服務(wù),可以簡(jiǎn)單地理解為 將 URL 轉(zhuǎn)換為 IP 地址

域名:是由圓點(diǎn)分開(kāi)一串單詞或縮寫(xiě)組成的氯材,域名與 IP 地址之間是一一對(duì)應(yīng)的

3. DHCP「Dynamic Host Configuration Protocol」 動(dòng)態(tài)主機(jī)設(shè)置協(xié)議

簡(jiǎn)介

  • 局域網(wǎng)的網(wǎng)絡(luò)協(xié)議渣锦,使用 UDP 協(xié)議工作
  • 主要有兩個(gè)用途:
    給內(nèi)部網(wǎng)絡(luò)或網(wǎng)絡(luò)服務(wù)供應(yīng)商自動(dòng)分配 IP 地址
    給用戶(hù)或者內(nèi)部網(wǎng)絡(luò)管理員作為對(duì)所有計(jì)算機(jī)作中央管理的手段

4. URL「Uniform Resource Locator」統(tǒng)一資源定位符

一個(gè) URL 對(duì)應(yīng)網(wǎng)上一個(gè)資源

  • 客戶(hù)端「Client」移動(dòng)應(yīng)用(iOS、android等應(yīng)用)
  • 服務(wù)器「Server」為客戶(hù)端提供服務(wù)氢哮、提供數(shù)據(jù)袋毙、提供資源的機(jī)器
  • 請(qǐng)求「Request」客戶(hù)端向服務(wù)器索取數(shù)據(jù)的一種行為
  • 響應(yīng)「Response」服務(wù)器對(duì)客戶(hù)端的請(qǐng)求做出的反應(yīng),一般指返回?cái)?shù)據(jù)給客戶(hù)端

基本格式:協(xié)議: // 主機(jī)地址 / 路徑

  1. 協(xié)議:資源的 查找/傳輸 方式

    • HTTP 超文本傳輸協(xié)議冗尤,訪(fǎng)問(wèn)的是遠(yuǎn)程的網(wǎng)絡(luò)資源听盖。格式:http://
    • file 訪(fǎng)問(wèn)本地計(jì)算機(jī)上的資源。格式:file:// 不用加主機(jī)地址
    • mailto 訪(fǎng)問(wèn)電子郵件裂七。格式:mailto:
    • FTP 訪(fǎng)問(wèn)的是共享主機(jī)的文件資源皆看。格式:ftp://
  2. 主機(jī)地址:存放資源的主機(jī)「服務(wù)器」的 IP地址「域名」

  3. 路徑:資源在主機(jī)「服務(wù)器」中的 具體位置

二、傳輸層「Transport Layer」

簡(jiǎn)介

  • 基本數(shù)據(jù)單位:報(bào)文 或 段
  • 主要協(xié)議:TCP協(xié)議「?jìng)鬏斂刂茀f(xié)議」背零、UDP 協(xié)議「用戶(hù)數(shù)據(jù)報(bào)協(xié)議」
  • 重要設(shè)備:網(wǎng)關(guān)

功能

  • 建立腰吟、維護(hù)和取消傳輸連接

  • 將數(shù)據(jù)可靠地傳送到相應(yīng)的端口

  • 將上層數(shù)據(jù)分段,并提供端到端的可靠的或不可靠的傳輸 以及 端到端的 差錯(cuò)控制 和 流量控制問(wèn)題

端到端:連接是兩個(gè)終端主機(jī)之間的連接徙瓶,這兩個(gè)終端系統(tǒng)的連接中要經(jīng)過(guò)很多個(gè)設(shè)備「路由器」
點(diǎn)對(duì)點(diǎn):連接是通信雙方直接通過(guò)電纜進(jìn)行的連接毛雇,中間沒(méi)有經(jīng)過(guò)其他任何設(shè)備

1. Socket「套接字」

簡(jiǎn)介

  • 網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換嫉称,這個(gè)連接的 一端 稱(chēng)為一個(gè) Socket

通過(guò) Socket 這種約定,一臺(tái)計(jì)算機(jī)可以接收其他計(jì)算機(jī)的數(shù)據(jù)灵疮,也可以向其他計(jì)算機(jī)發(fā)送數(shù)據(jù)

  • 通信的兩端都是 Socket
  • 網(wǎng)絡(luò)通信其實(shí)就是 Socket 間的通信「數(shù)據(jù)在兩個(gè) Socket 間通過(guò) IO 傳輸」
  • Socket 是 應(yīng)用層 和 傳輸層 之間的橋梁

HTTP 與 Socket 的區(qū)別

  1. HTTP 是基于 Socket 的實(shí)現(xiàn)织阅;HTTP 應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)
  2. HTTP 傳輸?shù)臄?shù)據(jù)格式是規(guī)定好的震捣,Socket 實(shí)現(xiàn)數(shù)據(jù)傳輸是最原始蒲稳,Socket 實(shí)現(xiàn)的數(shù)據(jù)傳輸格式可自定義
  3. Socket 是對(duì) TCP/IP 協(xié)議的封裝,Socket 本身并不是協(xié)議伍派,而是一個(gè)調(diào)用接口「API」
    通過(guò) Socket 我們才能使用 TCP/IP 協(xié)議

I. 網(wǎng)絡(luò)通信的要素

首先江耀,定位到要通信的程序:使用 IP地址、端口诉植;其次祥国,確定如何傳輸數(shù)據(jù):使用 協(xié)議、數(shù)據(jù)傳輸方式

有可能多種協(xié)議使用同一種數(shù)據(jù)傳輸方式晾腔,所以在 Socket 編程中舌稀,需要同時(shí)指明數(shù)據(jù)傳輸方式和協(xié)議

  • IP 地址「網(wǎng)絡(luò)主機(jī)設(shè)備的 唯一標(biāo)識(shí)」
  • Port,端口號(hào)「定位程序」

作用:表示進(jìn)程的邏輯地址灼擂,是不同進(jìn)程的標(biāo)識(shí)
有效端口:0~65535壁查,其中 0~1024系統(tǒng)使用或者保留端口,開(kāi)發(fā)中建議使用 1024 以上 的端口

  • Protocol剔应,傳輸協(xié)議「網(wǎng)絡(luò)通訊的約定」

簡(jiǎn)介:協(xié)議僅僅是一種規(guī)范睡腿,必須由計(jì)算機(jī)軟件來(lái)實(shí)現(xiàn),由計(jì)算機(jī)組織制定峻贮。例如席怪,如何建立連接,如何相互識(shí)別等
特點(diǎn):通信的雙方必須使用同一協(xié)議才能通信
常見(jiàn)協(xié)議:TCP纤控、UDP挂捻、IP

  • Socket 類(lèi)型,數(shù)據(jù)傳輸方式
    1. SOCK_STREAM 流式 Socket船万,表示面向連接的數(shù)據(jù)傳輸方式
      數(shù)據(jù)可以準(zhǔn)確無(wú)誤地到達(dá)另一臺(tái)計(jì)算機(jī)
      如果損壞或丟失刻撒,可以重新發(fā)送,但效率相對(duì)較慢
      常見(jiàn)的 http 協(xié)議就使用 SOCK_STREAM 傳輸數(shù)據(jù)耿导,因?yàn)橐_保數(shù)據(jù)的正確性声怔,否則網(wǎng)頁(yè)不能正常解析。
    2. SOCK_DGRAM 數(shù)據(jù)報(bào)式 Socket碎节,表示無(wú)連接的數(shù)據(jù)傳輸方式
      計(jì)算機(jī)只管傳輸數(shù)據(jù)捧搞,不作數(shù)據(jù)校驗(yàn)
      如果數(shù)據(jù)在傳輸中損壞,或者沒(méi)有到達(dá)另一臺(tái)計(jì)算機(jī),無(wú)法補(bǔ)救胎撇,無(wú)法重傳
      因?yàn)?SOCK_DGRAM 所做的校驗(yàn)工作少介粘,所以效率比 SOCK_STREAM 高

注意:SOCK_DGRAM 沒(méi)有想象中的糟糕,不會(huì)頻繁的丟失數(shù)據(jù)晚树,數(shù)據(jù)錯(cuò)誤只是小概率事件

II. Socket 的連接過(guò)程

長(zhǎng)連接:指在一個(gè)連接上可以連續(xù)發(fā)送多個(gè)數(shù)據(jù)包姻采,在連接保持期間,如果沒(méi)有數(shù)據(jù)包發(fā)送爵憎,需要雙方發(fā)鏈路檢測(cè)包
短連接:指通訊雙方有數(shù)據(jù)交互時(shí)慨亲,就建立一個(gè)連接,數(shù)據(jù)發(fā)送完成后宝鼓,則斷開(kāi)此連接刑棵,即每次連接只完成一項(xiàng)業(yè)務(wù)的發(fā)送

  1. 服務(wù)器監(jiān)聽(tīng)
    服務(wù)器端 Socket 并不定位具體的客戶(hù)端 Socket,而是處于等待連接的狀態(tài)愚铡,實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)
  2. 客戶(hù)端請(qǐng)求
    由客戶(hù)端的 Socket 提出連接請(qǐng)求蛉签,要連接的目標(biāo)是服務(wù)器端的 Socket
    為此,客戶(hù)端的 Socket 必須首先描述它要連接的服務(wù)器的 Socket
    首先沥寥,指出服務(wù)器端 Socket 的 IP 和 Port Number
    然后碍舍,向服務(wù)器端 Socket 提出連接請(qǐng)求
  3. 連接確認(rèn)
    是指當(dāng)服務(wù)器端 Socket 監(jiān)聽(tīng)到或者說(shuō)接收到客戶(hù)端 Socket 的連接請(qǐng)求
    它就響應(yīng)客戶(hù)端 Socket 的請(qǐng)求,建立一個(gè)新的線(xiàn)程邑雅,把服務(wù)器端 Socket 的描述發(fā)給客戶(hù)端片橡,一旦客戶(hù)端確認(rèn)了此描述,連接就建立好了
    連接后淮野,服務(wù)器端 Socket 繼續(xù)處于監(jiān)聽(tīng)狀態(tài)捧书,繼續(xù)接收其他客戶(hù)端套接字的連接請(qǐng)求

Socket 連接圖解

Paste_Image.png

2. TCP「Transmission Control Protocol」傳輸控制協(xié)議

簡(jiǎn)介

  • 面向連接的通信協(xié)議,通過(guò)三次握手建立連接录煤,通訊完成時(shí)要拆除連接鳄厌,四次揮手斷開(kāi)連接
  • TCP 負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯?wèn)題,一有問(wèn)題就發(fā)出信號(hào)妈踊,要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?/li>
  • 使用 TCP 的協(xié)議
    FTP(文件傳輸協(xié)議)泪漂、Telnet(遠(yuǎn)程登錄協(xié)議)廊营、SMTP(簡(jiǎn)單郵件傳輸協(xié)議)
    POP3(和 SMTP 相對(duì),用于接收郵件)萝勤、HTTP 協(xié)議等

特點(diǎn)

  • 每條傳輸連接只能有兩個(gè)端點(diǎn)露筒,只能進(jìn)行點(diǎn)對(duì)點(diǎn)的連接,不支持多播和廣播的傳輸方式
  • 連接中可以進(jìn)行大數(shù)據(jù)傳輸「數(shù)據(jù)不受限制」
  • 通信雙方可以同時(shí)發(fā)數(shù)據(jù)和接收數(shù)據(jù)
  • 每次發(fā)送請(qǐng)求使用 TCP 協(xié)議
    必須建立連接「效率會(huì)稍低」敌卓,是可靠協(xié)議慎式,送達(dá)安全

TCP 報(bào)文首部格式

  • 序號(hào):Seq「Sequence Number」序號(hào)占32位,用來(lái)標(biāo)識(shí)從計(jì)算機(jī) A 發(fā)送到計(jì)算機(jī) B 的數(shù)據(jù)包的序號(hào),計(jì)算機(jī)發(fā)送數(shù)據(jù)時(shí)對(duì)此進(jìn)行標(biāo)記
  • 確認(rèn)號(hào):Ack 「Acknowledge Number」確認(rèn)號(hào)占32位瘪吏,客戶(hù)端和服務(wù)器端都可以發(fā)送癣防,`Ack = Seq + 1 說(shuō)明收到數(shù)據(jù)包
  • 標(biāo)志位:每個(gè)標(biāo)志位占用 1 Bit
    URG:緊急指針「urgent pointer」有效
    ACK:確認(rèn)序號(hào)有效
    PSH:接收方應(yīng)該盡快將這個(gè)報(bào)文交給應(yīng)用層
    RST:重置連接
    SYN:Synchronous,建立一個(gè)新的同步連接
    FIN:Finish掌眠,斷開(kāi)一個(gè)連接
Paste_Image.png

I. 建立連接-三次握手

建立連接非常重要蕾盯,是數(shù)據(jù)正確傳輸?shù)那疤?/p>

模擬步驟

  • [Shake 1] 套接字A:“你好,套接字 B蓝丙,我這里有數(shù)據(jù)要傳送給你级遭,建立連接吧∶斐荆”
  • [Shake 2] 套接字B:“好的挫鸽,我這邊已準(zhǔn)備就緒∨父”
  • [Shake 3] 套接字A:“謝謝你受理我的請(qǐng)求掠兄。”

具體步驟

  • CLOSED 狀態(tài):沒(méi)有建立連接锌雀,客戶(hù)端已經(jīng)調(diào)用 socket() 函數(shù)創(chuàng)建了套接字

  • LISTEN 狀態(tài):服務(wù)器端調(diào)用 listen() 函數(shù)后蚂夕,開(kāi)始監(jiān)聽(tīng)客戶(hù)端請(qǐng)求
    服務(wù)器沒(méi)有回傳 ACK 包,客戶(hù)端會(huì)重新發(fā)送腋逆,直到服務(wù)器回傳 ACK 包

  • SYN-SEND 狀態(tài):向服務(wù)器端發(fā)送過(guò)了數(shù)據(jù)包

  • SYN-RECV 狀態(tài):服務(wù)器已經(jīng)將數(shù)據(jù)包發(fā)出

  • ESTABLISED 狀態(tài):連接已經(jīng)成功建立

Paste_Image.png

必要性

  • 在「兩次握手」的情形下婿牍,假設(shè) Client 想跟 Server 建立連接,但是卻因?yàn)橹型具B接請(qǐng)求的數(shù)據(jù)報(bào)丟失了惩歉,故Client端不得不重新發(fā)送一遍等脂,這個(gè)時(shí)候 Server 端僅收到一個(gè)連接請(qǐng)求,因此可以正常的建立連接
  • 有時(shí)候 Client 端重新發(fā)送請(qǐng)求不是因?yàn)閿?shù)據(jù)報(bào)丟失了撑蚌,而是有可能數(shù)據(jù)傳輸過(guò)程因?yàn)榫W(wǎng)絡(luò)并發(fā)量很大在某結(jié)點(diǎn)被阻塞了上遥,這種情形下Server端將先后收到 2 次請(qǐng)求,并持續(xù)等待兩個(gè) Client 請(qǐng)求向他發(fā)送數(shù)據(jù)...
  • 問(wèn)題就在這里争涌,Cient端實(shí)際上只有一次請(qǐng)求粉楚,而 Server 端卻有 2 個(gè)響應(yīng),極端的情況可能由于 Client 端多次重新發(fā)送請(qǐng)求數(shù)據(jù)而導(dǎo)致 Server端最后建立了 N 多個(gè)響應(yīng)在等待亮垫,因而造成極大的資源浪費(fèi)模软!

II. 斷開(kāi)連接-四次揮手

釋放不再使用的資源
不能正常斷開(kāi),會(huì)造成數(shù)據(jù)傳輸錯(cuò)誤饮潦,套接字不能關(guān)閉燃异,持續(xù)占用資源,如果并發(fā)量高继蜡,服務(wù)器壓力堪憂(yōu)

模擬步驟

  • [Shake 1] 套接字A:“任務(wù)處理完畢回俐,我希望斷開(kāi)連接逛腿。”
  • [Shake 2] 套接字B:“哦仅颇,是嗎单默?請(qǐng)稍等,我準(zhǔn)備一下灵莲〉癜迹”
  • 等待片刻后……
  • [Shake 3] 套接字B:“我準(zhǔn)備好了,可以斷開(kāi)連接了政冻∶兜郑”
  • [Shake 4] 套接字A:“好的,謝謝合作明场∑。”

具體步驟

  • FIN 狀態(tài):Finish,表示斷開(kāi)連接
  • TIME_WAIT 狀態(tài):TIME_WAIT 要等待 2MSL 才會(huì)進(jìn)入 CLOSED 狀態(tài)苦锨,如果 2MSL 后還未收到服務(wù)器重傳的 FIN 包逼泣,就說(shuō)明服務(wù)器已經(jīng)收到了 ACK 包
    客戶(hù)端最后一次發(fā)送 ACK 包時(shí),若服務(wù)器收不到舟舒,服務(wù)器會(huì)再次發(fā)送 FIN 包
    如果這時(shí)客戶(hù)端完全關(guān)閉了連接拉庶,那么服務(wù)器無(wú)論如何也收不到 ACK 包了,所以客戶(hù)端需要等待片刻秃励、確認(rèn)后氏仗,才能進(jìn)入 CLOSED 狀態(tài)

報(bào)文最大生存時(shí)間(MSL,Maximum Segment Lifetime)
數(shù)據(jù)包在網(wǎng)絡(luò)中是有生存時(shí)間的夺鲜,超過(guò)這個(gè)時(shí)間還未到達(dá)目標(biāo)主機(jī)就會(huì)被丟棄皆尔,并通知源主機(jī)

  • CLOSED 狀態(tài):斷開(kāi)連接狀態(tài)
Paste_Image.png

3. UDP「User Datagram Protocol」用戶(hù)數(shù)據(jù)協(xié)議

簡(jiǎn)介

  • 將數(shù)據(jù)及源和目的封裝成數(shù)據(jù)包中,不需要建立連接
  • 使用 UDP協(xié)議包括:TFTP(簡(jiǎn)單文件傳輸協(xié)議)币励、SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)慷蠕、DNS(域名解析協(xié)議)、NFS食呻、BOOTP

特點(diǎn)

  • 每個(gè)數(shù)據(jù)報(bào)的大小限制在 64K 之內(nèi)
  • 支持單播流炕,組播,廣播等多種通信方式
  • 每次發(fā)送請(qǐng)求使用 UDP 協(xié)議
    無(wú)需建立連接搁进,是不可靠協(xié)議「效率高」

三浪感、網(wǎng)絡(luò)層「Network Layer」

簡(jiǎn)介

  • 基本數(shù)據(jù)單位:IP 數(shù)據(jù)報(bào)

  • 重要的設(shè)備:路由器

  • 為數(shù)據(jù)包選擇路由
    作用

  • 路徑選擇敏沉、路由選擇擎值、邏輯尋址

  • 實(shí)現(xiàn)兩個(gè)主機(jī)系統(tǒng)之間的數(shù)據(jù)透明傳送

  • 具體功能:尋址矫付、路由選擇、建立連接莱革、保持和終止連接等

  • 網(wǎng)絡(luò)層負(fù)責(zé)對(duì)子網(wǎng)間的數(shù)據(jù)包進(jìn)行路由選擇

  • 網(wǎng)絡(luò)可以實(shí)現(xiàn) 擁塞控制峻堰、網(wǎng)際互連 等功能

包含的主要協(xié)議

  • IP 協(xié)議(Internet Protocol,因特網(wǎng)互聯(lián)協(xié)議)
    簡(jiǎn)介:僅僅提供不可靠盅视、無(wú)連接的傳送服務(wù)「TCP/IP 的核心協(xié)議」
    功能:無(wú)連接數(shù)據(jù)報(bào)傳輸捐名、數(shù)據(jù)報(bào)路由選擇和差錯(cuò)控制

  • ICMP 協(xié)議(Internet Control Message Protocol,因特網(wǎng)控制報(bào)文協(xié)議)

  • ARP 協(xié)議(Address Resolution Protocol闹击,地址解析協(xié)議)

  • RARP 協(xié)議(Reverse Address Resolution Protocol镶蹋,逆地址解析協(xié)議)

1. IP 地址

簡(jiǎn)介:一共 4 個(gè)字節(jié)的長(zhǎng)度,32 位

1)網(wǎng)絡(luò)地址

  • 構(gòu)成:網(wǎng)絡(luò)號(hào)(包括子網(wǎng)號(hào))+ 主機(jī)號(hào)
  • 網(wǎng)絡(luò)地址的主機(jī)號(hào)為全 0赏半,網(wǎng)絡(luò)地址代表著整個(gè)網(wǎng)絡(luò)

2)廣播地址

  • 通常稱(chēng)為直接廣播地址贺归,是為了區(qū)分受限廣播地址
  • 廣播地址的主機(jī)號(hào)為全 1
  • 向 某個(gè)網(wǎng)絡(luò)的廣播地址發(fā)送消息,該網(wǎng)絡(luò)內(nèi)的所有主機(jī)都能收到該廣播消息

3)IPv4 地址分類(lèi)

A断箫、B拂酣、C 類(lèi)私有地址

私有地址「private address」也叫專(zhuān)用地址,它們不會(huì)在全球使用仲义,只具有本地意義

  • A 類(lèi)私有地址:10.0.0.0/8婶熬,范圍是:10.0.0.0~10.255.255.255
  • B 類(lèi)私有地址:172.16.0.0/12,范圍是:172.16.0.0~172.31.255.255
  • C 類(lèi)私有地址:192.168.0.0/16埃撵,范圍是:192.168.0.0~192.168.255.255

地址的分類(lèi)

  • A 類(lèi)地址以 0 開(kāi)頭赵颅,前 1 個(gè)字節(jié)作為網(wǎng)絡(luò)號(hào),地址范圍為:0.0.0.0~127.255.255.255
  • B 類(lèi)地址以 10 開(kāi)頭暂刘,前 2 個(gè)字節(jié)作為網(wǎng)絡(luò)號(hào)饺谬,地址范圍是:128.0.0.0~191.255.255.255
  • C 類(lèi)地址以 110 開(kāi)頭,前 3 個(gè)字節(jié)作為網(wǎng)絡(luò)號(hào)鸳惯,地址范圍是:192.0.0.0~223.255.255.255
  • D 類(lèi)地址以 1110 開(kāi)頭商蕴,地址范圍是 224.0.0.0~239.255.255.255,D 類(lèi)地址作為組播地址「一對(duì)多的通信」
  • E 類(lèi)地址以 1111 開(kāi)頭芝发,地址范圍是 240.0.0.0~255.255.255.255绪商,E 類(lèi)地址為保留地址,供以后使用

注:只有A辅鲸、B格郁、C 有網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)之分,D 類(lèi)地址和 E 類(lèi)地址沒(méi)有劃分網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)

4)特殊的 IP 地址解釋

本地網(wǎng)絡(luò)

  • 全 1 的 IP 地址:255.255.255.255「受限的廣播地址」
  • 受限廣播地址只能用于本地網(wǎng)絡(luò)独悴,路由器不會(huì)轉(zhuǎn)發(fā)以受限廣播地址為目的地址的分組
  • 一般廣播地址既可在本地廣播例书,也可跨網(wǎng)段廣播

注:一般的廣播地址「直接廣播地址」能夠通過(guò)某些路由器,而受限的廣播地址不能通過(guò)路由器

廣播地址

  • 全 0 的 IP 地址:0.0.0.0
  • 常用于尋找自己的 IP 地址
  • 例如在我們的 RARP刻炒,BOOTP 和 DHCP 協(xié)議中决采,若某個(gè)未知 IP 地址的無(wú)盤(pán)機(jī)想要知道自己的IP地址,它就以 255.255.255.255 為目的地址坟奥,向本地范圍(具體而言是被各個(gè)路由器屏蔽的范圍內(nèi))的服務(wù)器發(fā)送 IP 請(qǐng)求分組

127.0.0.0/8 回環(huán)地址

  • 表示本機(jī)的地址树瞭,常用于對(duì)本機(jī)的測(cè)試拇厢,用的最多的是 127.0.0.1
  • /8:表示 從前到后有 8 個(gè) 1 的網(wǎng)絡(luò)掩碼,即子網(wǎng)掩碼為 255.255.0.0

5)網(wǎng)絡(luò)劃分

簡(jiǎn)介

  • 網(wǎng)絡(luò)地址 = IP 地址 & 子網(wǎng)掩碼
  • 通過(guò)子網(wǎng)掩碼來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)劃分「1 代表該位是網(wǎng)絡(luò)位晒喷, 0 代表該位是主機(jī)位」
  • 將原來(lái)的主機(jī)號(hào)借前幾位做子網(wǎng)號(hào)孝偎,主機(jī)號(hào)相應(yīng)的減少了,網(wǎng)絡(luò)號(hào)不變
    不劃分子網(wǎng):IP 地址 = 網(wǎng)絡(luò)號(hào) + 主機(jī)號(hào)
    劃分子網(wǎng):IP 地址 = 網(wǎng)絡(luò)號(hào) + 子網(wǎng)號(hào) + 主機(jī)號(hào)

注意:全為 01 的 IP 地址是不能被計(jì)算子網(wǎng)掩碼內(nèi)的

利用子網(wǎng)數(shù)來(lái)計(jì)算子網(wǎng)掩碼

在求子網(wǎng)掩碼之前凉敲,先搞清楚要?jiǎng)澐值淖泳W(wǎng)數(shù)目衣盾,以及每個(gè)子網(wǎng)內(nèi)的所需主機(jī)數(shù)目

  1. 將子網(wǎng)數(shù)目轉(zhuǎn)化為二進(jìn)制來(lái)表示;

如欲將B類(lèi)IP地址 168.195.0.0 劃分成 27 個(gè)子網(wǎng):27=11011

  1. 取得該二進(jìn)制的位數(shù),設(shè)為 N

該二進(jìn)制為五位數(shù)爷抓,N = 5

  1. 取得該 IP 地址的類(lèi)子網(wǎng)掩碼势决,將其主機(jī)地址部分的的前 N 位設(shè)為 1

將 B 類(lèi)地址的子網(wǎng)掩碼 255.255.0.0 的主機(jī)地址從前向后前 5 位設(shè)為 1,得到子網(wǎng)掩碼 255.255.248.0

利用主機(jī)數(shù)來(lái)計(jì)算子網(wǎng)掩碼

如欲將 B 類(lèi) IP 地址 168.195.0.0 劃分成若干子網(wǎng)废赞,每個(gè)子網(wǎng)內(nèi)有主機(jī) 700 臺(tái):

  1. 將主機(jī)數(shù)目轉(zhuǎn)化為二進(jìn)制來(lái)表示

700=1010111100

  1. 如果主機(jī)數(shù)小于或等于 254(注意去掉保留的兩個(gè) IP 地址)徽龟,則取得該主機(jī)的二進(jìn)制位數(shù),為 N唉地,這里肯定 N<8

如果大于 254据悔,則 N>8,這就是說(shuō)主機(jī)地址將占據(jù)不止 8 位耘沼,該二進(jìn)制為十位數(shù)极颓,N=10

  1. 使用 255.255.255.255 來(lái)將該類(lèi) IP 地址的主機(jī)地址位數(shù)全部置 1,然后從后向前的將 N 位全部置為 0

將該 B 類(lèi)地址的子網(wǎng)掩碼 255.255.0.0 的主機(jī)地址全部置 1群嗤,得到 255.255.255.255菠隆,然后再?gòu)暮笙蚯皩⒑?10位置 0
即為:11111111.11111111.11111100.00000000,即 255.255.252.0
這就是主機(jī)為 700 臺(tái)的 B 類(lèi) IP 地址 168.195.0.0 的子網(wǎng)掩碼

根據(jù)每個(gè)網(wǎng)絡(luò)的主機(jī)數(shù)量進(jìn)行子網(wǎng)地址的規(guī)劃和計(jì)算子網(wǎng)掩碼

  • 比如一個(gè)子網(wǎng)有 10 臺(tái)主機(jī)狂秘,那么對(duì)于這個(gè)子網(wǎng)需要的 IP 地址是
    10+1+1+1=13
  • 注意:加的第一個(gè) 1 是指這個(gè)網(wǎng)絡(luò)連接時(shí)所需的網(wǎng)關(guān)地址骇径,接著的兩個(gè) 1 分別是指網(wǎng)絡(luò)地址和廣播地址

2. ARP/RARP 地址解析協(xié)議

ARP「Address Resolution Protocol」簡(jiǎn)介

  • 根據(jù) IP 地址獲取物理地址的一個(gè) TCP/IP 協(xié)議
  • 可用于查詢(xún)本機(jī) ARP 緩存中 IP 地址和 MAC 地址的對(duì)應(yīng)關(guān)系、添加或刪除靜態(tài)對(duì)應(yīng)關(guān)系等

ARP 欺騙

  • 地址解析協(xié)議是建立在網(wǎng)絡(luò)中各個(gè)主機(jī)互相信任的基礎(chǔ)上的
    主機(jī)可以自主發(fā)送 ARP 應(yīng)答消息者春,其他主機(jī)收到應(yīng)答報(bào)文時(shí)不會(huì)檢測(cè)該報(bào)文的真實(shí)性就會(huì)將其記入本機(jī) ARP 緩存
  • 攻擊者可以向某一主機(jī)發(fā)送偽 ARP 應(yīng)答報(bào)文破衔,使其發(fā)送的信息無(wú)法到達(dá)預(yù)期的主機(jī)或到達(dá)錯(cuò)誤的主機(jī)

ARP 工作流程

IP 數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地址)

Paste_Image.png

RARP「Reverse Address Resolution Protocol」簡(jiǎn)介

  • 將局域網(wǎng)中某個(gè)主機(jī)的物理地址轉(zhuǎn)換為 IP 地址

比如:局域網(wǎng)中有一臺(tái)主機(jī)只知道物理地址而不知道 IP 地址
那么可以通過(guò) RARP 協(xié)議發(fā)出征求自身 IP 地址的廣播請(qǐng)求,然后由 RARP 服務(wù)器負(fù)責(zé)回答钱烟。

3. RIP/OSPF 路由選擇協(xié)議

RIP協(xié)議

  • 底層是貝爾曼福特算法
  • 它選擇路由的度量標(biāo)準(zhǔn)「metric」是跳數(shù)晰筛,最大跳數(shù)是15 跳,如果大于15 跳拴袭,它就會(huì)丟棄數(shù)據(jù)包

OSPF協(xié)議

  • Open Shortest Path First 開(kāi)放式最短路徑優(yōu)先读第,底層是迪杰斯特拉算法
  • 是鏈路狀態(tài)路由選擇協(xié)議,它選擇路由的度量標(biāo)準(zhǔn)是帶寬

4. NAT「Network Address Translation」網(wǎng)絡(luò)地址轉(zhuǎn)換協(xié)議

簡(jiǎn)介

  • 屬接入廣域網(wǎng)「WAN」技術(shù)拥刻,是一種 將私有地址 轉(zhuǎn)化為 合法 IP 地址的轉(zhuǎn)換技術(shù)
  • 解決了 lP 地址不足的問(wèn)題怜瞒,能夠有效地避免來(lái)自網(wǎng)絡(luò)外部的攻擊,隱藏并保護(hù)網(wǎng)絡(luò)內(nèi)部的計(jì)算機(jī)

四般哼、數(shù)據(jù)鏈路層「Data Link Layer」

簡(jiǎn)介

  • 功能:為網(wǎng)絡(luò)層提供可靠的數(shù)據(jù)傳輸

其最基本的服務(wù)是將源自網(wǎng)絡(luò)層來(lái)的數(shù)據(jù)可靠地傳輸?shù)较噜徆?jié)點(diǎn)

  • 基本數(shù)據(jù)單位:幀
  • 主要的協(xié)議:以太網(wǎng)協(xié)議
  • 重要設(shè)備:網(wǎng)橋 和 交換機(jī)
  • 在不可靠的物理介質(zhì)上提供可靠的傳輸
    該層的作用包括:物理地址尋址盼砍、數(shù)據(jù)的成幀尘吗、流量控制逝她、數(shù)據(jù)的檢錯(cuò)浇坐、重發(fā)等

作用

  • 將數(shù)據(jù)組合成數(shù)據(jù)塊
    這種數(shù)據(jù)塊幀「frame」
  • 控制幀在物理信道上的傳輸,包括如何處理傳輸差錯(cuò)
  • 調(diào)節(jié)發(fā)送速率以使與接收方相匹配
  • 在兩個(gè)網(wǎng)絡(luò)實(shí)體之間提供數(shù)據(jù)鏈路通路的建立黔宛、維持和釋放的管理

五近刘、物理層「Physical Layer」

簡(jiǎn)介:激活、維持臀晃、關(guān)閉通信端點(diǎn)之間的機(jī)械特性觉渴、電氣特性、功能特性以及過(guò)程特性徽惋。

作用

  • 該層為上層協(xié)議提供了一個(gè)傳輸數(shù)據(jù)的可靠的物理媒體
  • 物理層確保原始的數(shù)據(jù)可在各種物理媒體上傳輸
  • 物理層記住兩個(gè)重要的設(shè)備名稱(chēng)案淋,中繼器(Repeater,也叫放大器)和 集線(xiàn)器
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末险绘,一起剝皮案震驚了整個(gè)濱河市踢京,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宦棺,老刑警劉巖瓣距,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異代咸,居然都是意外死亡蹈丸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)呐芥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)逻杖,“玉大人,你說(shuō)我怎么就攤上這事思瘟≥┌伲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵潮太,是天一觀(guān)的道長(zhǎng)管搪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)铡买,這世上最難降的妖魔是什么更鲁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮奇钞,結(jié)果婚禮上澡为,老公的妹妹穿的比我還像新娘。我一直安慰自己景埃,他們只是感情好媒至,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布顶别。 她就那樣靜靜地躺著,像睡著了一般拒啰。 火紅的嫁衣襯著肌膚如雪驯绎。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天谋旦,我揣著相機(jī)與錄音剩失,去河邊找鬼。 笑死册着,一個(gè)胖子當(dāng)著我的面吹牛拴孤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播甲捏,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼演熟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了司顿?” 一聲冷哼從身側(cè)響起芒粹,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎免猾,沒(méi)想到半個(gè)月后是辕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猎提,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年获三,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锨苏。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疙教,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伞租,到底是詐尸還是另有隱情贞谓,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布葵诈,位于F島的核電站裸弦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏作喘。R本人自食惡果不足惜理疙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泞坦。 院中可真熱鬧窖贤,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至授嘀,卻和暖如春物咳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粤攒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工所森, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人夯接。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像纷妆,于是被迫代替她去往敵國(guó)和親盔几。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容