網路基礎與socket程式設計

2021-08-22 07:05:26 字數 3902 閱讀 4681

1.osi七層模型:下--->上

物理層-->資料鏈路層-->網路層-->傳輸層-->會話層-->表示層-->應用層

2.tcp / ip 五層模型(下--->上)

1)物理層(乙太網協議):負責光 / 電訊號的傳遞方式。比如:網線(雙絞線)、同軸電纜、光纖、wifi等。物理層的能力決          定了最大傳輸速率、傳輸距離、抗干擾等。工作在物理層的集線器:實現資料轉換和放大。

2)資料鏈路層(乙太網協議):負責兩個相鄰裝置之間的資料幀的傳送和識別。比如:幀同步,衝突檢測,資料差錯校驗。

早期典型的交換機工作在資料鏈路層。

3)網路層(ip協議)4)傳輸層(tcp udp協議):負責兩台主機上應用程式之間的資料傳輸。比如:tcp協議,確保資料可靠的從源主機傳送到目標主機。

5)應用層(好多協議):負責應用程式之間的溝通。(面向使用者的需求)比如:簡單的電子郵件傳輸(swtp)、檔案傳輸協議     (ftp)、網路遠端訪問協議(telnet)等。

一般而言:

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

(2)對於一台路由器,它實現了從網路層到物理層。

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

(4)對於集線器,它只實現了物理層。

3.資料報封裝和分用:

分用:資料封裝成幀後傳送到傳輸介質上,到達目的主機後每層協議再剝掉相應的首部的該過程

下面用圖示意:

1.ip位址

1)ipv4和ipv6不相容。

2)ip位址是在ip協議中,用來標識網路中不同主機的位址

3)對於ipv4來說,ip位址是乙個4位元組,32位的(無符號)整數。

4)通常使用「點分十進位制」的字串表示ip位址,用點分割的每乙個數字表示乙個位元組,範圍是0--255.

2.埠號

1)埠號是傳輸層協議的內容

2)埠號是乙個2位元組16位的整數(0--65535)

3)埠號標識乙個程序。(程序id是會變化的)告訴作業系統,當前這個資料交給哪乙個程序來處理。

5)乙個埠號只能被乙個程序占用。(如果被多個程序占用,就不知要傳送到**去)。乙個程序可以使用多個埠號。

3.tcp協議

tcp(transmission control protocol):傳輸控制協議

1)傳輸層協議

2)有連線(面向連線):先建立一種連線,確保可以傳輸(eg:打**)

3)可靠傳輸:使用某種方法保證資料不丟失(也因為是有連線,所以可靠)

4)面向位元組流:資料之間沒有明確的分割,資料無固定的格式,可以分開傳輸,分開接收。

5)全雙工:有傳送緩衝區,接收緩衝區,對於乙個連線,既可以讀也可以寫。

4.udp協議

udp(user datagram protocol):使用者資料報協議

1)傳輸層協議

2)無連線(面向無連線):不建立連線,不管對方是否能收到,自己只管傳送。

3)不可靠傳輸:正因為是無連線,所以傳輸不可靠

4)面向資料報:資料之間不可以分開接收,要整體傳輸,整體接收。

5)全雙工:udp的socket能讀也能寫

5.面向位元組序

1)面向位元組序是一種資料訪問的方式

3)tcp/ip協議中規定:網路位元組序-->大端位元組序(資料的高位存放在低位址處)

主機位元組序-->不固定的

4)大於1個位元組的,就要大小端轉換。

1.建立socket(tcp/udp; 客戶端/伺服器)

功能:建立與網絡卡驅動之間的乙個聯絡

標頭檔案: #include

#include

int socket(int domain, int type, int protocol);

type :1)tcp的流式套接字:sock_stream

2)udp的資料報套接字:sock_dgram

protocol: 某種協議

tcp:ipproto_tcp (6)

udp:ipproto_udp (17)

2.繫結埠號(tcp/udp; 伺服器)

int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

3.監聽(tcp ;伺服器 )

int listen(int sockfd, int backlog);

backlog:表示同時最多有幾個客戶端連線成功

4.接受請求(tcp ;伺服器)

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

5.建立連線(tcp ;客戶端)

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen)

1)inet_addr:

in_addr_t inet_addr(const char *cp);

2)inet_ntoa

char *inet_ntoa(struct in_addr in)

3)htonl :(長整型)

uint32_t htonl(uint32_t hostlong);

功能:將主機數轉換成無符號長整形的網路位元組序

4) htons:(短整形)

uint16_t htons(uint16_t hostshort)

功能:將主機數轉換成無符號短整形的網路位元組序

5)recvfrom:(udp)

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen)

recvfrom函式中,socket* addrlen 不能為0

6)sendto:(udp)

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);

recvfrom和sendto 的返回值:(成功)實際接收或是傳送的資料的長度也不一定是想要的資料長度

(失敗):-1

伺服器先接收資料,客戶端先傳送資料。(伺服器不知道客戶端ip位址)

tcp 建立套接字:

socket網路程式設計基礎

伺服器與客戶端 p94 p98先學習基礎 再學習socket程式設計 參考socket,也叫套接字,描述了計算機是ip位址和埠,電腦程式之間採用socket進行通訊。socket把複雜的tcp ip協議族隱藏在介面後面,方便使用。tcp提供流和資料報兩種通訊方式,所以套接字也分為流套接字和資料報套接...

網路基礎 Socket程式設計

tpc的服務端要先監聽乙個埠,一般是先呼叫bind函式,給這個soket賦予乙個ip位址和埠。當服務端有了ip和埠號,就可以呼叫listen函式進行監聽。這時候客戶端就可以發起連線了。在作業系統中,為每個socket維護兩個佇列。乙個是已經建立了連線的佇列,三次握手已完畢,處於established...

網路基礎之 網路基礎,socket程式設計

1 什麼是socket 網路基礎 socket 2 為何要學習socket程式設計 基於socket開發乙個c s或者b s結構的軟體 client 網路 server browser 網路 server 3 如何基於socket程式設計 網路 網路是什麼 底層的物理連線介質 網際網路通訊協議 os...