osi 七層模型(理想模型)
應用層 表示層 會話層 傳輸層 網路層 資料鏈路層 物理層
tcp/ip 四層模型(廣泛應用)
應用層 傳輸層 網路層(internet) 網路介面層(hw / 網絡卡)
對應關係
tcp/ip模型各層對應的協議
應用層協議:http ftp telnet
傳輸層協議(埠號工作在該層):tcp udp
tcp 傳輸控制協議:
可靠協議, 建立在連線上(打**),要求通訊過程中有回應,才能說下一句話。
tcp占用網路資源更多,用在使用賬戶密碼登入或者是對資料完整性有要求的時候
udp 使用者資料報協議:
不可靠協議, 不需要建立連線(發簡訊、寫信)
如果tcp和udp都能使用的場合,網路越差越應該使用udp
port 埠號: (識別到底是哪個應用程式)源&目標
16位-- 2byte short型
埠號一般由iana管理
眾所周知埠:1~1023(1~255之間為眾所周知埠,256~1023埠通常由unix系統占用)如:ftp– 21,telnet-23,http(web)-80
動態或者私有埠 49151— 65535
註冊埠 1024–49150
網路層: ipv4 ipv6 icmp igmp (ip)
網路介面層: arp rarp mpls
a 最高位為0, 只有最高位元組表示網路,剩下位元組表示主機
網路個數 0~ 0x7f
主機個數 0~0xffffff
0.0.0.0 表示本網路
127(即01111111)保留作為本機軟體迴路測試之用
位址範圍 0.0.0.1~~~~ 126.255.255.255
對應的掩碼(網路的位元組數)255.0.0.0
b 最高位為10,最高兩個位元組表示網路,剩下位元組表示主機
網路個數 0~ 0x3fff
主機個數 0~0xffff
位址範圍 128.0.0.0 ~ 191.255.255.255
對應的掩碼(網路的位元組數)255.255.0.0
c 最高位為110,最高三個位元組表示網路,剩下位元組表示主機
網路個數 0~ 0x1fffff
主機個數 0~0xff
位址範圍 192.0.0.0 ~ 223.255.255.255
對應的掩碼(網路的位元組數)255.255.255.0
(192.168.1.2 255.255.255.0都是判斷依據)
d multicast 組播
二進位制表示
11100000 00000000 00000000 00000000 ~ 11101111 11111111 11111111 11111111
轉成十六進製制
224.0.0.0 ~~ 239.255.255.255
另外還有broadcast 廣播位址,最後乙個位元組為255
1、socket()函式
int
socket(int domain, int type, int protocol);
domain 選擇位址型別
ipv4 af_inet
ipv6 af_inet6
type socket 型別
tcp sock_stream
udp sock_dgram
protocol 一般為0 除非是用原始socket
tcp:sockfd = socket(af_inet,sock_stream,0);
udp:sockfd =socket(af_inet, sock_dgram,0);
2、bind()函式—將本地ip位址繫結到埠號
int bind(int sockfd, const
struct sockaddr *addr, socklen_t addrlen);
因為該結構體中的sa_data成員不知如何賦值
struct sockaddr
所以使用同長結構體
struct sockaddr_in //(注意網路位元組序需要轉換)
; 是個32位無符號int , 大端
unsigned
char sin_zero[8];
}
3、listen()、connect()函式
int
listen(int sockfd, int backlog);
intconnect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
listen函式的第乙個引數即為要監聽的socket描述字,第二個引數為相應socket可以排隊的最大連線個數。socket()函式建立的socket預設是乙個主動型別的,listen函式將socket變為被動型別的,等待客戶的連線請求。
connect函式的第乙個引數即為客戶端的socket描述字,第二引數為伺服器的socket位址,第三個引數為socket位址的長度。客戶端通過呼叫connect函式來建立與tcp伺服器的連線。
4、accept()函式
int
accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
accept函式的第乙個引數為伺服器的socket描述字,第二個引數為指向struct sockaddr *的指標,用於返回客戶端的協議位址,第三個引數為協議位址的長度。如果accpet成功,那麼其返回值是由核心自動生成的乙個全新的描述字,代表與返回客戶的tcp連線。
5、send ()、recv ()等函式
#include
ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);
ssize_t send(int sockfd, const
void *buff, size_t nbytes, int flags);
6、close()函式—關閉socket 結束通訊
#include
int close(int fd);
嵌入式Linux網路程式設計(一)
網路協議 國際標準組織 iso 制定了osi模型,把網路通訊分為7層。而tcp ip將網路通訊分為4層 應用層,傳輸層,網路互連層,網路介面層。socket介面是tcp ip網路的api,定義了許多函式和例子。1 結構體sockaddr struct sockaddr sa family 一般是af...
Linux嵌入式之 網路程式設計socket
socket是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。門面模式,用自己的話說,就是系統對外界...
嵌入式程式設計
1 interrupt double compute area double radis 1 isr不能返回乙個值。2 isr不能傳遞引數。3 在許多處理器中浮點是不可重入的。4 printf 經常有重入和效能上的問題,所以一般不使用printf 2.volatile 1 volatile的語法和c...