網(wǎng)絡(luò)七層協(xié)議
網(wǎng)絡(luò)(OSI)七層協(xié)議由下往上分別為物理層、數(shù)據(jù)鏈路層先煎、網(wǎng)絡(luò)層贼涩、傳輸層、會話層薯蝎、表示層和應(yīng)用層遥倦。其中物理層、數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層通常被稱作媒體層占锯,是網(wǎng)絡(luò)工程師所研究的對象袒哥;傳輸層、會話層消略、表示層和應(yīng)用層則被稱作主機層堡称,是用戶所面向和關(guān)心的內(nèi)容。
從上到下分別是:
應(yīng)用層
示例:TELNET艺演,HTTP却紧,F(xiàn)TP,NFS胎撤,SMTP等晓殊。
表示層
示例:加密,ASCII等伤提。
會話層
示例:RPC巫俺,SQL等。
傳輸層
示例:TCP肿男,UDP介汹,SPX。
網(wǎng)絡(luò)層
示例:IP舶沛,IPX等嘹承。
數(shù)據(jù)鏈路層
示例:ATM,F(xiàn)DDI等冠王。
物理層
示例:Rj45赶撰,802.3等。
HTTP協(xié)議對應(yīng)于應(yīng)用層,TCP協(xié)議對應(yīng)于傳輸層豪娜,IP協(xié)議對應(yīng)于網(wǎng)絡(luò)層餐胀,HTTP協(xié)議是基于TCP連接的,三者本質(zhì)上沒有可比性。 TCP/IP是傳輸層協(xié)議瘤载,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸否灾;而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)鸣奔。Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層墨技,是它的一組接口。
Socket(套接字)
socket是通信的基石挎狸,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元扣汪,包含進行網(wǎng)絡(luò)通信必須的五種信息:
- 連接使用的協(xié)議
- 本地主機的IP地址
- 本地進程的協(xié)議端口
- 遠地主機的IP地址
- 遠地進程的協(xié)議端口
多個TCP連接或多個應(yīng)用程序進程可能需要通過同一個TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進程和連接锨匆,計算機操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了 套接字(Socket) 接口崭别。應(yīng)用層可以和傳輸層通過Socket接口,區(qū)分來自不同應(yīng)用程序進程或網(wǎng)絡(luò)連接的通信恐锣,實現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)茅主。
建立Socket連接至少需要一對套接字,其中一個運行于客戶端土榴,稱為ClientSocket诀姚,另一個運行于服務(wù)器端,稱為ServerSocket玷禽。
套接字之間的連接過程分為三個步驟:服務(wù)器監(jiān)聽赫段,客戶端請求,連接確認论衍。
Socket可以支持不同的傳輸層協(xié)議(TCP/UDP)瑞佩,當(dāng)使用TCP協(xié)議進行連接時聚磺,該Socket連接就是一個TCP連接,UDP連接同理坯台。
TCP/IP五層模型
? TCP/IP五層模型的協(xié)議分為:應(yīng)用層、傳輸層瘫寝、網(wǎng)絡(luò)層蜒蕾、數(shù)據(jù)鏈路層和物理層。中繼器焕阿、集線器咪啡、還有我們通常說的雙絞線也工作在物理層;網(wǎng)橋(現(xiàn)已很少使用)暮屡、以太網(wǎng)交換機(二層交換機)撤摸、網(wǎng)卡(其實網(wǎng)卡是一半工作在物理層、一半工作在數(shù)據(jù)鏈路層)在數(shù)據(jù)鏈路層;路由器准夷、三層交換機在網(wǎng)絡(luò)層钥飞;傳輸層主要是四層交換機、也有工作在四層的路由器衫嵌。
? TCP/IP協(xié)議中的應(yīng)用層處理七層模型中的第五層读宙、第六層和第七層的功能。TCP/IP協(xié)議中的傳輸層并不能總是保證在傳輸層可靠地傳輸數(shù)據(jù)包楔绞,而七層模型可以做到结闸。TCP/IP協(xié)議還提供一項名為UDP(用戶數(shù)據(jù)報協(xié)議)的選擇。UDP不能保證可靠的數(shù)據(jù)包傳輸酒朵。
TCP協(xié)議和UDP協(xié)議的區(qū)別有哪些桦锄?
TCP(傳輸控制協(xié)議,Transmission Control Protocol):
1)提供IP環(huán)境下的數(shù)據(jù)可靠傳輸(一臺計算機發(fā)出的字節(jié)流會無差錯的發(fā)往網(wǎng)絡(luò)上的其他計算機蔫耽,而且計算機A接收數(shù)據(jù)包的時候察纯,也會向計算機B回發(fā)數(shù)據(jù)包,這也會產(chǎn)生部分通信量)针肥,有效流控饼记,全雙工操作(數(shù)據(jù)在兩個方向上能同時傳遞),多路復(fù)用服務(wù)慰枕,是面向連接具则,端到端的傳輸;
2)面向連接:正式通信前必須要與對方建立連接。事先為所發(fā)送的數(shù)據(jù)開辟出連接好的通道具帮,然后再進行數(shù)據(jù)發(fā)送博肋,像打電話。
3)TCP支持的應(yīng)用協(xié)議:Telnet(遠程登錄)蜂厅、FTP(文件傳輸協(xié)議)匪凡、SMTP(簡單郵件傳輸協(xié)議)。TCP用于傳輸數(shù)據(jù)量大掘猿,可靠性要求高的應(yīng)用病游。
UDP(用戶數(shù)據(jù)報協(xié)議,User Datagram Protocol)
1)面向非連接的(正式通信前不必與對方建立連接稠通,不管對方狀態(tài)就直接發(fā)送衬衬,像短信,QQ)改橘,不能提供可靠性滋尉、流控、差錯恢復(fù)功能飞主。UDP用于一次只傳送少量數(shù)據(jù)狮惜,可靠性要求低高诺、傳輸經(jīng)濟等應(yīng)用。
- UDP支持的應(yīng)用協(xié)議:NFS(網(wǎng)絡(luò)文件系統(tǒng))碾篡、SNMP(簡單網(wǎng)絡(luò)管理系統(tǒng))懒叛、DNS(主域名稱系統(tǒng))、TFTP(通用文件傳輸協(xié)議)等耽梅。
總結(jié):
TCP:面向連接薛窥、傳輸可靠(保證數(shù)據(jù)正確性,保證數(shù)據(jù)順序)、用于傳輸大量數(shù)據(jù)(流模式)眼姐、速度慢诅迷,建立連接需要開銷較多(時間,系統(tǒng)資源)众旗。
UDP:面向非連接罢杉、傳輸不可靠、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)贡歧、速度快滩租。
TCP和UDP協(xié)議的一些應(yīng)用例子:
TCP一般用于文件傳輸(FTP HTTP 對數(shù)據(jù)準(zhǔn)確性要求高,速度可以相對慢)利朵,發(fā)送或接收郵件(POP IMAP SMTP 對數(shù)據(jù)準(zhǔn)確性要求高律想,非緊急應(yīng)用),遠程登錄(TELNET SSH 對數(shù)據(jù)準(zhǔn)確性有一定要求绍弟,有連接的概念)等等技即;UDP一般用于即時通信(QQ聊天 對數(shù)據(jù)準(zhǔn)確性和丟包要求比較低,但速度必須快)樟遣,在線視頻(RTSP 速度一定要快而叼,保證視頻連續(xù),但是偶爾花了一個圖像幀豹悬,人們還是能接受的)葵陵,網(wǎng)絡(luò)語音電話(VoIP 語音數(shù)據(jù)包一般比較小,需要高速發(fā)送瞻佛,偶爾斷音或串音也沒有問題)等等脱篙。
作為知識的擴展,可以再說一些其他應(yīng)用涤久。比如涡尘,TCP可以用于網(wǎng)絡(luò)數(shù)據(jù)庫,分布式高精度計算系統(tǒng)的數(shù)據(jù)傳輸响迂;UDP可以用于服務(wù)系統(tǒng)內(nèi)部之間的數(shù)據(jù)傳輸,因為數(shù)據(jù)可能比較多细疚,內(nèi)部系統(tǒng)局域網(wǎng)內(nèi)的丟包錯包率又很低蔗彤,即便丟包川梅,頂多是操作無效,這種情況下然遏,UDP經(jīng)常被使用贫途。
HTTP協(xié)議傳輸和TCP協(xié)議傳輸?shù)膮^(qū)別?
問:經(jīng)常聽別人說使用HTTP協(xié)議傳輸或者使用TCP協(xié)議傳輸待侵,一直對這個概念有點疑惑丢早,我的理解是HTTP是應(yīng)用層協(xié)議,他只是一種數(shù)據(jù)格式秧倾,最后傳輸還是靠TCP/IP來傳輸?shù)脑乖停垎査麄冋f的對還是我理解的對?
答: TCP/IP主要的作用就是保證連接的可靠性那先,我不管發(fā)出任何東西給你农猬,都要有這一套協(xié)議來保證不丟包比如說TCP協(xié)議就是這樣,無論上層讓他傳啥數(shù)據(jù)售淡,他都通過與IP協(xié)議的操作斤葱,把這些東西分段,然后輸送揖闸,同時保證在這個過程中揍堕,數(shù)據(jù)不會丟,如果丟了一塊汤纸,他還得想辦法重新傳一次鹤啡,這就是TCP/IP的意義。
另外蹲嚣,HTTP協(xié)議递瑰,可以認為主要是用來訪問網(wǎng)頁的,是比TCP更上層的協(xié)議隙畜,HTTP里面規(guī)定了我們訪問網(wǎng)頁的時候如何進行緩存抖部,以及請求什么格式,等等议惰。主要是為了讓人們訪問網(wǎng)頁的時候更快慎颗,更安全,而規(guī)定了很多參數(shù)言询。你可以認為TCP/IP協(xié)議就是搬運工俯萎,保證搬動的東西不被損壞http協(xié)議是做業(yè)務(wù)的,用來決定要不要搬運运杭,以及如何搬運夫啊,從哪去搬運。
UDP與TCP的區(qū)別
- TCP:面向連接辆憔、傳輸可靠(保證數(shù)據(jù)正確性,保證數(shù)據(jù)順序)撇眯、用于傳輸大量數(shù)據(jù)(流模式)报嵌、速度慢,建立連接需要開銷較多(時間熊榛,系統(tǒng)資源)锚国。
- UDP:面向非連接、傳輸不可靠玄坦、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)血筑、速度快。
TCP是一種流模式的協(xié)議煎楣,UDP是一種數(shù)據(jù)報模式的協(xié)議
TCP | UDP | |
---|---|---|
是否連接 | 面向連接 | 面向非連接 |
傳輸可靠性 | 可靠 | 不可靠 |
應(yīng)用場合 | 傳輸大量數(shù)據(jù) | 傳輸少量數(shù)據(jù) |
速度 | 慢 | 快 |
在傳輸數(shù)據(jù)時豺总,可以只使用傳輸層(TCP/IP),但是那樣的話转质,由于沒有應(yīng)用層园欣,便無法識別數(shù)據(jù)內(nèi)容,如果想要使傳輸?shù)臄?shù)據(jù)有意義休蟹,則必須使用應(yīng)用層協(xié)議(HTTP沸枯、FTP、TELNET等)赂弓,也可以自己定義應(yīng)用層協(xié)議绑榴。
WEB使用HTTP作傳輸層協(xié)議,以封裝HTTP文本信息盈魁,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)送到網(wǎng)絡(luò)上翔怎。Socket是對TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議杨耙,而是一個調(diào)用接口(API)赤套,通過Socket,我們才能使用TCP/IP協(xié)議珊膜。
TCP連接
建立起一個TCP連接需要經(jīng)過“三次握手”:
第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器容握,并進入SYN_SEND狀態(tài),等待服務(wù)器確認车柠;
第二次握手:服務(wù)器收到syn包剔氏,必須確認客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k)竹祷,即SYN+ACK包谈跛,此時服務(wù)器進入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包塑陵,向服務(wù)器發(fā)送確認包ACK(ack=k+1)感憾,此包發(fā)送完畢,客戶端和服務(wù)器進入ESTABLISHED狀態(tài)猿妈,完成三次握手吹菱。
三次握手(Three-way Handshake)即建立一個TCP連接時巍虫,需要客戶端和服務(wù)器總共發(fā)送3個包彭则。三次握手的目的是連接服務(wù)器指定端口鳍刷,建立TCP連接,并同步連接雙方的序列號和確認號并交換TCP 窗口大小信息。在socket編程中俯抖,客戶端執(zhí)行connect()時,將觸發(fā)三次握手。
握手過程中傳送的包里不包含數(shù)據(jù),三次握手完畢后艾猜,客戶端與服務(wù)器才正式開始傳送數(shù)據(jù)宙橱。理想狀態(tài)下,TCP連接一旦建立柬祠,在通信雙方中的任何一方主動關(guān)閉連 接之前北戏,TCP 連接都將被一直保持下去。斷開連接時服務(wù)器和客戶端均可以主動發(fā)起斷開TCP連接的請求漫蛔,斷開過程需要經(jīng)過“四次揮手”
TCP連接的拆除需要發(fā)送四個包嗜愈,因此稱為四次揮手(four-way handshake)。在socket編程中莽龟,任何一方執(zhí)行close()操作即可產(chǎn)生“揮手”操作蠕嫁。
HTTP連接
HTTP協(xié)議即超文本傳送協(xié)議(HypertextTransfer Protocol ),是Web聯(lián)網(wǎng)的基礎(chǔ)毯盈,也是手機聯(lián)網(wǎng)常用的協(xié)議之一剃毒,HTTP協(xié)議是建立在TCP協(xié)議之上的一種應(yīng)用。
HTTP連接最顯著的特點是:客戶端發(fā)送的每次請求都需要服務(wù)器回送響應(yīng)搂赋,在請求結(jié)束后赘阀,會主動釋放連接。從建立連接到關(guān)閉連接的過程稱為“一次連接”脑奠。因此HTTP連接是一種“短連接”基公,要保持客戶端程序的在線狀態(tài),需要不斷地向服務(wù)器發(fā)起連接請求捺信。若服務(wù)器長時間無法收到客戶端的請求酌媒,則認為客戶端“下線”,若客戶端長時間無法收到服務(wù)器的回復(fù)迄靠,則認為網(wǎng)絡(luò)已經(jīng)斷開秒咨。
在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接掌挚,在處理完本次請求后雨席,就自動釋放連接。在HTTP 1.1中則可以在一次連接中處理多個請求吠式,并且多個請求可以重疊進行陡厘,不需要等待一個請求結(jié)束后再發(fā)送下一個請求抽米。
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標(biāo)的HTTP通道糙置,是HTTP的安全版云茸。 在HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL谤饭,因此加密的詳細內(nèi)容就需要SSL标捺。 HTTPS存在不同于HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。HTTP協(xié)議以明文方式發(fā)送內(nèi)容揉抵,不提供任何方式的數(shù)據(jù)加密亡容,如果攻擊者截取了Web瀏覽器和網(wǎng)站服務(wù)器之間的傳輸報文,就可以直接讀懂其中的信息冤今,因此HTTP協(xié)議不適合傳輸一些敏感信息闺兢。
HTTP和HTTPS的區(qū)別?
- HTTPS協(xié)議需要到CA申請證書戏罢;
- HTTP是超文本傳輸協(xié)議屋谭,信息是明文傳輸,HTTPS 則是具有安全性的ssl加密傳輸協(xié)議帖汞;
- HTTP和HTTPS使用的是完全不同的連接方式戴而,用的端口也不一樣,前者是80翩蘸,后者是443所意;
- HTTP的連接很簡單,是無狀態(tài)的催首,HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進行加密傳輸扶踊、身份認證的網(wǎng)絡(luò)協(xié)議。
Socket連接與HTTP連接的不同
通常情況下Socket連接就是TCP連接郎任,因此Socket連接一旦建立秧耗,通信雙方即可開始相互發(fā)送數(shù)據(jù)內(nèi)容,直到雙方連接斷開舶治。但在實際應(yīng)用中分井,客戶端到服務(wù)器之間的通信防火墻默認會關(guān)閉長時間處于非活躍狀態(tài)的連接而導(dǎo)致 Socket 連接斷連,因此需要通過輪詢告訴網(wǎng)絡(luò)霉猛,該連接處于活躍狀態(tài)尺锚。
而HTTP連接使用的是“請求—響應(yīng)”的方式,不僅在請求時需要先建立連接惜浅,而且需要客戶端向服務(wù)器發(fā)出請求后瘫辩,服務(wù)器端才能回復(fù)數(shù)據(jù)。
寫在最后
- 我一直以為HTTP和TCP是兩種不同的、但是地位對等的協(xié)議伐厌,雖然知道TCP是傳輸層承绸,而HTTP是應(yīng)用層,但是不知道HTTP是要基于TCP連接基礎(chǔ)上的挣轨,簡單的說军熏,TCP就是單純建立連接,不涉及任何我們需要請求的實際數(shù)據(jù)刃唐,簡單的傳輸羞迷。HTTP是用來收發(fā)數(shù)據(jù)界轩,即實際應(yīng)用上來的画饥。
- TCP是底層通訊協(xié)議,定義的是數(shù)據(jù)傳輸和連接方式的規(guī)范HTTP是應(yīng)用層協(xié)議浊猾,定義的是傳輸數(shù)據(jù)的內(nèi)容的規(guī)范HTTP協(xié)議中的數(shù)據(jù)是利用TCP協(xié)議傳輸?shù)亩陡剩灾С諬TTP也就一定支持TCP。
- HTTP支持的是www服務(wù)葫慎,而TCP/IP是協(xié)議它是Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)衔彻。TCP/IP是網(wǎng)絡(luò)中使用的基本的通信協(xié)議。TCP/IP實際上是一組協(xié)議偷办,它包括上百個各種功能的協(xié)議艰额,如:遠程登錄、文件傳輸和電子郵件等椒涯,而TCP協(xié)議和IP協(xié)議是保證數(shù)據(jù)完整傳輸?shù)膬蓚€基本的重要協(xié)議柄沮。通常說TCP/IP是Internet協(xié)議族,而不單單是TCP和IP废岂。