Socket碍论、TCP、UDP柄慰、HTTP骑冗、HTTPS

網(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)用。

  1. 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废岂。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末祖搓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子湖苞,更是在濱河造成了極大的恐慌拯欧,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件财骨,死亡現(xiàn)場離奇詭異镐作,居然都是意外死亡,警方通過查閱死者的電腦和手機隆箩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門该贾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人摘仅,你說我怎么就攤上這事靶庙。” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵六荒,是天一觀的道長护姆。 經(jīng)常有香客問我,道長掏击,這世上最難降的妖魔是什么卵皂? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮砚亭,結(jié)果婚禮上灯变,老公的妹妹穿的比我還像新娘。我一直安慰自己捅膘,他們只是感情好添祸,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寻仗,像睡著了一般刃泌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上署尤,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天耙替,我揣著相機與錄音,去河邊找鬼曹体。 笑死俗扇,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的箕别。 我是一名探鬼主播铜幽,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼究孕!你這毒婦竟也來了啥酱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤厨诸,失蹤者是張志新(化名)和其女友劉穎镶殷,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體微酬,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡绘趋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了颗管。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陷遮。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖垦江,靈堂內(nèi)的尸體忽然破棺而出帽馋,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布绽族,位于F島的核電站姨涡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吧慢。R本人自食惡果不足惜涛漂,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望检诗。 院中可真熱鬧匈仗,春花似錦、人聲如沸逢慌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涕癣。三九已至哗蜈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坠韩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工炼列, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留只搁,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓俭尖,卻偏偏與公主長得像氢惋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子稽犁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容