客戶端-服務器架構、Socket、TCP/UDP簡介

假如有一天你丟失了銀行卡
你要到銀行去找工作人員(服務器)
排隊掛號等待(FCFS原則)
輪到你了,就去櫃檯和工作人員溝通(建立連接)
對工作人員說“我卡丟了,要掛失”(向服務器提出請求)
工作人員會幫你辦理掛失手續(提供服務,返回響應)
辦理完之後你就可以離開(一個事務結束後斷開服務)
工作人員繼續爲下一個客戶服務(服務器繼續等待下一個客戶端的請求)

以上便是生活中的客戶端-服務器架構

總結一下:

  1. 服務器是個工作狂,它會一直處於工作狀態,等待客戶的到來,即使當前沒有一個客戶
  2. 服務器可以是硬件, 也可以是軟件。硬件服務器:打印機,文件服務器。軟件服務器:Web服務器,數據庫服務器,窗口服務器(遠程控制桌面)

上面介紹了生活中的客戶端-服務器架構。那麼,在網路中,我們是如何實現這種架構的呢?

我們知道,在生活中如果你想提供服務的話,你得有個門面,再不濟也得有個小攤吧。要不然客戶怎麼知道你在哪?怎麼跟你聯繫?同理,網絡上我們也要有這麼一個攤位,我們叫通訊端點(Socket)。等我們擺好攤了之後,就可以等待客戶的到來了(客戶端通訊端點的連接)。那麼客戶怎麼和我聯繫呢?現實生活中有2種方式

  1. 我可以把攤位地址發佈出來,讓客戶自己來找
  2. 我可以留個聯繫方式,讓客戶打電話過來

網絡上,我們採用類似第二種,我留個電話(服務端Socket),讓客戶的電話(客戶端Socket)打進來。這樣我們就可以溝通,爲客戶提供服務了。
關於這個電話(Socket),也有2種機型

  1. 老人機:和家人打打電話 (AF_UNIX 基於文件型,進程間的通話)
  2. 智能機:可以上網和陌生人通話 (AF_INET基於網絡型)

通話方式也有兩種:

  1. 高清模式TCP:SOCK_STREAM(可靠,有序,不重複,速度慢,拆分發送)
  2. 流暢模式UDP:SOCK_DGRAM(不可靠,不按順序,重複,整體發送,速度快)

讓我們來具體講講,TCP和UDP到底是什麼概念?(感謝知乎車小胖的分享)

亞當和夏娃生活在兩個山頭,中間隔着萬丈深淵。亞當呢,是個好男人,怕老婆餓着,就想着給老婆10根香蕉。怎麼送?扔唄!

TCP扔法:

亞當:老婆,在嗎?
夏娃:在啊,老公!(建立了虛電路,因爲是根據雙方聲音建立聯繫的)
亞當:我扔10個香蕉給你好不好?
夏娃:好吖好吖
亞當:第一個! (一個一個扔,拆分發送)
夏娃:接到了! 第一個!(確認收到)
亞當:第二個!
等了半天,都沒聽到夏娃的聲音,亞當想一定是剛剛力氣使小了,掉下去了
亞當重新扔一個
亞當:第二個!
夏娃:接到啦!第二個!
。。。
當夏娃喊道第10個的時候,亞當暈倒了:媽的,一共扔過去28個,總算有10個成功到達了 (可靠,不重複,但速度慢)

UDP扔法:

是夫妻哪有不吵架的,這不,小倆口吵架了,亞當怎麼叫夏娃都不吭聲,亞當其實心裏也很氣,但氣歸氣,畢竟是自家媳婦兒,還是怕夏娃餓着
亞當:對面的那個女人,老子扔10個香蕉給你啊,你愛吃不吃!
喊罷,亞當也不一個一個扔,直接一把10個香蕉都扔過去。
也不知道夏娃收到幾個,掉下山幾個。反正10個香蕉已經扔過去了
亞當心想:還是他孃的這種扔法爽!一步到位!哼,臭娘們,愛吃不吃!

比起TCP,UDP簡單粗暴,速度很快,但是不可靠。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章