網絡編程套接字

一,基礎知識

1.源目標地址和目的地址
源目標地址:指明瞭此數據包是由哪個IP發送出來的。
目的IP地址 :指明瞭此數據包的目的地址是哪個IP。
2.端口號
端口號是傳輸層協議的內容。
(1)端口號是一個2字節16位的整數
(2)端口號用來標識唯一一個網絡進程,告訴操作系統,當前這個數據要交給哪一個進程來進行處理。
(3)IP地址+端口號能夠標識網絡上某一個主機的某一個進程。
(4)一個端口號只能被一個進程佔用。
3.pid也標識一個進程,端口號也標識一個進程,兩者有什麼區別?
區別:就像是一個學生既有身份證號,又有學號是一樣的。
端口號用來標識本主機上唯一一個網絡進程。
pid是操作系統對進程的一個標識。
公網IP用來標識互聯網中唯一一臺主機。
4.源端口號和目的端口號
源端口號標識發起通信的那個進程
目的端口號標識接受通信的那個進程。

二,TCP協議和UDP協議

1.概念:
(1)TCP/IP(Transmission Control Protocol/Internet Protocol) 即傳輸控制協議/網間協議,是一種面向連接(連接導向)的、可靠的、基於字節流的運輸層(Transport layer)通信協議。–》買東西,網上支付會用到它。

有連接,可靠傳輸,面向字節流
(2)UDP協議全稱是用戶數據報協議,在網絡中它與TCP協議一樣用於處理數據包,是一種無連接的協議。在OSI模型中,在第四層——傳輸層,處於IP協議的上一層。UDP有不提供數據包分組、組裝和不能對數據包進行排序的缺點,也就是說,當報文發送之後,是無法得知其是否安全完整到達的。—》看視頻,直播
無連接,不可靠傳輸,面向數據報

三,網絡字節序

1.關於計算機組成原理中的中斷
想問一下,假如計算機中沒有中斷,比如我們鍵盤打字,有中斷的時候,這些字符轉進入緩存區,發生中斷再讓CPU執行,如果沒有中斷是不是CPU就會一直等待我們輸入,每輸入一個CPU就會去執行?

假如你輸入的同時又有其他程序要執行呢?那CPU怎麼辦呢?沒有中斷處理的情況下
如果不設置中斷允許,那麼有兩種可能性:所有中斷請求都屏蔽,或所有中斷請求都響應。假如是第一種,那不用說,中斷就沒有意義了。假如是第二種,那麼會產生一個響應先後問題,即如果多箇中斷同時到達,該按照什麼樣的順序去處理的問題。這就會產生一個概念叫中斷優先級。優先級高的中斷優先響應,如掉電中斷,必須立即無條件響應。優先級低的中斷,等到CPU處理完高優先級中斷並恢復現場後,再響應。控制優先級的手段就是中斷允許寄存器。如果CPU判斷某個中斷處於低優先級,就會屏蔽該中斷的IRQ位,此時即使該設備中斷到來,也不會響應。直到更高優先級的中斷完畢後,再恢復被屏蔽的中斷,就可以重新接受響應。

大端:高位數據放在低地址。
小端:高位數據放在高地址。

2.網絡數據中同樣有大小端之分,那麼如何定義網絡數據流中的地址呢?
(1)發送主機通常將發送緩衝區中的數據按內存地址從低到高的順序發出。
(2)接受主機把網絡中上接到的字節一次保存到接受緩存區中,也是按照內存地址從低到高的順序進行緩存。
(3)因此網絡數據流的地址應該這樣規定,先發的數據是低地址,後發的數據是高地址。
(4)TCP/IP協議規定,網絡數據流應該採用大端字節序,即低地址高字節。
(5)不管這臺主機是大端機還是小端機,都會按照TCP/IP這個規定來進行接收/發送數據。
(6)如果當前發送主機是小端,就要將數據轉化成大端,否則就忽略,直接發送即可。

4.socket編程接口

//創建socket文件描述符(TCP/UDP客戶端 + 服務器)
int socket(int domain,int type,int protocol);
域AF_INET  --------   sock_DGRAM 數據報

//綁定端口號(TCP/UDP客戶端 + 服務器)
int bind(int socket,const struct socketaddr* address,socklen_t address_len);

//開始監聽socket(TCP,服務器)
int listen(int socket,int backlog);

//接受請求(TCP,服務器)
int accept(int socket,struct sockaddr* address.socklen_t* address_len);

//建立連接(TCP,服務器)
int connect(int sockfd,const struct sockaddr* addr,socklen_t addrlen);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章