參考
- 深入淺出-網(wǎng)絡(luò)七層模型&&網(wǎng)絡(luò)數(shù)據(jù)包
- HTTP請(qǐng)求報(bào)文和HTTP響應(yīng)報(bào)文
- Android面試 - 網(wǎng)絡(luò)基礎(chǔ)會(huì)問哪些問題及其解答
基礎(chǔ)知識(shí)
OSI七層模型及其功能

- 物理層:負(fù)責(zé)最后將信息編碼成電流脈沖或其他信號(hào)用于網(wǎng)上傳輸
- 數(shù)據(jù)鏈路層:通過物理網(wǎng)絡(luò)鏈路層提供數(shù)據(jù)傳輸,不同的數(shù)據(jù)鏈路層定義了不同的網(wǎng)絡(luò)和協(xié)議特征,其中包括物理編址,網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),錯(cuò)誤驗(yàn)證,數(shù)據(jù)幀序列等
- 網(wǎng)絡(luò)層:負(fù)責(zé)在源和終點(diǎn)之間建立連接
- 傳輸層:向高層提供可靠的端到端的網(wǎng)絡(luò)數(shù)據(jù)流服務(wù)
- 會(huì)話層:會(huì)話層建立,管理,和終止表示層與實(shí)體之間的通信會(huì)話
- 表示層:提供多種功能用于應(yīng)用層數(shù)據(jù)編碼和轉(zhuǎn)化,以確保以一個(gè)系統(tǒng)應(yīng)用層發(fā)送的信息可以被另一個(gè)系統(tǒng)應(yīng)用層識(shí)別
-
應(yīng)用層:包括文件的傳輸、訪問及管理協(xié)議(FTAM) ,以及文件虛擬終端協(xié)議(VIP)和公用管理系統(tǒng)信息(CMIP)等;
常見的應(yīng)用層協(xié)議:
常見的應(yīng)用層協(xié)議
5層協(xié)議
- 物理層
- 鏈接層:在物理層上
- 協(xié)議:以太網(wǎng)協(xié)議規(guī)定了電信號(hào)的分組方式
- mac地址
- 廣播(局限于子網(wǎng))
- 網(wǎng)絡(luò)層:建立一個(gè)主機(jī)到主機(jī)的鏈接,能夠區(qū)分哪些MAC地址屬于同一個(gè)子網(wǎng)絡(luò),使得我們能夠區(qū)分不同的計(jì)算機(jī)是否屬于同一個(gè)子網(wǎng)絡(luò)
- ip協(xié)議
- ip數(shù)據(jù)包
- arp協(xié)議,能夠從IP地址得到MAC地址
- 傳輸層:建立一個(gè)端口到端口的鏈接
- 應(yīng)用層:規(guī)定應(yīng)用程序的數(shù)據(jù)格式
TCP/UDP協(xié)議

四層協(xié)議
- 網(wǎng)絡(luò)接口層:用于協(xié)作IP數(shù)據(jù)在已有網(wǎng)絡(luò)介質(zhì)上傳輸?shù)膮f(xié)議
- 網(wǎng)間層:網(wǎng)間層對(duì)應(yīng)于 OSI 七層參考模型的網(wǎng)絡(luò)層,本層包含 IP 協(xié)議、RIP 協(xié)議(Routing Information Protocol,路由信息協(xié)議),負(fù)責(zé)數(shù)據(jù)的包裝、尋址和路由。同時(shí)還包含網(wǎng)間控制報(bào)文協(xié)議(Internet Control Message Protocol,ICMP)用來??供網(wǎng)絡(luò)診斷信息;
- 傳輸層:傳輸層對(duì)應(yīng)于 OSI 七層參考模型的傳輸層,它??供兩種端到端的通信服務(wù)。其中 TCP 協(xié)議(Transmission Control Protocol)提供可靠的數(shù)據(jù)流運(yùn)輸服務(wù),UDP 協(xié)議(Use Datagram Protocol)提供不可靠的用戶數(shù)據(jù)報(bào)服務(wù)。
- 應(yīng)用層:應(yīng)用層對(duì)應(yīng)于 OSI 七層參考模型的應(yīng)用層和表達(dá)層;
TCP/IP 協(xié)議族常用協(xié)議
- 應(yīng)用層:TFTP,HTTP,SNMP,F(xiàn)TP,SMTP,DNS,Telnet 等等
- 傳輸層:TCP,UDP
- 網(wǎng)絡(luò)層:IP,ICMP,OSPF,EIGRP,IGMP
- 數(shù)據(jù)鏈路層:SLIP,CSLIP,PPP,MTU
各種協(xié)議簡(jiǎn)單介紹
- IP(Internet Protocol,網(wǎng)際協(xié)議):IP 定義了 TCP/IP 的地址,尋址方法,以及路由規(guī)則;IP 地址由兩部分組成,即網(wǎng)絡(luò)號(hào)和主機(jī)號(hào);IPv6 是為了解決 IPv4 地址耗盡和其它一些問題而研發(fā)的最新版本的 IP。使用 128 位 整數(shù)表示地址
- ICMP(Internet Control Message Protocol,網(wǎng)絡(luò)控制消息協(xié)議):是 TCP/IP 的 核心協(xié)議之一,用于在 IP 網(wǎng)絡(luò)中發(fā)送控制消息,提供通信過程中的各種問題反饋
- TCP(TransmissionControlProtocol,傳輸控制協(xié)議):是一種面向連接的,可靠的, 基于字節(jié)流傳輸?shù)耐ㄐ艆f(xié)議。
- UDP(UserDatagramProtocol,用戶數(shù)據(jù)報(bào)協(xié)議):是一個(gè)面向數(shù)據(jù)報(bào)的傳輸層協(xié) 議
- ECHO(EchoProtocol,回聲協(xié)議):是一個(gè)簡(jiǎn)單的調(diào)試和檢測(cè)工具。服務(wù)器器會(huì) 原樣回發(fā)它收到的任何數(shù)據(jù),既可以使用 TCP 傳輸,也可以使用 UDP 傳輸。使用 端口號(hào) 7 。
- DHCP(DynamicHostConfigrationProtocol,動(dòng)態(tài)主機(jī)配置協(xié)議):是用于局域 網(wǎng)自動(dòng)分配 IP 地址和主機(jī)配置的協(xié)議??梢允咕钟蚓W(wǎng)的部署更加簡(jiǎn)單。
- DNS(DomainNameSystem,域名系統(tǒng))是互聯(lián)網(wǎng)的一項(xiàng)服務(wù),可以簡(jiǎn)單的將用“.” 分隔的一般會(huì)有意義的域名轉(zhuǎn)換成不易記憶的 IP 地址。
- FTP(FileTransferProtocol,文件傳輸協(xié)議)是用來進(jìn)行文件傳輸?shù)臉?biāo)準(zhǔn)協(xié)議。
- TFTP(Trivial File Transfer Protocol,簡(jiǎn)單文件傳輸協(xié)議)是一個(gè)簡(jiǎn)化的文 件傳輸協(xié)議,其設(shè)計(jì)非常簡(jiǎn)單,通過少量存儲(chǔ)器就能輕松實(shí)現(xiàn),所以一般被用來通 過網(wǎng)絡(luò)引導(dǎo)計(jì)算機(jī)過程中傳輸引導(dǎo)文件等小文件;
- SSH(SecureShell,安全Shell),因?yàn)閭鹘y(tǒng)的網(wǎng)絡(luò)服務(wù)程序比如TELNET本質(zhì)上都極不安全,明文傳說數(shù)據(jù)和用戶信息包括密碼,SSH 被開發(fā)出來避免這些問題, 它其實(shí)是一個(gè)協(xié)議框架,有大量的擴(kuò)展冗余能力,并且提供了加密壓縮的通道可以 為其他協(xié)議使用。
- POP(PostOfficeProtocol,郵局協(xié)議)是支持通過客戶端訪問電子郵件的服務(wù), 現(xiàn)在版本是 POP3,也有加密的版本 POP3S。協(xié)議使用 TCP,端口 110。
- SMTP(Simple Mail Transfer Protocol,簡(jiǎn)單郵件傳輸協(xié)議)是現(xiàn)在在互聯(lián)網(wǎng) 上發(fā)送電子郵件的事實(shí)標(biāo)準(zhǔn)。使用 TCP 協(xié)議傳輸,端口號(hào) 25。
- HTTP(HyperTextTransferProtocol,超文本傳輸協(xié)議)是現(xiàn)在廣為流行的WEB 網(wǎng)絡(luò)的基礎(chǔ),HTTPS 是 HTTP 的加密安全版本。協(xié)議通過 TCP 傳輸,HTTP 默認(rèn) 使用端口 80,HTTPS 使用 443。
TCP協(xié)議建立連接和終止連接的過程?
建立連接:
1、服務(wù)器端必須做好準(zhǔn)備接受外來的連接。這通常通過 socket(), bind(), listen() 三個(gè)函數(shù)來完成的。我們稱之為 被動(dòng)打開(passive open).
2、客戶端通過調(diào)用connect發(fā)起主動(dòng)打開(active open)。這導(dǎo)致客戶端TCP發(fā)送SYN同步分節(jié)。它告訴服務(wù)器客戶端在(待建立的)連接中發(fā)送的數(shù)據(jù)的初始化序列號(hào)。通用SYN分節(jié)不攜帶數(shù)據(jù),
3、服務(wù)器必須確認(rèn)(ACK) 客戶端的SYN,同時(shí)自己也得發(fā)送一個(gè)SYN分節(jié),它含有服務(wù)器將在統(tǒng)一連接中發(fā)送的數(shù)據(jù)的初始化序號(hào)。服務(wù)器在單個(gè)分節(jié)中發(fā)送SYN和對(duì)客戶端SYN的ACK確認(rèn)。
4、客戶端必須確認(rèn)服務(wù)器的SYN。

連接終止:
1、某個(gè)應(yīng)用程序首先調(diào)用close,主動(dòng)關(guān)閉(active close) 該端的TCP于是發(fā)送一個(gè)FIN分節(jié),表示數(shù)據(jù)發(fā)送完畢。
2、接收到這個(gè)FIN的對(duì)端執(zhí)行被動(dòng)關(guān)閉(passive close)。這個(gè)FIN是TCP確認(rèn)。它的接收也作為一個(gè)文件結(jié)束符(end of file) 傳遞給接收端的應(yīng)用程序(放在排隊(duì)等候應(yīng)用進(jìn)程接收的任何其他數(shù)據(jù)之后),因?yàn)镕IN的接收意味著接收端應(yīng)用程序在相應(yīng)連接上再無額外數(shù)據(jù)可以接收。
3、一段時(shí)間以后,接收到這個(gè)文件結(jié)束符的應(yīng)用進(jìn)程將調(diào)用close關(guān)閉它的套接字。這導(dǎo)致它的TCP也發(fā)送一個(gè)FIN。
4、接收這個(gè)最終FINd額原發(fā)送端TCP(即執(zhí)行主動(dòng)關(guān)閉的一端)確認(rèn)這個(gè)FIN

區(qū)別:
TCP :傳輸控制協(xié)議。
a、面向連接,靠三次握手來完成
b、速度相對(duì)較慢,因?yàn)檫B接的過程會(huì)耗時(shí)間和資源
c、可靠的協(xié)議,數(shù)據(jù)不會(huì)丟失
d、數(shù)據(jù)大小沒有限制
e、耗用系統(tǒng)資源相對(duì)較多
UDP:用戶數(shù)據(jù)報(bào)文協(xié)議
a、面向無連接的
b、高效的、速度快
c、不可靠的協(xié)議,容易丟失數(shù)據(jù)
d、數(shù)據(jù)包大小有限制,小于64K
e、耗用系統(tǒng)資源相對(duì)較少
HTTP
- HTTP:HyperText Transfer Protocol 超文本傳輸協(xié)議,處于應(yīng)用層,基于請(qǐng)求響應(yīng)模式,無狀態(tài)(對(duì)以前的連接無記憶)協(xié)議。
URL與URI的區(qū)別
- URL:Uniform Resource Location 統(tǒng)一資源定位器,就是常說的網(wǎng)頁(yè)地址。組成部分:協(xié)議;存有該資源的主機(jī)IP地址;主機(jī)資源的具體地址,強(qiáng)調(diào)的是路徑
- URI:uniform resource identifier 統(tǒng)一資源表示符,用來唯一的表示一個(gè)資源,包括三個(gè)組成部分:訪問資源的命名機(jī)制;存放資源的主機(jī)名;資源本身的名稱,有路徑表示,著重強(qiáng)調(diào)與資源。例:file://a:1234/b/c/d.txt
http1.0月http1.1的區(qū)別
- http1.0所做的優(yōu)化:
- 帶寬問題
- 延遲問題:1,瀏覽器阻塞:瀏覽器對(duì)于同一個(gè)域名,同時(shí)只能有4個(gè)連接;2.DNS查詢:瀏覽器需要知道目標(biāo)服務(wù)器的IP才能建立連接;3.建立連接:三次握手
- 具體區(qū)別:1.緩存處理;2.帶寬處理及網(wǎng)絡(luò)連接的使用;3.host頭處理;4.長(zhǎng)連接
http1.1和http1.0存在的問題
- http1.0在傳輸數(shù)據(jù)時(shí),每次都需要重新建立連接,無疑增加了大量的延遲時(shí)間
- http1.x在傳輸數(shù)據(jù)時(shí),所有傳輸?shù)膬?nèi)容都是明文,客戶端和服務(wù)端都無法驗(yàn)證對(duì)方的身份
- http1.1在使用時(shí),header里攜帶的內(nèi)容過大,在一定程度行增加了傳輸?shù)某杀?/li>
- 雖然http1.1支持了keep-alive,來彌補(bǔ)多次創(chuàng)建連接產(chǎn)生的延遲,但是keep-alive使用多了同樣會(huì)給服務(wù)端帶來大量的性能壓力
cookie和session
Cookie:Cookie技術(shù)是客戶端的解決方案,Cookie就是由服務(wù)器發(fā)給客戶端的特殊信息,而這些信息已文本文件的方式存放在客戶端,然后客戶端每次向服務(wù)器發(fā)送請(qǐng)求的時(shí)候都會(huì)帶上這些特殊的信息

Session:是另一種記錄客戶端狀態(tài)的機(jī)制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務(wù)器上。客戶端瀏覽器訪問服務(wù)器的時(shí)候,服務(wù)器吧客戶端信息已某種形式記錄在服務(wù)器上。
session的工作原理
1.創(chuàng)建session
2.創(chuàng)建Session的同時(shí),服務(wù)器會(huì)為該Session生成唯一的Session id
3.在Session被創(chuàng)建之后,就可以調(diào)用Session相關(guān)的方法往Session中增加內(nèi)容
4.當(dāng)客戶端再次發(fā)送請(qǐng)求的時(shí)候,會(huì)將這個(gè)Session id帶上,服務(wù)器接收到請(qǐng)求之后就會(huì)依據(jù)Session id找到相應(yīng)的Session
區(qū)別
- 存放位置不同
- 存取方式的不同
- 安全性的不同
- 有效期上的不同
- 對(duì)服務(wù)器造成的壓力不同
HTTP與HTTPS的區(qū)別


HTTPS = HTTP + SSL/TLS,HTTPS使用SSL/TLS進(jìn)行加密,這既是它的優(yōu)點(diǎn)也是它的缺點(diǎn),加密使HTTPS的安全性大大提高,但是加密的過程也導(dǎo)致通信過程中性能的下降。
HTTPS中SSL/TLS加密的握手過程

以下的C代表Client客戶端,S代表Server服務(wù)端。
1.C告訴S:協(xié)議版本號(hào),支持的加密方法,以及自己生成的隨機(jī)數(shù)
2.S確認(rèn)加密方法,給C方松證書和自己產(chǎn)生的隨機(jī)數(shù)
3.C確認(rèn)證書有效性,產(chǎn)生新的隨機(jī)數(shù),并使用數(shù)字證書中的公鑰加密隨機(jī)數(shù),發(fā)送給S
4.S使用對(duì)應(yīng)的私鑰解密得到C發(fā)過來的隨機(jī)數(shù)
5.C和S使用約定的加密方法,使用前面的三個(gè)隨機(jī)數(shù),生成對(duì)話密鑰,然后用此密鑰加密接下來的整個(gè)對(duì)話過程
總的來說,整個(gè)過程就是使用非對(duì)稱加密算法交換“對(duì)話中要使用的對(duì)稱加密算法的密鑰”,然后使用對(duì)稱加密算法進(jìn)行對(duì)話。
相關(guān)加密算法
- 對(duì)稱加密:共享密鑰加密,對(duì)稱密鑰在加密和解密的過程中使用的密鑰是相同的,常見的對(duì)稱加密算法有DES,3DES,AES,RC5,RC6。優(yōu)點(diǎn)是計(jì)算速度快,缺點(diǎn)是密鑰需要 字啊通訊的兩端共享
- 非對(duì)稱加密:公開密鑰加密,服務(wù)端會(huì)生成一對(duì)密鑰,一個(gè)私鑰保存在服務(wù)端,僅自己知道,另一個(gè)是公鑰,公鑰可以自由發(fā)布供任何人使用
- 數(shù)字簽名
- 數(shù)字證書
HTTP 報(bào)文
- 請(qǐng)求報(bào)文
一個(gè)HTTP請(qǐng)求報(bào)文由請(qǐng)求行(request line)、請(qǐng)求頭部(header)、空行和請(qǐng)求數(shù)據(jù)4個(gè)部分組成
http請(qǐng)求報(bào)文一般格式
- 響應(yīng)報(bào)文
HTTP響應(yīng)也由三個(gè)部分組成,分別是:狀態(tài)行、消息報(bào)頭、響應(yīng)正文。
<status-line>
<headers>
<blank line>
[<response-body>]
常見響應(yīng)類別
1xx:指示信息--表示請(qǐng)求已接收,繼續(xù)處理。
2xx:成功--表示請(qǐng)求已被成功接收、理解、接受。
3xx:重定向--要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作。
4xx:客戶端錯(cuò)誤--請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無法實(shí)現(xiàn)。
5xx:服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求。
常見響應(yīng)碼
200 OK:客戶端請(qǐng)求成功。
400 Bad Request:客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤,不能被服務(wù)器所理解。
401 Unauthorized:請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用。
403 Forbidden:服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)。
404 Not Found:請(qǐng)求資源不存在,舉個(gè)例子:輸入了錯(cuò)誤的URL。
500 Internal Server Error:服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤。
503 Server Unavailable:服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常,舉個(gè)例子:HTTP/1.1 200 OK(CRLF)。
Http的get和post方法的區(qū)別什么?
get方法:
原理上:主要用來獲取或者查詢資源信息。就是說不修改信息
表面上:
a、GET請(qǐng)求的數(shù)據(jù)會(huì)附在URL之后(就是把數(shù)據(jù)放在HTTP協(xié)議頭中),以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相 連
b、GET方式提交的數(shù)據(jù)較?。g覽器和操作系統(tǒng)對(duì)URL長(zhǎng)度的限定),一般1024字節(jié)
c、GET的安全性相對(duì)較弱,可能會(huì)造成信息泄露(信息會(huì)明文出現(xiàn)在URL上,其他人可能會(huì)通過瀏覽器的緩存查 看到歷史記錄,從而得到信息)
d、服務(wù)器端用Request.QueryString獲取變量的值
e、GET請(qǐng)求用起來比比較方便
post方法:
原理上:根據(jù)Http規(guī)范,POST表示可能修改服務(wù)器上資源的請(qǐng)求
表面上:a、POST請(qǐng)求把要提交的數(shù)據(jù)放在HTTP包的包體中。
b、POST可以提交較大量的數(shù)據(jù)(受到服務(wù)器的處理程序的處理能力限制)
c、POST安全性較高(數(shù)據(jù)不會(huì)明文出現(xiàn)在URL上)。
d、服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)。
e、用起來相對(duì)麻煩一點(diǎn)
DNS解析過程

DNS功能是將域名解析為IP地址。
1.查找瀏覽器緩存,是否有解析記錄,沒有則進(jìn)入第二步
2.查找系統(tǒng)緩存,是否有解析記錄,沒有則進(jìn)入第二步
3.給配置的DNS服務(wù)器(LDNS)發(fā)送請(qǐng)求,LDNS查找到則返回
4.LDNS沒有找到時(shí)會(huì)請(qǐng)求RootServer,返回一個(gè)頂級(jí)域名服務(wù)器
5.LDNS請(qǐng)求頂級(jí)域名服務(wù)器,返回NameServer地址
6.NameServer返回IP給LDNS,LDNS會(huì)進(jìn)行緩存
7.LDNS返回給用戶
socket
創(chuàng)建socket實(shí)例
客戶端鏈接
創(chuàng)建Socket對(duì)象
連接建立后,通過輸出流向服務(wù)器發(fā)送請(qǐng)求消息
通過輸入流獲取服務(wù)器響應(yīng)的信息
關(guān)閉響應(yīng)資源
服務(wù)端連接
創(chuàng)建ServerSocket對(duì)象,綁定監(jiān)聽對(duì)象
通過accept()方法監(jiān)聽客戶端請(qǐng)求
連接建立后,通過輸入流讀取客戶端發(fā)送的請(qǐng)求信息
通過輸出流向客戶端發(fā)送信息
關(guān)閉相關(guān)資源

