認識網路(一) 幹一輩子革命學一輩子c

2022-09-22 23:21:25 字數 2239 閱讀 4807

網路

網路其實就是跨主機的「程序間」通訊協議分層

分層的意義:網路協議比較複雜,如果不拆分就會很複雜

分層的好處:拆分成多個模組相當於降低了整個系統的耦合程度,根據實際需要,隨時可以替換其中的某一層協議osi七層模型:

tcp/ip五層(或四層)模型

由圖可見網路層和傳輸層都是由作業系統核心來實現的,我們所開發的程式就是呼叫這些核心提供的傳輸層系統呼叫(socket api)來完成應用層的程式。每一層都包含了不同的協議。網路中的常見裝置和協議的關係:

對於一台主機, 它的作業系統核心實現了從傳輸層到物理層的內容;

對於一台路由器, 它實現了從網路層到物理層;

對於一台交換機, 它實現了從資料鏈路層到物理層;

對於集線器, 它只實現了物理層;上下層協議之間互動資料的時候兩步:封裝和分用(就相當於是包裝快遞和拆快遞)認識tcp和udp協議tcp:

傳輸層協議

有連線(打**,必須雙方同意通訊)

可靠傳輸(知道資料是否傳送成功,本質上靠對方的反饋)

面向位元組流(傳送資料和接收資料可以隨意控制,非常靈活,水管的例子)udp:

傳輸層協議

無連線(發qq,不需要雙方同意通訊)

不可靠傳輸(不知道資料是否傳送成功)

面向資料報(一次發多少資料一次就要接多少,否則會造成資料的損失,對讀寫要求嚴格,讀寫一致)網路位元組序(大端序),統一轉化為大端序再傳送到網路上,主機位元組序(不確定,和機器相關)相關函式:h->主機 n->網路

socket

服務端和客戶端主動傳送資料的是客戶端,被動接受的是服務端,乙個程序是客戶端和伺服器端都不是固定的埠號:埠號(port)是傳輸層協議的內容.埠號是乙個2位元組16位的整數;埠號用來標識乙個程序, 告訴作業系統, 當前的這個資料要交給哪乙個程序來處理;ip位址 + 埠號能夠標識網路上的某一台主機的某乙個程序;乙個埠號只能被乙個程序占用.socket函式系列

socket函式(客戶端+伺服器)的返回值本質上是乙個檔案描述符,但不是和磁碟上的檔案對應,而是和網絡卡這樣的裝置對應,對應的檔案型別是socket型別(tcp/udp)

bind(通常是伺服器使用,客戶端也可以但是很少用,客戶端不bind作業系統將會隨機分配埠號,伺服器是不能隨機【導致產生隨機變化客戶端埠號,使伺服器無法連線】) 作用是把socket檔案和埠號關聯在一起(繫結埠號),乙個程序可以關聯到多個埠號,因為bind將埠號和檔案描述符關聯,而乙個程序可以建立多個socket檔案描述符,反之乙個埠號只能找到乙個程序(tcp/udp)理解bind第二個引數 const struct sockaddr address這是乙個結構體,它的結構如下:

struct sockaddr_in 這個結構體是struct sockaddr的一種特殊形式,ipv4是用這種結構表示的,其中有16位位址型別、16位埠號和32位ip位址,ipv4、ipv6位址型別分別定義為常數af_inet、af_inet6. 這樣,只要取得某種sockaddr結構體的首位址,不需要知道具體是哪種型別的sockaddr結構體,就可以根據位址型別字段確定結構體中的內容,而我們通常是通過設定struct sockaddr_in 這個結構體並且在使用時強制轉化為(sockaddr )這樣做雖然麻煩,但是提高了程式的通用性。

listen(伺服器使用)進入監聽狀態,隨時等待客戶端傳送的請求->相當於手機開機訊號良好(tcp)int listen(int s, int backlog);這個函式的第二個引數表示已經完成連線正等待應用程式接收的套接字佇列的長度,描述+組織 -> 所謂的連線指的是五元組(源ip,源埠,目的ip,目的埠,協議),這個佇列就是維護這些連線狀態,而這個佇列是和socket相關的,每個呼叫listen的socket就有乙個這樣的佇列。

accept(伺服器使用)接受鏈結->相當於**來了按下接通鍵(tcp)int accept(int s, struct sockaddr * addr, socklen_t * addrlen);從連線佇列中取乙個連線到使用者**中,如果佇列中沒有連線會阻塞它的返回值也是乙個socket檔案描述符,後續和客戶端的交流都是借助這個返回值它的後兩個引數是出參,返回客戶端的的位址和ip,如果不關心可以傳null

connet(客戶端使用)發起連線請求->相當於給別人撥**(tcp)

傳送/接受read/write:只針對tcp,因為read/write是面向位元組流的recv/send(只針對tcp,比read/write功能更加豐富)recv():recv()的返回值表示讀取成功的位元組數,如果讀取失敗返回-1,如果對端關閉socket返回結果為0recvfrom/sendto(針對udp)

一輩子 好美

走過了很多的春夏秋冬,見過了太多了大事小事,唯有坦然面對才會看到希望就在眼前。一輩子,好短。真的需要好好的疼自己,你的世界,有了自己的那束陽光才更加的耀眼。一輩子,好累。真的不需要苛求自己,一切要達到完美。你的世界,有了你的腳印,你就來過。一輩子,好美。自己的世界,好好綻放自己的美麗。時間飛逝,隨著...

都是一輩子

1.小強每天在村里晃悠,爹媽看著發愁,心想這孩子將來怎麼辦呀 小明每日都苦讀詩書,父母喜在心裡,村裡人都認定他必有出息。2.那年,小強和小明都是十九歲,小強跟著村里的外出打工,來到了高速公路的工地,保底工資三千塊 小明考上了一所重點大學,讀的是道路與橋梁專業,學費每年五千多。3.那年,小強和小明都是...

一輩子的孤單

我想我會一直孤單 這一輩子都這麼孤單 我想我會一直孤單 這樣孤單一輩子 天空越蔚藍 越怕抬頭看 電影越圓滿 就越覺得傷感 有越多的時間 就越覺得不安 因為我總是孤單 過著孤單的日子 喜歡的人不出現 出現的人不喜歡 有的愛猶豫不決 還在想他就離開 想過要將就一點 卻發現將就更難 於是我學著樂觀 過著孤...