ARP(Address Resolution Protocol)地址解析協議,將IP地址解析成MAC地址。html
IP地址在OSI模型第三層,MAC地址在OSI第二層,彼此不直接通訊;算法
在經過以太網發生IP數據包時,先封裝第三層(32位IP地址)和第二層(48位MAC地址)的報頭;瀏覽器
但因爲發送數據包時只知道目標IP地址,不知道其Mac地址,且不能跨越第2、三層,因此須要使用地址解析協議。緩存
ARP工做流程分請求和響應:安全
在dos窗口內「ping」某個域名抓取到的包:服務器
IP(Internet Protocol)互聯網協議,主要目的是使得網絡間可以互相通訊,位於OSI第三層,負責跨網絡通訊的地址。網絡
當以廣播方式發送數據包的時候,是以MAC地址定位,而且須要電腦在同一子網絡。tcp
當不在同一子網絡就須要路由發送,這時候就須要IP地址來定位。性能
一樣在dos窗口內「ping」某個域名抓取到的包:大數據
TCP(Transmission Control Protocol)傳輸控制協議,一種面向鏈接、可靠、基於IP的傳輸層協議,主要目的是爲數據提供可靠的端到端傳輸。
在OSI模型的第四層工做,可以處理數據的順序和錯誤恢復,最終保證數據可以到達其應到達的地方。
1)標誌位
SYN: 同步,在創建鏈接時用來同步序號。SYN=1, ACK=0表示一個鏈接請求報文段。SYN=1,ACK=1表示贊成創建鏈接。
FIN: 終止,FIN=1時,代表此報文段的發送端的數據已經發送完畢,並要求釋放傳輸鏈接。
ACK: 確認,ACK = 1時表明這是一個確認的TCP包,取值0則不是確認包。
DUP ACK:重複,重複確認報文,有重複報文,通常是是丟包或延遲引發的,從這個報文看應該是丟包了。
URG:緊急,當URG=1時,表示報文段中有緊急數據,應儘快傳送
PSH:推送,當發送端PSH=1時,接收端儘快的交付給應用進程
RST:復位,當RST=1時,代表TCP鏈接中出現嚴重差錯,必須釋放鏈接,再從新創建鏈接
2)端口
客戶端與不一樣服務器創建鏈接時,源端口和目標端口可不一樣。
3)TCP三次握手
4)TCP四次揮手
TCP四次斷開,例如關閉頁面的時候就會斷開鏈接。
5)TCP概念
1. 發送窗口
沒法簡單的看出發送窗口的大小,發送窗口會由網絡因素決定。發送窗口定義了一次發的字節,而MSS定義了這些字節經過多少個包發送。
2. 擁塞窗口(cwnd)
描述源端在擁塞控制狀況下一次最多能發送的數據包的數量。
在發送方維護一個虛擬的擁塞窗口,並利用各類算法使它儘量接近真實的擁塞點。
網絡對發送窗口的限制,就是經過擁塞窗口實現的。
3. 在途字節數(bytes in flight)
已經發送出去,但還沒有被確認的字節數。
在途字節數 = Seq + Len - Ack
其中Seq和Len來自上一個數據發送方的包,而Ack來自上一個數據接收方的包。
4. 擁塞點(congestion point)
發生擁塞時候的在途字節數就是該時刻的網絡擁塞點。
先從Wireshark中找到一連串重傳包中的第一個,再根據該Seq找到原始包最後計算該原始包發送時刻的在途字節數。
5. 慢啓動
RFC建議初始擁塞窗口發送二、三、或4個MSS,若是發出去的包都能獲得確認,則代表還沒到擁塞點,能夠收到n個確認增長n個MSS
6. 擁塞避免
慢啓動持續一段時間後,擁塞窗口達到一個較大的值,就得放慢RFC建議在每一個往返時間增長1個MSS,好比發了16個MSS所有確認,那麼就增長到17個MSS
7. 超時重傳
發出去的包在等待一段時間(RTO)後,沒有收到確認,就只能重傳了
8. 快速重傳(Fast Retransmit)
不以時間驅動,而以數據驅動重傳。若是包沒有連續到達,就ACK最後那個可能被丟了的包,若是發送方連續收到3次相同的ACK,就重傳。
9. SACK(Selective Acknowledgment)
選擇性確認重傳,ACK仍是Fast Retransmit的ACK,SACK則是彙報收到的數據,在發送端就能夠根據回傳的SACK來知道哪些數據到了,哪些沒有到。
10. 延遲確認(Delayed ACK)
若是收到一個包後暫時沒什麼數據發給對方,那就延遲一段時間再確認。假如這段時間剛好有數據要發送,那數據和確認信息能夠在一個包中發送。
11. LSO
LSO拯救CPU而出的創意,爲了緩解CPU的壓力,把它的一部分工做外包給了網卡,好比TCP的分段。
啓用LSO以後,TCP層就能夠把大於MSS的數據塊直接傳給網卡,讓網卡負責分段。
好比「Seq=348586,Len=2776」,被網卡分爲「Seq=348586,Len=1388」和「Seq=349974,Len=1388」兩個包。
在發送端抓包至關於站在CPU角度,只看到一個分段前的大包,而接收端就能夠看到兩個包。
因此纔會出現只見重傳包,不見原始包的狀況。
12. Nagle算法
在發出去的數據尚未被確認以前,假如又有小數據生成,那就把小數據收集起來,湊滿一個MSS或等收到確認後再發送。
13. Vegas算法
經過監控網絡狀態來調整發包速度。
當網絡狀態良好時,數據包的RTT比較穩定,這時能夠增大擁塞窗口;
當網絡開始繁忙時,數據包開始排隊,RTT就會變大,這時就減少擁塞窗口。
6)選項字段
PTR(Pointer Record):指針記錄,PTR記錄解析IP地址到域名
TTL(Time to live):
存活時間,限制數據包在網絡中存在的時間,防止數據包不斷的在IP互聯網絡上循環,初始值通常爲64,每通過一個路由減去1。
經過TTL過濾運營商劫持包,假的包是搶先應答的,因此和真實包的TTL可能不一樣(例如ip.ttl == 54)
Seq:數據段的序號,當接收端收到亂序的包,就能根據此序號從新排序,當前Seq等上一個Seq號與長度相加獲取到
Len:數據段的長度,這個長度不包括TCP頭
Ack:確認號,接收方向發送方確認已經收到了哪些字節
RTT(Round Trip Time):也就是一個數據包從發出去到回來的時間
RTO(Retransmission TimeOut):超時重傳計數器,描述數據包從發送到失效的時間間隔,是判斷數據包丟失與否及網絡是否擁塞的重要參數
MTU(Maximum Transmit Unit):最大傳輸單元
MSS(Maximum Segment Size):最長報文段,TCP包所能攜帶的最大數據量,不包含TCP頭和Option。通常爲MTU值減去IPv4頭部(至少20字節)和TCP頭部(至少20字節)獲得。
Win(Window Size):聲明本身的接收窗口
TCP Window Scale:窗口擴張,放在TCP頭以外的Option,向對方聲明一個shift count,做爲2的指數,再乘以TCP定義的接收窗口,獲得真正的TCP窗口
DF(Don't fragment):在網絡層中,若是帶了就丟棄沒帶就分片
MF(More fragments):0表示最後一個分片,1表示不是最後一片
7)過濾表達式
握手請求被對方拒絕:tcp.flags.reset === 1 && tcp.seq === 1
重傳的握手請求:tcp.flags.syn === 1 && tcp.analysis.retransmission
過濾延遲確認:tcp.analysis.ack_rtt > 0.2 and tcp.len == 0
UDP(User Datagram Protocol)用戶數據報協議,提供面向事務的簡單不可靠信息傳送服務。
將網絡數據流壓縮成數據包的形式。每個數據包的前8個字節保存包頭信息,剩餘的包含具體的傳輸數據。
雖然UDP是不可靠的傳輸協議,但它是分發信息的理想協議,例如在屏幕上報告股票市場、顯示航空信息;
在路由信息協議RIP(Routing Information Protocol)中修改路由表、QQ聊天、迅雷、網絡電話等。
TCP的效率不必定比UDP低,只要窗口足夠大,TCP也能夠不受往返時間的約束而源源不斷地傳數據。
1)UDP的優點
1. UDP 協議的頭長度不到TCP頭的一半,因此一樣大小的包裏UDP攜帶的淨數據比TCP包多,
2. 沒有Seq和Ack等概念,省去了創建鏈接的開銷,DNS解析就使用UDP協議。
2)UDP的劣勢
1. 超過MTU的時候,發送方的網絡層負責分片,接收方收到分片後再組裝起來,這個過程會消耗資源,下降性能。
2. 沒有重傳機制,丟包由應用層處理,某個寫操做有6個包,當有一個丟失的時候,就要將6個包從新發送。
3. 分片機制存在弱點,接收方是根據包中的「More fragments」的flag來判斷是否包已接收完,1表示還有分片,0表示最後一個分片,能夠組裝了。
若是持續發送flag爲1的UDP,接收方沒法組裝,就有可能耗盡內存。
ICMP(Internet Control Message Protocol)網際報文控制協議,用於傳輸錯誤報告控制信息,對網絡安全有極其重要的意義。
例如請求的服務不可用、主機或路由不可達,ICMP協議依靠IP協議來完成任務,是IP協議的一個集成部分。
一般不被用戶網絡程序直接使用,多用於ping和tracert等這樣的診斷程序。
DNS(Domain Name System)域名系統,DNS就是進行域名解析的服務器。
DNS協議運行在UDP協議之上,端口爲53,工做原理以下:
DNS的解析過程:
DNS客戶機向本地域名服務器A發送查詢,若是A中沒有保存IP地址記錄,A就會發請求給根域名服務器B
若是B中也沒有,A就發請求給C,再沒有就發請求給D,而後是E,找到後將地址發給DNS客戶機。
域名解析過程涉及到遞歸查詢和迭代查詢。
客戶機再與Web服務器鏈接。
HTTP(HyperText Transfer Protocol)超文本傳輸協議,HTTP是一個應用層協議,無狀態,由請求和響應構成,是一個標準的客戶端服務器模型。
HTTP工做流程以下:
下面是報文首部字段的說明,表格的摘自《圖解HTTP》。
HTTP請求頭域:
Accept | 用戶代理可以處理的媒體類型(MIME)及媒體類型的相對優先級,「text/plain;q=0.3」 |
Accpet-Charset | 通知服務器用戶代理支持的字符集及字符集的相對優先順序,「iso-8859-5」 |
Accept-Encoding | 告知服務器用戶代理支持的內容編碼及優先級順序「gzip,deflate」 |
Accept-Language | 告知服務器用戶代理可以處理的天然語言集及優先級,「zh-cn,zh;q=0.7」 |
Authorization | 用戶代理的認證信息(證書值),「Basic dWVub3NlbjpwYNzd==」 |
Expect | 指望出現的某種特定行爲,錯誤時返回「417 Expectation Failed」,「100-continue」 |
From | 用戶的電子郵箱地址,爲了顯示搜索引擎等用戶代理負責人的聯繫方式,「info@ha.com」 |
Host | 請求的資源所處的互聯網主機名和端口號,必須包含在請求頭中,「www.hh.com」 |
If-Match | 條件請求,只有當If-Match字段值與ETag匹配纔會接受請求,不然返回「412 Precondition Failed」 |
If-Modified-Since | 若字段值早於資源的更新時間(Last-Modified),資源未更新,返回「304 Not Modified」 |
If-None-Match | 與If-Match相反 |
If-Range | 字段值和請求資源的ETag或時間一致時,做爲範圍請求處理,反之,返回全體資源 |
If-Unmodified-Since | 與If-Modified-Since做用相反 |
Max-Forwards | 以十進制整數形式指定可通過的服務器最大數目。服務器轉發一次,減小1,當爲0就不進行轉發 |
Proxy-Authorization | 接收從代理服務器發來的認證質詢時,發送此字段,告知服務器認證所須要的信息 |
Range | 只需獲取部分資源的範圍請求,「5001-10000」從5001字節到10000字節的資源。 |
Referer | 請求的原始資源的URI,也就是上一頁 |
TE | 客戶端可以處理響應的傳輸編碼方式及相對優先級,還可指定Trailer字段分塊傳輸編碼的方式。「gzip,deflate;q=0.5」 |
User-Agent | 建立請求的瀏覽器和用戶代理名稱等信息 |
HTTP應答頭域:
Accpet-Ranges | 告知客戶端服務器是否能處理範圍請求,以指定獲取服務器端某個部分的資源。「bytes」 |
Age | 源服務器在多久前建立了響應,字段值單位爲秒 |
ETag | 客戶端實體標識,一種能夠將資源以字符串形式作惟一標識的方式 |
Location | 將響應接收方引導至某個與請求URI位置不一樣的資源,會配置3xx:Redirection的響應 |
Proxy-Authenticate | 由代理服務器所要求的認證信息發送給客戶端 |
Retry-After | 告知客戶端應該在多久(秒數或具體日期)以後再次發送請求,主要配合「503 Service Unavailable」或「3xx Redirect」。 |
Server | 當前服務器上安裝的HTTP服務器應用程序的信息,包括版本號等。「Apache/2.2.6 (Unix) PHP/5.2.5」 |
Vary | 對緩存進行控制,設置「Accept-Language」,若是字段值相同,就從緩存返回響應。 |
WWW-Authenticate | HTTP訪問認證,告知客戶端適用於訪問請求URI所指定資源的認證方案(Basic或Digest)和帶參數提示的質詢(challenge) |
HTTP通用頭域:
Cache-Control | 操做緩存的工做機制,多個指令用「,」分割,「private,max-age=0,no-cache」 |
Connection | 控制再也不轉發給代理的首部字段與管理持久鏈接,「keep-alive」 |
Date | HTTP報文的日期和時間 |
Pragema | HTTP1.1以前的遺留字段,做爲向後兼容定義,只用在客戶端發送的請求中。「no-cache」 |
Trailer | 說明在報文主體後記錄了哪些首部字段,可應用在分塊編碼傳輸時。在報文最後寫了重要信息 |
Transfer-Encoding | 傳輸報文主體時採用的編碼方式,分塊傳輸「chunked」 |
Upgrade | 檢測HTTP協議及其餘協議是否可以使用更高版本進行通訊 |
Via | 追蹤客戶端與服務器之間的請求和響應報文的傳輸路徑,各個代理服務器會往Via添加本身的服務器信息 |
Warning | 告知用戶一些與緩存相關問題的警告 |
HTTP實體頭域:
Allow | 告知客戶端可以支持Request-URI指定資源的全部HTTP方法,「GET,HEAD」。當不支持,會返回「405 Method Not Allowed」 |
Content-Encoding | 服務器對實體的主體部分選用的內容編碼方式,在不丟失內容的前提下進行壓縮。「gzip」 |
Content-Language | 實體主體使用的天然語言(中文或英文等) |
Content-Length | 主體部分的大小(單位是byte) |
Content-Location | 給出與報文主體部分相對應的URI,與Location不一樣 |
Content-MD5 | 一串由MD5算法生成的值,目的在於檢查報文主體在傳輸過程當中是否保持完整,以及確認傳輸到達 |
Content-Range | 針對範圍請求,做爲響應返回的實體的哪一個部分符合範圍請求,單位爲byte。「bytes 5001-10000/10000」 |
Content-Type | 實體主體內對象的媒體類型,與Accpet同樣,字段值用type/subtype形式賦值。「text/html; charset=UTF-8」 |
Expires | 將資源失效的日期告知客戶端。當首部字段Cache-Control有指定max-age指令時,優先處理max-age指令 |
Last-Modified | 指明資源最終修改時間,通常來講,這個值就是Request-URI指定資源被修改的時間 |
詳細信息能夠參考MDN的《HTTP Headers》
MIME (Multipurpose Internet Mail Extensions) 是描述消息內容類型的因特網標準,一種通知客戶端其接收文件的多樣性的機制,文件後綴名在網頁上並無明確的意義。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)基於SSL的HTTP協議,HTTP的安全版。
使用端口43,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸和身份認證的網絡協議。
1)HTTPS工做流程
2)SSL
SSL(Secure Sockets Layer)安全套接層,TLS(Transport Layer Security)傳輸層安全是其繼任者。
SSL和TLS在傳輸層對網絡鏈接進行加密。
SSL協議分爲兩層,SSL記錄協議(SSL Record Protocol)和SSL握手協議(SSL Handshake Protocol)。
SSL記錄協議創建在TCP之上,提供數據封裝、壓縮加密基本功能的支持。
SSL握手協議創建在SSL記錄協議之上,在數據傳輸以前,通訊雙方進行身份認證、協商加密算法和交換加密祕鑰等。
SSL工做分爲兩個階段,服務器認證和用戶認證。
SSL協議既用到了公鑰加密(非對稱加密)又用到了對稱加密技術。
3)數據包
客戶端與服務器之間的通訊:
1.客戶端發出請求(Client Hello)
2.服務器響應(Server Hello)
3)證書信息
3.密鑰交換
4.應用層信息通訊
用戶能夠發送經過TLS層使用RC4的寫實例加密過的普通HTTP消息,也能夠解密服務端RC4寫實例發過來的消息。
此外,TLS層經過計算消息內容的HMAC_MD5哈希值來校驗每一條消息是否被篡改。
轉載來源:http://www.cnblogs.com/strick/p/6262284.html
感謝做者