標籤:ber 定位 顯示 編碼方式 適合 傳輸層 ip協議 top 可靠
從字面意思來看TCP/IP是TCP和IP協議的合稱,但實際上TCP/IP協議是指網際網路整個TCP/IP協議族。不同於ISO模型的七個分層,TCP/IP協議參考模型把所有的TCP/IP系列協議歸類到四個抽象層中
應用程式層:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
傳輸層:TCP,UDP
網路層:IP,ICMP,OSPF,EIGRP,IGMP
資料連結層:SLIP,CSLIP,PPP,MTU
每一抽象層建立在低一層提供的服務上,並且為高一層提供服務,看起來大概是這樣子的
TCP每發送一個報文段,就啟動一個定時器,如果在定時器逾時之後還沒有收到ACK確認,就重傳該報文。 ,資料包由A的緩衝區發往B,B在收到資料包以後,回傳一個ACK確認包給A,之後A將該資料包從緩衝區釋放。因此,該資料包會一直緩衝在A的緩衝區,直到一個ACK確認為止。 TCP每發送一個報文段,就啟動一個定時器,如果在定時器逾時之後還沒有收到ACK確認,就重傳該報文。 ,資料包由A的緩衝區發往B,B在收到資料包以後,回傳一個ACK確認包給A,之後A將該資料包從緩衝區釋放。因此,該資料包會一直緩衝在A的緩衝區,直到一個ACK確認為止。
在TCP/IP協議中,TCP協議提供可靠的連線導向的服務;三向交握(建立串連)和四次揮手(關閉串連);使用滑動視窗機制進行流量控制;
三向交握
在TCP/IP協議中,TCP協議通過三向交握建立一個可靠的串連
第一次握手:用戶端嘗試串連伺服器,向伺服器發送syn包(同步序列編號Synchronize Sequence Numbers),syn=j,用戶端進入SYN_SEND狀態等待伺服器確認
第二次握手:伺服器接收用戶端syn包並確認(ack=j+1),同時向用戶端發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態
第三向交握:第三向交握:用戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,用戶端和伺服器進入ESTABLISHED狀態,完成三向交握
三向交握的目的是同步串連雙方的序號和確認號並交換 TCP 視窗大小資訊。socket通訊流程
socket起源於UNIX,在Unix一切皆檔案哲學的思想下,socket是一種"開啟—讀/寫—關閉"模式的實現,伺服器和用戶端各自維護一個"檔案",在建立串連開啟後,可以向自己檔案寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉檔案。
通訊端(socket)概念通訊端(socket)是通訊的基石,是支援TCP/IP協議的網路通訊的基本操作單元。它是網路通訊過程中端點的抽象表示,包含進行網路通訊必須的五種資訊:串連使用的協議,本地主機的IP地址,本地進程的協議連接埠,遠地主機的IP地址,遠地進程的協議連接埠。
應 用層通過傳輸層進行資料通訊時,TCP會遇到同時為多個應用程式進程提供並發服務的問題。多個TCP串連或多個應用程式進程可能需要通過同一個 TCP協 議連接埠傳輸資料。為了區別不同的應用程式進程和串連,許多電腦作業系統為應用程式與TCP/IP協議互動提供了通訊端(Socket)介面。應用程式層可以 和傳輸層通過Socket介面,區分來自不同應用程式進程或網路連接的通訊,實現資料轉送的並發服務。
socket是"開啟—讀/寫—關閉"模式的實現,以使用TCP協議通訊的socket為例,其互動流程大概是這樣子的socket通訊流程
socket起源於UNIX,在Unix一切皆檔案哲學的思想下,socket是一種"開啟—讀/寫—關閉"模式的實現,伺服器和用戶端各自維護一個"檔案",在建立串連開啟後,可以向自己檔案寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉檔案。
通訊端(socket)概念
通訊端(socket)是通訊的基石,是支援TCP/IP協議的網路通訊的基本操作單元。它是網路通訊過程中端點的抽象表示,包含進行網路通訊必須的五種資訊:串連使用的協議,本地主機的IP地址,本地進程的協議連接埠,遠地主機的IP地址,遠地進程的協議連接埠。
應用程式層通過傳輸層進行資料通訊時,TCP會遇到同時為多個應用程式進程提供並發服務的問題。多個TCP串連或多個應用程式進程可能需要通過同一個 TCP協 議連接埠傳輸資料。為了區別不同的應用程式進程和串連,許多電腦作業系統為應用程式與TCP/IP協議互動提供了通訊端(Socket)介面。應用程式層可以 和傳輸層通過Socket介面,區分來自不同應用程式進程或網路連接的通訊,實現資料轉送的並發服務。
socket是"開啟—讀/寫—關閉"模式的實現,以使用TCP協議通訊的socket為例,其互動流程大概是這樣子的
利用Socket建立網路連接的步驟
建立Socket串連至少需要一對通訊端,其中一個運行於用戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。
通訊端之間的串連過程分為三個步驟:伺服器監聽,用戶端請求,串連確認。
1、伺服器監聽:伺服器端通訊端並不定位具體的用戶端通訊端,而是處於等待串連的狀態,即時監控網路狀態,等待用戶端的串連請求。
2、用戶端請求:指用戶端的通訊端提出串連請求,要串連的目標是伺服器端的通訊端。
為此,用戶端的通訊端必須首先描述它要已連線的服務器的通訊端,指出伺服器端通訊端的地址和連接埠號碼,然後就向伺服器端通訊端提出串連請求。
3、串連確認:當伺服器端通訊端監聽到或者說接收到用戶端通訊端的串連請求時,就響應用戶端通訊端的請求,建立一個新的線程,把伺服器端通訊端的描述發給用戶端,一旦用戶端確認了此描述,雙方就正式建立串連。
而伺服器端通訊端繼續處於監聽狀態,繼續接收其他用戶端通訊端的串連請求。
HTTP連結的特點
HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web連網的基礎,也是手機連網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。
HTTP串連最顯著的特點是用戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放串連。從建立串連到關閉串連的過程稱為“一次串連”。
1)在HTTP 1.0中,用戶端的每次請求都要求建立一次單獨的串連,在處理完本次請求後,就自動釋放串連。
2)在HTTP 1.1中則可以在一次串連中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。
由於HTTP在每次請求結束後都會主動釋放串連,因此HTTP串連是一種“短串連”,要保持用戶端程式的線上狀態,需要不斷地向伺服器發起串連請求。通常的 做法是即時不需要獲得任何資料,用戶端也保持每隔一段固定的時間向伺服器發送一次“保持串連”的請求,伺服器在收到該請求後對用戶端進行回複,表明知道客 戶端“線上”。若伺服器長時間無法收到用戶端的請求,則認為用戶端“下線”,若用戶端長時間無法收到伺服器的回複,則認為網路已經斷開。
HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web連網的基礎,也是手機連網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。
HTTP串連最顯著的特點是用戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放串連。從建立串連到關閉串連的過程稱為“一次串連”。
四、TCP和UDP的區別(考得最多。。快被考爛了我覺得-----)
1、TCP是面向連結的,雖然說網路的不安全不穩定特性決定了多少次握手都不能保證串連的可靠性,但TCP的三向交握在最低限度上(實際上也很大程度上保證了)保證了串連的可靠性;
而UDP不是連線導向的,UDP傳送資料前並不與對方建立串連,對接收到的資料也不發送確認訊號,發送端不知道資料是否會正確接收,當然也不用重發,所以說UDP是不需連線的、不可靠的一種資料轉送協議。
2、也正由於1所說的特點,使得UDP的開銷更小資料轉送速率更高,因為不必進行收發資料的確認,所以UDP的即時性更好。
知道了TCP和UDP的區別,就不難理解為何採用TCP傳輸協議的MSN比採用UDP的QQ傳輸檔案慢了,但並不能說QQ的通訊是不安全的,
因為程式員可以手動對UDP的資料收發進行驗證,比如發送方對每個資料包進行編號然後由接收方進行驗證啊什麼的,
即使是這樣,UDP因為在底層協議的封裝上沒有採用類似TCP的“三向交握”而實現了TCP所無法達到的傳輸效率。
我們訪問一個網頁,各種協議在裡面起的作用。
Socket串連與HTTP串連
由於通常情況下Socket串連就是TCP串連,因此Socket串連一旦建立,通訊雙方即可開始相互發送資料內容,直到雙方串連斷開。但在實際網路應用 中,用戶端到伺服器之間的通訊往往需要穿越多個中間節點,例如路由器、網關、防火牆等,大部分防火牆預設會關閉長時間處於非活躍狀態的串連而導 致 Socket 串連斷連,因此需要通過輪詢告訴網路,該串連處於活躍狀態。
而HTTP串連使用的是“請求—響應”的方式,不僅在請求時需要先建立串連,而且需要用戶端向伺服器發出請求後,伺服器端才能回複資料。
很多情況下,需要伺服器端主動向用戶端推送資料,保持用戶端與伺服器資料的即時與同步。此時若雙方建立的是Socket串連,伺服器就可以直接將資料傳送給 用戶端;若雙方建立的是HTTP串連,則伺服器需要等到用戶端發送一次請求後才能將資料傳回給用戶端,因此,用戶端定時向伺服器端發送串連請求,不僅可以 保持線上,同時也是在“詢問”伺服器是否有新的資料,如果有就將資料傳給用戶端。
首先,糾正一下我以 前一直誤解的概念,我一直以為Http和Tcp是兩種不同的,但是地位對等的協議,雖然知道TCP是傳輸層,而http是應用程式層今天學習了下,知道了 http是要基於TCP串連基礎上的,簡單的說,TCP就是單純建立串連,不涉及任何我們需要請求的實際資料,簡單的傳輸。http是用來收發資料,即實 際應用上來的。
第一:從傳輸層,先說下TCP串連,我們要和服務端串連TCP串連,需要通過三次串連,包括:請求,確認,建立串連。即傳說中的“三向交握協議”。
第一次:C發送一個請求串連的位碼SYN和一個隨機產生的序號給Seq,然後S收到了這些資料。
第二次:S收到了這個請求串連的位碼,啊呀,有人向我發出請求了麼,那我要不要接受他的請求,得實現確認一下,於是,發送了一個確認碼 ACN(seq+1),和SYN,Seq給C,然後C收到了,這個是第二次串連。
第三次:C收到了確認的碼和之前發送的SYN一比較,偶喲,對上了麼,於是他又發送了一個ACN(SEQ+1)給S,S收到以後就確定建立串連,至此,TCP串連建立完成。
簡單就是:請求,確認,串連。
第二:從實際上的資料應用來說http:
在前面用戶端和應用伺服器建立TCP串連之後,就需要用http協議來傳送資料了,HTTP協議簡單來說,還是請求,確認,串連。
總體就是C發送一個HTTP請求給S,S收到了這個http請求,然後返回給Chttp響應,然後C的中介軟體或者說瀏覽器把這些資料渲染成為了網頁,展示在使用者面前。
第一:發送一個http請求給S,這個請求包括要求標頭和請求內容:
request header:
包括了,1.請求的方法是POST/GET,請求的URL,http協議版本2.請求的資料,和編碼方式3是否有cookie和cooies,是否緩衝等。
post和get請求方式的區別是,get把請求內容放在URL後面,但是URL長度有限制。而post是以表單的形勢,適合要輸入密碼之類的,因為不在URL中顯示,所以比較安全。
request body:
即請求的內容.
第二:S收到了http請求,然後根據要求標頭,返回http響應。
response header:包括了1.cookies或者sessions2.狀態嗎3.內容大小等
response body:
即響應的內容,包括,JS什麼的。
第三,C收到了以後,就由瀏覽器完成一系列的渲染,包括執行JS指令碼等。
http、tcp/ip、socket