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...