ps:這些文字是參考的unp寫的,但是網路分層的原理都是一樣的,並且懶得專門去寫乙個關於windows的了,所以就這樣~~
網路是分層的,程式設計師關心的是以下4層:
在談論網路資料的時候,如果說到幀,則應該知道是乙太網層。我們一般關心的是tcp——分節,應用層——訊息。
tcp/ip協議不僅僅指的是tcp協議和ip協議,它泛指那些為應用層提供服務的網路協議。其中典型的tcp、udp工作在傳輸層,ip協議工作在tcp和udp下層的網路層。因此可以說網路層是為傳輸層提供服務的,而傳輸層則是為應用層提供服務的。一般很少直接使用網路層進行程式設計,但是也可以使用原始套接字來跳過傳輸層來直接使用網路層進行程式設計。
所謂7層網路模型是指的 osi 7層網路模型——應用程、表示層、會話層、傳輸層、網路層、資料鏈路層、物理層。各個層的作用如下:osi
功能tcp/ip協議
應用程檔案傳輸、電子郵件、檔案服務、虛擬終端
表示層資料格式化、**轉換、資料加密
無協議會話層
解除或建立與其他節點的聯絡
無協議傳輸層
提供端對端的介面
tcp、udp、原始套接字
網路層為資料報選擇路由
ip、icmp、rip、ospf、bgp、igmp
資料鏈路層
傳輸有位址的幀、錯誤檢測
slip,cslip、ppp、arp、rarp、mtu
物理層以二進位制形式在屋裡媒介上傳輸資料
iso2110、ieee802
從上面**可以看出,應用層進行資料傳輸一般使用某個協議通訊,這些協議是在tcp或udp的基礎上實現的,比如dns在使用tcp承載應用資料時在每個要傳送的記錄之前防止乙個二進位制的計數值,給出這個記錄的長度。一般而言,可以將頂三層都劃分為應用程,它屬於使用者程序,頂三層處理具體的網路應用的所有細節,而不關心通訊的細節,底四層則屬於核心程序,用於傳送資料、等待確認、給無序到達的資料排序、計算並驗證校驗和等待,它並不在意具體的網路應用,它在傳輸層則使用tcp或者udp進行通訊。unix網路程式設計主要介紹tpc協議,同時也涉及udp和原始套接字。
// 獲取時間客戶端程式
// intro/daytimetcp_client.c
#include
#include
#include
#include
#include
"../unp.h"
intmain
(int argc,
char
*ar**)
for(size_t i =
0; i < argc; i++)if
((sockfd =
socket
(af_inet,sock_stream,0)
)==-1
)memset
(&serveraddr,0,
sizeof
(serveraddr));
serveraddr.sin_family = af_inet;
serveraddr.sin_port =
htons(13
);if(
inet_pton
(af_inet,ar**[1]
,&serveraddr.sin_addr)
<=0)
if(connect
(sockfd,
(sa *
)&serveraddr,
sizeof
(serveraddr)
)<0)
while
((n =
read
(sockfd,recvline,maxline)
)>0)
}if(n <0)
return0;
}
// intro/daytimetcp_server.c
#include
"../unp.h"
#include
intmain
(int argc,
char
*ar**)
char buf[maxline]
;struct sockaddr_in serveraddr;
memset
(&serveraddr,0,
sizeof
(serveraddr));
serveraddr.sin_addr.s_addr =
htonl
(inaddr_any)
; serveraddr.sin_port =
htons
(time_server_listen_port)
; serveraddr.sin_family = af_inet;if(
bind
(listenfd,
(struct sockaddr *
)&serveraddr,
sizeof
(serveraddr))!=
0)int nret =
listen
(listenfd,listenq);if
(nret <0)
while(1
)
time_t ticks =
time
(null);
snprintf
(buf,
sizeof
(buf)
,"%.24s\r\n"
,ctime
(&ticks));
printf
(buf)
;int nwrite =0;
int length =
strlen
(buf)
;int npos =0;
while
(length >0)
else
if(nwrite != eintr)
}close
(connectfd);}
return0;
}
網路程式設計(一)網路程式設計入門
網路是計算機通訊的基礎,網路程式設計是學習計算機網路最佳方法,通常標準的計算機網路通訊協議有udp和tcp兩種 此處不包含微計算機網路通訊協議 如can等 首先小猿引入幾個面試常見的問題。1 網路程式設計三要素是什麼?答 網路程式設計的三要素是,ip,傳輸協議,埠號。2 網路模型有幾種?如何理解?答...
基本網路概念之一 網路
網路是幾乎可以實時相互傳送和接收資料的計算機和其他裝置的集合。網路的每台機器稱為乙個節點 node 大多數節點是計算機,但是印表機 路由器 網橋 閘道器 可口可樂機也都是節點。具有完備功能的計算機節點也稱為主機 host 這裡將節點一詞指代網路的所有裝置,用主機一詞表示通用的計算機節點。每個網路節點...
網路程式設計(一) 網路基礎之一
今天開始學習網路程式設計,當然還是要從網路基礎學起,首先我們來熟悉一下tcp ip模型與osi模型之間的對應關係 一.tcp ip四層模型 tcp ip是 一組協議的代名詞,它還包括許多協議,組成了tcp ip協議簇。tcp ip協議簇 分為四層,ip位於協議簇的第 二層 對應osi的第三層 tcp...