
TCP/IP協議族
- 互聯網協議族(英語:Internet Protocol Suite,縮寫為IPS),是一個網絡通信模型,以及一整個網絡傳輸協議家族,為互聯網的基礎通信架構。它常被通稱為TCP/IP協議族(英語:TCP/IP Protocol Suite,或TCP/IP Protocols),簡稱TCP/IP。因為這個協議家族的兩個核心協議,包括TCP(傳輸控制協議)和IP(網際協議),為這個家族中最早通過的標準。
- 注:最好再自行了解OSI模型
HTTP
HTTP是一個客戶端終端(用戶)和服務器端(網站)請求和應答的標準(TCP)。通過使用Web瀏覽器、網絡爬蟲或者其它的工具,客戶端發起一個HTTP請求到服務器上指定端口(默認端口為80)。我們稱這個客戶端為用戶代理程序(user agent)。應答的服務器上存儲著一些資源,比如HTML文件和圖像。我們稱這個應答服務器為源服務器(origin server)。
通常,由HTTP客戶端發起一個請求,創建一個到服務器指定端口(默認是80端口)的TCP連接。HTTP服務器則在那個端口監聽客戶端的請求。一旦收到請求,服務器會向客戶端返回一個狀態,比如"HTTP/1.1 200 OK”,以及返回的內容,如請求的文件、錯誤消息、或者其它信息。
請求信息
- 發出的請求信息包括:
請求行:例如GET /images/logo.gif HTTP/1.1,表示從/images目錄下請求logo.gif這個文件。
請求頭:例如Accept-Language: en
- 其他消息體
請求方法
HTTP/1.1協議中共定義了八種方法(也叫“動作”)來以不同方式操作指定的資源:(我只列三種)
HEAD:與GET方法一樣,都是向服務器發出指定資源的請求。只不過服務器將不傳回資源的本文部分。它的好處在于,使用這個方法可以在不必傳輸全部內容的情況下,就可以獲取其中“關于該資源的信息”(元信息或稱元數據)。
GET:向指定的資源發出“顯示”請求。使用GET方法應該只用在讀取數據,而不應當被用于產生“副作用”的操作中,例如在Web Application中。其中一個原因是GET可能會被網絡蜘蛛等隨意訪問。
POST:向指定資源提交數據,請求服務器進行處理(例如提交表單或者上傳文件)。數據被包含在請求本文中。這個請求可能會創建新的資源或修改現有資源,或二者皆有。
HTTP狀態碼
- 用以表示網頁服務器HTTP響應狀態的3位數字代碼。所有狀態碼的第一個數字代表了響應的五種狀態之一。
1xx消息:這一類型的狀態碼,代表請求已被接受,需要繼續處理。這類響應是臨時響應,只包含狀態行和某些可選的響應頭信息,并以空行結束。
2xx成功:這一類型的狀態碼,代表請求已成功被服務器接收、理解、并接受。如200 OK
3xx重定向:這類狀態碼代表需要客戶端采取進一步的操作才能完成請求。通常,這些狀態碼用來重定向,后續的請求地址(重定向目標)在本次響應的Location域中指明。
4xx客戶端錯誤:這類的狀態碼代表了客戶端看起來可能發生了錯誤,妨礙了服務器的處理。
5xx服務器錯誤:這類狀態碼代表了服務器在處理請求的過程中有錯誤或者異常狀態發生,也有可能是服務器意識到以當前的軟硬件資源無法完成對請求的處理。
HTTPS
超文本傳輸安全協議(英語:Hypertext Transfer Protocol Secure,縮寫:HTTPS,也被稱為HTTP over TLS,HTTP over SSL或HTTP Secure)是一種網絡安全傳輸協議。在計算機網絡上,HTTPS經由超文本傳輸協議進行通訊,但利用SSL/TLS來對數據包進行加密。HTTPS開發的主要目的,是提供對網絡服務器的身份認證,保護交換數據的隱私與完整性。
HTTPS的主要思想是在不安全的網絡上創建一安全信道,并可在使用適當的加密包和服務器證書可被驗證且可被信任時,對竊聽和中間人攻擊提供合理的防護。
TCP
傳輸控制協議(英語:Transmission Control Protocol,縮寫為 TCP)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議
TCP連接包括三個狀態:連接創建、數據傳送和連接終止。操作系統將TCP連接抽象為套接字(socket)的編程接口給程序使用,并且要經歷一系列的狀態改變。
創建通路
- TCP用三路握手(three-way handshake)過程創建一個連接。
1.客戶端通過向服務器端發送一個SYN來創建一個主動打開
2.服務器端應當為一個合法的SYN回送一個SYN/ACK
3.最后,客戶端再發送一個ACK。當服務端受到這個ACK的時候,就完成了三路握手,并進入了連接創建狀態
數據傳輸
- 在TCP的數據傳送狀態,很多重要的機制保證了TCP的可靠性和強壯性。它們包括:使用序號,對收到的TCP報文段進行排序以及檢測重復的數據;使用校驗和來檢測報文段的錯誤;使用確認和計時器來檢測和糾正丟包或延時。
終結通路
- 連接終止使用了四路握手過程(four-way handshake),在這個過程中每個終端的連接都能獨立地被終止。因此,一個典型的拆接過程需要每個終端都提供一對FIN和ACK。
端口
- TCP使用了端口號(Port number)的概念來標識發送方和接收方的應用層。對每個TCP連接的一端都有一個相關的16位的無符號端口號分配給它們。端口被分為三類:眾所周知的、注冊的和動態/私有的。眾所周知的端口號是由因特網賦號管理局(IANA)來分配的,并且通常被用于系統一級或根進程。眾所周知的應用程序作為服務器程序來運行,并被動地偵聽經常使用這些端口的連接。例如:FTP、TELNET、SMTP、HTTP等。注冊的端口號通常被用來作為終端用戶連接服務器時短暫地使用的源端口號,但它們也可以用來標識已被第三方注冊了的、被命名的服務。動態/私有的端口號在任何特定的TCP連接外不具有任何意義。可能的、被正式承認的端口號有65535個。
UDP
用戶數據報協議(英語:User Datagram Protocol,縮寫為UDP),又稱使用者資料包協定,是一個簡單的面向數據報的傳輸層協議
在TCP/IP模型中,UDP為網絡層以上和應用層以下提供了一個簡單的接口。UDP只提供數據的不可靠傳遞,它一旦把應用程序發給網絡層的數據發送出去,就不保留數據備份(所以UDP有時候也被認為是不可靠的數據報協議)。UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,并盡可能快地把它扔到網絡上。在發送端,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。
TCP與UDP的區別
TCP是面向連接的,UDP是無連接的
UDP在傳輸數據報前不用在客戶和服務器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快
TCP保證數據正確性,UDP可能丟包,TCP保證數據順序,UDP不保證
TCP對系統資源要求較多,UDP對系統資源要求較少
IP
網際協議(英語:Internet Protocol,IP),或稱互聯網協議,是用于報文交換網絡的一種面向數據的協議。
IP是在TCP/IP協議中網絡層的主要協議,任務是僅僅根據源主機和目的主機的地址傳送數據。為此目的,IP定義了尋址方法和數據報的封裝結構。第一個架構的主要版本,現在稱為IPv4,仍然是最主要的互聯網協議,盡管世界各地正在積極部署IPv6。
IP地址
- 互聯網協議地址(英語:Internet Protocol Address,又譯為網際協議地址),縮寫為IP地址(IP Address),是分配給網絡上使用網際協議的設備的數字標簽。常見的IP地址分為IPv4與IPv6兩大類。
IPv4
- 由32位二進制數組成,為便于使用,常以XXX.XXX.XXX.XXX形式表現,每組XXX代表小于或等于255的10進制數。例如維基媒體的一個IP地址是208.80.152.2。
IPv6
- 從IPv4到IPv6最顯著的變化就是網絡地址的長度。RFC 2373和RFC 2374定義的IPv6地址有128位長;IPv6地址的表達形式,一般采用32個十六進制數。如2001:0db8:85a3:08d3:1319:8a2e:0370:7344
域名與DNS
域名(英語:Domain Name),又稱網域、網域名稱,是由一串用點分隔的名字組成的Internet上某一臺計算機或計算機組的名稱,用于在數據傳輸時標識計算機的電子方位(有時也指地理位置)。DNS(網域名稱系統,Domain Name System,有時也簡稱為域名)是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分布式數據庫,能夠使人更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP地址數串。
例如,www.wikipedia.org是一個域名,和IP地址208.80.152.2相對應。DNS就像是一個自動的電話號碼簿,我們可以直接撥打wikipedia的名字來代替電話號碼(IP地址)。我們直接調用網站的名字以后,DNS就會將便于人類使用的名字(如www.wikipedia.org)轉化成便于機器識別的IP地址(如208.80.152.2)