概念:程序員
(1)
長鏈接
,指在一個鏈接上能夠連續發送多個數據包,在鏈接保持期間,若是沒有數據包發送,須要雙方發鏈路檢測包。
(2)短鏈接
,是指通信雙方有數據交互時,就創建一個鏈接,數據發送完成後,則斷開此鏈接,即每次鏈接只完成一項業務的發送。數據庫
區別:編程
長鏈接多用於操做頻繁,點對點的通信,並且鏈接數不能太多狀況。每一個TCP鏈接都須要三步握手,這須要時間,若是每一個操做都是短鏈接,再操做的話那麼處理速度會下降不少,因此每一個操做完後都不斷開,下次處理時直接發送數據包就OK了,不用創建TCP鏈接。例如:數據庫的鏈接用長鏈接,若是用短鏈接頻繁的通訊會形成socket錯誤,並且頻繁的socket建立也是對資源的浪費。而像WEB網站的http服務通常都用短連接,由於長鏈接對於服務端來講會耗費必定的資源,而像WEB網站這麼頻繁的成千上萬甚至上億客戶端的鏈接用短鏈接會更省一些資源,若是用長鏈接,並且同時有成千上萬的用戶,若是每一個用戶都佔用一個鏈接的話,那可想而知吧。因此併發量大,但每一個用戶無需頻繁操做狀況下需用短連好。總之,長鏈接和短鏈接的選擇要視狀況而定。windows
概念:安全
三次握手(three times handshake;three-wayhandshake)所謂的「三次握手」即對每次發送的數據量是怎樣跟蹤進行協商使數據段的發送和接收同步,根據所接收到的數據量而肯定的數據確認數及數據發送、接收完畢後什麼時候撤消聯繫,並創建虛鏈接。
爲了提供可靠的傳送,TCP在發送新的數據以前,以特定的順序將數據包的序號,並須要這些包傳送給目標機以後的確認消息。TCP老是用來發送大批量的數據。當應用程序在收到數據後要作出確認時也要用到TCP。服務器
中文名網絡
三次握手
外文名併發
Three-way handshake
別 稱異步
TCP握手協議
應用學科socket
計算機傳輸協議
適用領域範圍
計算機
過程
第一次握手:創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize
Sequence Numbers)。 第二次
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP鏈接成功)狀態,完成三次握手。
完成三次握手,客戶端與服務器開始傳送數據,在上述過程當中,還有一些重要的概念。
未鏈接隊列
在三次握手協議中,服務器維護一個未鏈接隊列,該隊列爲每一個客戶端的SYN包(syn=j)開設一個條目,該條目代表服務器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的鏈接在服務器處於Syn_RECV狀態,當服務器收到客戶的確認包時,刪除該條目,服務器進入ESTABLISHED狀態。
關閉TCP鏈接:改進的三次握手
對於一個已經創建的鏈接,TCP使用改進的三次握手來釋放鏈接(使用一個帶有FIN附加標記的報文段)。TCP關閉鏈接的步驟以下:
第一步,當主機A的應用程序通知TCP數據已經發送完畢時,TCP向主機B發送一個帶有FIN附加標記的報文段(FIN表示英文finish)。
第二步,主機B收到這個FIN報文段以後,並不當即用FIN報文段回覆主機A,而是先向主機A發送一個確認序號ACK,同時通知本身相應的應用程序:對方要求關閉鏈接(先發送ACK的目的是爲了防止在這段時間內,對方重傳FIN報文段)。
第三步,主機B的應用程序告訴TCP:我要完全的關閉鏈接,TCP向主機A送一個FIN報文段。
第四步,主機A收到這個FIN報文段後,向主機B發送一個ACK表示鏈接完全釋放。[1]
概念:
源IP地址和目的IP地址以及源端口號和目的端口號的組合稱爲套接字。其用於標識客戶端請求的服務器和服務。
它是網絡通訊過程當中端點的抽象表示,包含進行網絡通訊必需的五種信息:鏈接使用的協議,本地主機的IP地址,本地進程的協議端口,遠地主機的IP地址,遠地進程的協議端口。
中文名
套接字
外文名
socket
鏈接方式
經過傳輸層進行數據通訊
參 數
3
流式套接字
雙向字節流
簡介:
套接字,是支持TCP/IP的網絡通訊的基本操做單元,能夠看作是不一樣主機之間的進程進行雙向通訊的端點,簡單的說就是通訊的兩方的一種約定,用套接字中的相關函數來完成通訊過程。
很是很是簡單的舉例說明下:Socket=Ip address+ TCP/UDP + port。
通訊:
要經過Internet進行通訊,至少須要一對套接字,其中一個運行在客戶端,稱之爲ClientSocket,另外一個運行於服務器端面,稱爲ServerSocket。根據鏈接啓動的方式以及本地要鏈接的目標,套接字之間的鏈接過程能夠分爲三個步驟:服務器監聽、客戶端請求、鏈接確認。
服務器監聽是指服務端套接字並不定位具體的客戶端套接字,而是處於等待鏈接的狀態,實時監控網絡狀態。
客戶端請求是由客戶端的套接字提出鏈接請求,要鏈接的目標是服務器端套接字。爲此,客戶端的套接字必須首先描述它要鏈接的服務器的套接字,指出服務器套接字的地址和端口號,而後再向服務器端套接字提出鏈接請求。
鏈接確認是當服務器端套接字監聽到或者說接收到客戶端套接字的鏈接請求時,它就響應客戶端套接字的請求,創建一個新的線程,把服務器端套接字的信息發送給客戶端,一旦客戶端確認了此鏈接,鏈接便可創建。而服務器端繼續處於監聽狀態,繼續接收其餘客戶端的鏈接請求。
使用套接字進行數據處理有兩種基本模式:同步和異步。
同步模式:
同步模式的特色是在經過Socket進行鏈接、接收、發送數據時,客戶機和服務器在接收到對方響應前會處於阻塞狀態,即一直等到收到對方請求才繼續執行下面的語句。可見,同步模式只適用於數據處理不太多的場合。當程序執行的任務不少時,長時間的等待可能會讓用戶沒法忍受。異步模式:
異步模式的特色是在經過Socket進行鏈接、接收、發送操做時,客戶機或服務器不會處於阻塞方式,而是利用callback機制進行鏈接、接收、發送處理,這樣就能夠在調用發送或接收的方法後直接返回,並繼續執行下面的程序。可見,異步套接字特別適用於進行大量數據處理的場合。
使用同步套接字進行編程比較簡單,而異步套接字編程則比較複雜。
概念:
Transmission Control Protocol/Internet Protocol的簡寫,中譯名爲傳輸控制協議/因特網互聯協議,又名網絡通信協議,是Internet最基本的協議、Internet國際互聯網絡的基礎,由網絡層的IP協議和傳輸層的TCP協議組成。TCP/IP定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標準。協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成本身的需求。通俗而言:TCP負責發現傳輸的問題,一有問題就發出信號,要求從新傳輸,直到全部數據安全正確地傳輸到目的地。而IP是給因特網的每一臺聯網設備規定一個地址。
中文名
傳輸控制協議/因特網互聯協議
外文名
Transmission Control Protocol/Internet Protocol
又 名
網絡通信協議
簡 稱
TCP/IP協議
層級結構
4層
歷史
爲了減小網絡設計的複雜性,大多數網絡都採用分層結構。對於不一樣的網絡,層的數量、名字、內容和功能都不盡相同。在相同的網絡中,一臺機器上的第N層與另外一臺機器上的第N層可利用第N層協議進行通訊,協議基本上是雙方關於如何進行通訊所達成的一致。
不一樣機器中包含的對應層的實體叫作對等進程。在對等進程利用協議進行通訊時,實際上並非直接將數據從一臺機器的第N層傳送到另外一臺機器的第N層,而是每一層都把數據連同該層的控制信息打包交給它的下一層,它的下一層把這些內容看作數據,再加上它這一層的控制信息一塊兒交給更下一層,依此類推,直到最下層。最下層是物理介質,它進行實際的通訊。相鄰層之間有接口,接口定義下層向上層提供的原語操做和服務。相鄰層之間要交換信息,對等接口必須有一致贊成的規則。層和協議的集合被稱爲網絡體系結構。
每一層中的活動元素一般稱爲實體,實體既能夠是軟件實體,也能夠是硬件實體。第N層實體實現的服務被第N+1層所使用。在這種狀況下,第N層稱爲服務提供者,第N+1層稱爲服務用戶。
服務是在服務接入點提供給上層使用的。服務可分爲面向鏈接的服務和麪向無鏈接的服務,它在形式上是由一組原語來描述的。這些原語可供訪問該服務的用戶及其餘實體使用。
名詞定義
IP:
IP層接收由更低層(網絡接口層例如以太網設備驅動程序)發來的數據包,並把該數據包發送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數據包傳送到更低層。IP數據包是不可靠的,由於IP並無作任何事情來確認數據包是否按順序發送的或者有沒有被破壞,IP數據包中含有發送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。
高層的TCP和UDP服務在接收數據包時,一般假設包中的源地址是有效的。也能夠這樣說,IP地址造成了許多服務的認證基礎,這些服務相信數據包是從一個有效的主機發送來的。IP確認包含一個選項,叫做IP source routing,能夠用來指定一條源地址和目的地址之間的直接路徑。對於一些TCP和UDP的服務來講,使用了該選項的IP包好像是從路徑上的最後一個系統傳遞過來的,而不是來自於它的真實地點。這個選項是爲了測試而存在的,說明了它能夠被用來欺騙系統來進行日常是被禁止的鏈接。那麼,許多依靠IP源地址作確認的服務將產生問題而且會被非法入侵。TCP:
TCP是面向鏈接的通訊協議,經過三次握手創建鏈接,通信完成時要拆除鏈接,因爲TCP是面向鏈接的因此只能用於端到端的通信。
TCP提供的是一種可靠的數據流服務,採用「帶重傳的確定確認」技術來實現傳輸的可靠性。TCP還採用一種稱爲「滑動窗口」的方式進行流量控制,所謂窗口實際表示接收能力,用以限制發送方的發送速度。
若是IP數據包中有已經封好的TCP數據包,那麼IP將把它們向‘上’傳送到TCP層。TCP將包排序並進行錯誤檢查,同時實現虛電路間的鏈接。TCP數據包中包括序號和確認,因此未按照順序收到的包能夠被排序,而損壞的包能夠被重傳。
TCP將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最後到接收方。
面向鏈接的服務(例如Telnet、FTP、rlogin、XWindows和SMTP)須要高度的可靠性,因此它們使用了TCP。DNS在某些狀況下使用TCP(發送和接收域名數據庫),但使用UDP傳送有關單個主機的信息。UDP:
UDP是面向無鏈接的通信協議,UDP數據包括目的端口號和源端口號信息,因爲通信不須要鏈接,因此能夠實現廣播發送。
UDP通信時不須要接收方確認,屬於不可靠的傳輸,可能會出現丟包現象,實際應用中要求程序員編程驗證。
UDP與TCP位於同一層,但它無論數據包的順序、錯誤或重發。所以,UDP不被應用於那些使用虛電路的面向鏈接的服務,UDP主要用於那些面向查詢---應答的服務,例如NFS。相對於FTP或Telnet,這些服務須要交換的信息量較小。使用UDP的服務包括NTP(網絡時間協議)和DNS(DNS也使用TCP)。
欺騙UDP包比欺騙TCP包更容易,由於UDP沒有創建初始化鏈接(也能夠稱爲握手)(由於在兩個系統間沒有虛電路),也就是說,與UDP相關的服務面臨着更大的危險。ICMP:
ICMP與IP位於同一層,它被用來傳送IP的控制信息。它主要是用來提供有關通向目的地址的路徑信息。ICMP的‘Redirect’信息通知主機通向其餘系統的更準確的路徑,而‘Unreachable’信息則指出路徑有問題。另外,若是路徑不可用了,ICMP可使TCP鏈接‘體面地’終止。PING是最經常使用的基於ICMP的服務。通信端口:
TCP和UDP服務一般有一個客戶/服務器的關係,例如,一個Telnet服務進程開始在系統上處於空閒狀態,等待着鏈接。用戶使用Telnet客戶程序與服務進程創建一個鏈接。客戶程序向服務進程寫入信息,服務進程讀出信息併發出響應,客戶程序讀出響應並向用戶報告。於是,這個鏈接是雙工的,能夠用來進行讀寫。
兩個系統間的多重Telnet鏈接是如何相互確認並協調一致呢?TCP或UDP鏈接惟一地使用每一個信息中的以下四項進行確認:
(1)源IP地址 發送包的IP地址。
(2)目的IP地址 接收包的IP地址。
(3)源端口 源系統上的鏈接的端口。
(4)目的端口 目的系統上的鏈接的端口。
端口是一個軟件結構,被客戶程序或服務進程用來發送和接收信息。一個端口對應一個16比特的數。服務進程一般使用一個固定的端口,例如,SMTP使用2五、Xwindows使用6000。這些端口號是‘廣爲人知’的,由於在創建與特定的主機或服務的鏈接時,須要這些地址和目的地址進行通信。數據格式:
數據幀:幀頭+IP數據包+幀尾 (幀頭包括源和目標主機MAC初步地址及類型,幀尾是校驗字)
IP數據包:IP頭部+TCP數據信息(IP頭包括源和目標主機IP地址、類型、生存期等)
TCP數據信息:TCP頭部+實際數據(TCP頭包括源和目標主機端口號、順序號、確認號、校驗字等)IP地址:
在Internet上鍊接的全部計算機,從大型機到微型計算機都是以獨立的身份出現,咱們稱它爲主機。爲了實現各主機間的通訊,每臺主機都必須有一個惟一的網絡地址。就好像每個住宅都有惟一的門牌同樣,纔不至於在傳輸資料時出現混亂。
Internet的網絡地址是指連入Internet網絡的計算機的地址編號。因此,在Internet網絡中,網絡地址惟一地標識一臺計算機。
咱們都已經知道,Internet是由幾千萬臺計算機互相鏈接而成的。而咱們要確認網絡上的每一臺計算機,靠的就是能惟一標識該計算機的網絡地址,這個地址就叫作IP(Internet Protocol的簡寫)地址,即用Internet協議語言表示的地址。
在Internet裏,IP地址是一個32位的二進制地址,爲了便於記憶,將它們分爲4組,每組8位,由小數點分開,用四個字節來表示,並且,用點分開的每一個字節的數值範圍是0~255,如202.116.0.1,這種書寫方法叫作點數表示法。
OSI參考模型是ISO的建議,它是爲了使各層上的協議國際標準化而發展起來的。OSI參考模型全稱是開放系統互連參考模型(Open System Interconnection Reference Model)。這一參考模型共分爲七層:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層,如圖1所示。
圖1 OSI參考模型
物理層(Physical Layer)主要是處理機械的、電氣的和過程的接口,以及物理層下的物理傳輸介質等。
數據鏈路層(Data Link Layer)的任務是增強物理層的功能,使其對網絡層顯示爲一條無錯的線路。
網絡層(Network Layer)肯定分組從源端到目的端的路由選擇。路由能夠選用網絡中固定的靜態路由表,也能夠在每一次會話時決定,還能夠根據當前的網絡負載情況,靈活地爲每個分組分別決定。
傳輸層(Transport Layer)從會話層接收數據,並傳輸給網絡層,同時確保到達目的端的各段信息正確無誤,並且使會話層不受硬件變化的影響。一般,會話層每請求創建一個傳輸鏈接,傳輸層就會爲其建立一個獨立的網絡鏈接。但若是傳輸鏈接須要一個較高的吞吐量,傳輸層也能夠爲其建立多個網絡鏈接,讓數據在這些網絡鏈接上分流,以提升吞吐量。而另外一方面,若是建立或維持一個獨立的網絡鏈接不合算,傳輸層也可將幾個傳輸鏈接複用到同一個網絡鏈接上,以下降費用。除了多路複用,傳輸層還須要解決跨網絡鏈接的創建和拆除,並具備流量控制機制。
會話層(Session Layer)容許不一樣機器上的用戶之間創建會話關係,既能夠進行相似傳輸層的普通數據傳輸,也能夠被用於遠程登陸到分時系統或在兩臺機器間傳遞文件。
表示層(Presentation Layer)用於完成一些特定的功能,這些功能因爲常常被請求,所以人們但願有通用的解決辦法,而不是由每一個用戶各自實現。
應用層(Application Layer)中包含了大量人們廣泛須要的協議。不一樣的文件系統有不一樣的文件命名原則和不一樣的文本行表示方法等,不一樣的系統之間傳輸文件還有各類不兼容問題,這些都將由應用層來處理。此外,應用層還有虛擬終端、電子郵件和新聞組等各類通用和專用的功能。
TCP/IP參考模型是首先由ARPANET所使用的網絡體系結構。這個體系結構在它的兩個主要協議出現之後被稱爲TCP/IP參考模型(TCP/IP Reference Model)。這一網絡協議共分爲四層:網絡訪問層、互聯網層、傳輸層和應用層,如圖2所示。
圖2 TCP/IP參考模型
網絡訪問層(Network Access Layer)在TCP/IP參考模型中並無詳細描述,只是指出主機必須使用某種協議與網絡相連。
互聯網層(Internet Layer)是整個體系結構的關鍵部分,其功能是使主機能夠把分組發往任何網絡,並使分組獨立地傳向目標。這些分組可能經由不一樣的網絡,到達的順序和發送的順序也可能不一樣。高層若是須要順序收發,那麼就必須自行處理對分組的排序。互聯網層使用因特網協議(IP,Internet Protocol)。TCP/IP參考模型的互聯網層和OSI參考模型的網絡層在功能上很是類似。
傳輸層(Tramsport Layer)使源端和目的端機器上的對等實體能夠進行會話。在這一層定義了兩個端到端的協議:傳輸控制協議(TCP,Transmission Control Protocol)和用戶數據報協議(UDP,User Datagram Protocol)。TCP是面向鏈接的協議,它提供可靠的報文傳輸和對上層應用的鏈接服務。爲此,除了基本的數據傳輸外,它還有可靠性保證、流量控制、多路複用、優先權和安全性控制等功能。UDP是面向無鏈接的不可靠傳輸的協議,主要用於不須要TCP的排序和流量控制等功能的應用程序。
應用層(Application Layer)包含全部的高層協議,包括:虛擬終端協議(TELNET,TELecommunications NETwork)、文件傳輸協議(FTP,File Transfer Protocol)、電子郵件傳輸協議(SMTP,Simple Mail Transfer Protocol)、域名服務(DNS,Domain Name Service)、網上新聞傳輸協議(NNTP,Net News Transfer Protocol)和超文本傳送協議(HTTP,HyperText Transfer Protocol)等。TELNET容許一臺機器上的用戶登陸到遠程機器上,並進行工做;FTP提供有效地將文件從一臺機器上移到另外一臺機器上的方法;SMTP用於電子郵件的收發;DNS用於把主機名映射到網絡地址;NNTP用於新聞的發佈、檢索和獲取;HTTP用於在WWW上獲取主頁。
層次
TCP/IP協議不是TCP和IP這兩個協議的合稱,而是指因特網整個TCP/IP協議族。
TCP/IP協議模塊關係從協議分層模型方面來說,TCP/IP由四個層次組成:網絡接口層、網絡層、傳輸層、應用層。TCP/IP協議並不徹底符合OSI的七層參考模型,OSI(Open System Interconnect)是傳統的開放式系統互連參考模型,是一種通訊協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各類硬件在相同的層次上相互通訊。這7層是:物理層、數據鏈路層(網絡接口層)、網絡層(網絡層)、傳輸層(傳輸層)、會話層、表示層和應用層(應用層)。而TCP/IP通信協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成本身的需求。因爲ARPANET的設計者注重的是網絡互聯,容許通訊子網(網絡接口層)採用已有的或是未來有的各類協議,因此這個層次中沒有提供專門的協議。實際上,TCP/IP協議能夠經過網絡接口層鏈接到任何網絡上,例如X.25交換網或IEEE802局域網。注意tcp自己不具備數據傳輸中噪音致使的錯誤檢測功能,可是有實現超時的錯誤重傳功能;