一、TCP/IP 體繫結構與特點
1、TCP/IP體繫結構
TCP/IP協議實際上就是在物理網上的一組完整的網路通訊協定。其中TCP是提供傳輸層服務,而IP則是提供網路層服務。TCP/IP包括以下協議:(結構1.1)
(圖1.1)
IP: 網間協議(Internet Protocol) 負責主機間資料的路由和網路上資料的儲存。同時為ICMP,TCP,UDP提供分組發送服務。使用者進程通常不需要涉及這一層。
ARP: 位址解析通訊協定(Address Resolution Protocol)
此協議將網路地址映射到硬體地址。
RARP: 反向位址解析通訊協定(Reverse Address Resolution Protocol)
此協議將硬體地址映射到網路地址
ICMP: 網間報文控制協議(Internet Control Message Protocol)
此協議處理信關和主機的差錯和傳送控制。
TCP: 傳送控制協議(Transmission Control Protocol)
這是一種提供給使用者進程的可靠的全雙工系統位元組流連線導向的協議。它要為使用者進程提供虛電路服務,並為資料可靠傳輸建立檢查。(註:大多數網路使用者程式使用TCP)
UDP: 使用者資料包通訊協定(User Datagram Protocol)
這是提供給使用者進程的無連線協定,用於傳送資料而不執行正確性檢查。
FTP: 檔案傳輸通訊協定(File Transfer Protocol)
允許使用者以檔案操作的方式(檔案的增、刪、改、查、傳送等)與另一主機相互連信。
SMTP: 簡單郵件傳送協議(Simple Mail Transfer Protocol)
SMTP協議為系統之間傳送電子郵件。
TELNET:終端協議(Telnet Terminal Procotol)
允許使用者以虛終端方式訪問遠程主機
HTTP: 超文字傳輸通訊協定 (HTTP)(Hypertext Transfer Procotol)
TFTP: 簡單檔案傳輸通訊協定(Trivial File Transfer Protocol)
2、TCP/IP特點
TCP/IP 協議的核心部分是傳輸層協議(TCP、UDP),網路層協議(IP)和物理介面層,這三層通常是在作業系統核心中實現。因此使用者一般不涉及。編程時,編程 介面有兩種形式:一、是由核心心直接提供的系統調用;二、使用以庫函數方式提供的各種函數。前者為核內實現,後者為核外實現。使用者服務要通過核外的應用程 序才能實現,所以要使用通訊端(socket)來實現。
圖1.2是TCP/IP協議核心與應用程式圖表。
(圖1.2)
二、專用術語
1、通訊端
它 是網路的基本構件。它是可以被命名和定址的通訊端點,使用中的每一個通訊端都有其類型和一個與之相連聽進程。通訊端存在通訊地區(通訊地區又稱地址簇) 中。通訊端只與同一地區中的通訊端交換資料(跨地區時,需要執行某和轉換進程才能實現)。WINDOWS 中的通訊端只支援一個域——網際域。通訊端具有類型。
WINDOWS SOCKET 1.1 版本支援兩種通訊端:流通訊端(SOCK_STREAM)和資料通訊端(SOCK_DGRAM)
2、WINDOWS SOCKETS 實現
一個WINDOWS SOCKETS 實現是指實現了WINDOWS SOCKETS規範所描述的全部功能的一套軟體。一般通過DLL檔案來實現
3、阻塞處理常式
阻塞處理常式(blocking hook,阻塞鉤子)是WINDOWS SOCKETS實現為了支援阻塞通訊端函數調用而提供的一種機制。
4、多址廣播(multicast,多點傳送或組播)
是一種一對多的傳輸方式,傳輸發起者通過一次傳輸就將資訊傳送到一組接收者,與單點傳送
(unicast)和廣播(Broadcast)相對應。
一、客戶機/伺服器模式
在TCP/IP網路中兩個進程間的相互作用的主機模式是客戶機/伺服器模式(Client/Server model)。該模式的建立基於以下兩點:1、非對等作用;2、通訊完全是非同步。客戶機/伺服器模式在操作過程中採取的是主動請示方式:
首先伺服器方要先啟動,並根據請示提供相應服務:(過程如下)
1、開啟一通訊通道並告知本地主機,它願意在某一個公認地址上接收客戶請求。
2、等待客戶請求到達該連接埠。
3、接收到重複服務要求,處理該請求並發送應答訊號。
4、返回第二步,等待另一客戶請求
5、關閉伺服器。
客戶方:
1、開啟一通訊通道,並串連到伺服器所在主機的特定連接埠。
2、向伺服器發送服務要求報文,等待並接收應答;繼續提出請求……
3、請求結束後關閉通訊通道並終止。
二、基本通訊端
為了更好說明通訊端編程原理,給出幾個基本的通訊端,在以後的篇幅中會給出更詳細的使用說明。
1、建立通訊端——socket()
功能:使用前建立一個新的通訊端
格式:SOCKET PASCAL FAR socket(int af,int type,int procotol);
參數:af: 通訊發生的地區
type: 要建立的通訊端類型
procotol: 使用的特定協議
2、指定本地地址——bind()
功能:將通訊端地址與所建立的通訊端號聯絡起來。
格式:int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR * name,int namelen);
參數:s: 是由socket()調用返回的並且未作串連的通訊端描述符(通訊端號)。
其它:沒有錯誤,bind()返回0,否則SOCKET_ERROR
地址結構說明:
struct sockaddr_in
{
short sin_family;//AF_INET
u_short sin_port;//16位連接埠號碼,網路位元組順序
struct in_addr sin_addr;//32位IP地址,網路位元組順序
char sin_zero[8];//保留
}
3、建立通訊端串連——connect()和accept()
功能:共同完成串連工作
格式:int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR * name,int namelen);
SOCKET PASCAL FAR accept(SOCKET s,struct sockaddr FAR * name,int FAR * addrlen);
參數:同上
4、監聽串連——listen()
功能:用於連線導向伺服器,表明它願意接收串連。
格式:int PASCAL FAR listen(SOCKET s, int backlog);
5、資料轉送——send()與recv()
功能:資料的發送與接收
格式:int PASCAL FAR send(SOCKET s,const char FAR * buf,int len,int flags);
int PASCAL FAR recv(SOCKET s,const char FAR * buf,int len,int flags);
參數:buf:指向存有傳輸資料的緩衝區的指標。
6、多工——select()
功能:用來檢測一個或多個通訊端狀態。
格式:int PASCAL FAR select(int nfds,fd_set FAR * readfds,fd_set FAR * writefds,
fd_set FAR * exceptfds,const struct timeval FAR * timeout);
參數:readfds:指向要做讀檢測的指標
writefds:指向要做寫檢測的指標
exceptfds:指向要檢測是否出錯的指標
timeout:最大等待時間
7、關閉通訊端——closesocket()
功能:關閉通訊端s
格式:BOOL PASCAL FAR closesocket(SOCKET s);
三、典型過程圖
2.1 連線導向的通訊端的系統調用時序圖
2.2 無連線協定的通訊端調用時序圖
2.3 連線導向的應用程式流程程圖