為什麼TCP程式設計裡要設計成分為歡迎套接字和連線套接字?

時間 2021-06-01 02:37:01

1樓:

具體過程是伺服器先開始建立socket(監聽套接字),然後進行bind,listen,最後進行accept,accept返回得到已連線的套接字(此套接字區別於監聽套接字)。

自然要問的是:為什麼要有兩種套接字?

原因很簡單,如果使用乙個描述符的話,那麼它的功能太多,使得使用很不直觀,同時在核心確實產生了乙個這樣的新的套接字描述符,代表與客戶端建立的連線,然而監聽套接字依然在伺服器上原來的那個埠上listen()。

總結一下就是:監聽套接字只負責接收連線請求,將I/O操作轉接給已連線套接字上,來進行read,write操作。

2樓:車小胖

美麗而迷人的海南島亞龍灣,坐落著一奢華五星酒店L,到酒店前台check-in之後,接下來會有一位24小時客房管家會全面接手客人的接待任務,會給客人戴上花環,

送上溫潤的濕巾,還有純正的椰汁,等客人稍事休息後,會引領客人到酒店房間,途中介紹早餐餐廳、中式餐廳、西式餐廳的位置及服務時間,還會介紹幾個游泳池的位置,以及做精油SPA的特色及服務流程,說著說著就來到了房間,會一一介紹房間設施的使用,到最後還會有結束辭:有什麼需要幫助您的,請直接一鍵呼叫我,預祝大家入住愉快!然後甜甜地站在一邊,然後車小胖拿出早就準備好的小費遞了過去…

24小時管家服務熟知客戶的入住時間、離店時間、行李的託運、餐廳預約、SPA預約、送機服務、房間使用過程中的任何問題,這是1對1的VIP服務,讓客人有賓至如歸的超凡體驗。讓我們再來看看經濟型的快捷酒店的入住流程。

你來到快捷酒店的前台,辦理完身份核驗及押金之後,前台給你一張房卡,房間號302,然後你就拖著行李去了房間,至於其它服務沒有,至於你什麼時候離店,只要押金夠多,隨便你住到什麼時候。

上文中的奢華酒店L的前台充當TCP 監聽埠(Listening Socket),新的客人(incoming new TCP connection)入住手續全部由前台處理,如果前台不光要處理入住手續,還要幫客人介紹服務,記錄一些客人狀態資訊(TCP連線狀態、接收傳送位元組流的序號),會耗費很多CPU時間,當有新的客人入住時,前台如果還喋喋不休(監聽程序忙)地忙於上一位客人的解釋工作,那新的客人就無法及時入住,這不是乙個好的體驗。

於是就有了一對一的客房管家服務,一旦前台辦理了入住手續(Accept),就建立(Fork)乙個新的連線Socket,這個Socket擁有完整的TCP五元組,即:

客戶的IP + 客戶的埠號 + TCP + 酒店的IP + 酒店的埠號(和listening埠相同)

這個Socket只提供唯一一位客人的連線請求。

咱們再來看看監聽Socket是什麼樣的?

* + * + TCP + 酒店的IP + 酒店的埠號

有同學肯定已經發現了,前面的兩項怎麼變成了星號?是什麼意思呢?意思是這個socket 可以接受來自任何客戶IP、任何埠號的連線請求(類似酒店前台,只服務新的接入連線)。

而UDP則類似快捷酒店,只提供乙個前台服務(Listening Socket),因為不需要記錄客戶狀態資訊(UDP 是無狀態的),所以乙個監聽埠號足矣:

* + * + UDP + 快捷酒店的IP + 快捷酒店的埠號

關於英文的兩個並列成分,為什麼要加逗號?如下最後一句?

小翻譯倌 首先得清楚include的賓語是動名詞的被動語態being offered,其形式主語teachers in every school,和being offered構成動名詞通格。mental health first aid training和better support是並列關係,作為...

KFC 奶茶原料含有哪些成分?為什麼會使有些消費者失眠?

昨夜星辰昨夜風 高三黨,補課太忙了沒時間喝奶茶。想著明天二模給自己買一杯奶茶喝喝,然後同學沒有機會買奶茶店。就去了肯德基買了九龍金玉,我覺得很難喝,我也沒仔細想,只喝了一半太甜了。九點半喝的,現在凌晨兩點多我還是沒睡著。我明天二模啊!二模!我想哭 Emmmmmm 我 乙個誇口喝茶不會睡不著的人,乙個...

TCP協議中的埠具體指的是什麼,為什麼要有埠,你是怎麼理解的?

李少俠愛闖江湖 埠的概念,我是這樣理解的。和你的差不多。埠號是計算機上的某乙個程序 應用程式 的標識號,通過埠實現了計算機之間程序的通訊。計算機之間資料的傳送是資料報封裝和解封裝的過程。在這個封裝過程中除了封裝ip位址還有封裝埠號。有了埠號當對端計算機收到資料,當資料被解封裝到傳輸層的時候,接下來就...