tcpip伺服器
Ⅰ tcpip是什麼,幹嘛用的,在哪
Tcpip是一個網路通信模型,以及一整個網路傳輸協議家族,為互聯網的基礎通信架構。Tcpip常被通稱為TCP/IP協議族,簡稱TCP/IP。tcpip協議中,Tcp協議在傳輸層,ip協議在網際層。
TCP/IP協議是用來提供點對點的鏈接機制,將數據應該如何封裝、定址、傳輸、路由以及在目的地如何接收,都加以標准化。它將軟體通信過程抽象化為四個抽象層,採取協議堆棧的方式,分別實現出不同通信協議。
TCP/IP分為tcp協議和ip協議:
TCP(傳輸控制協議)是一種面向連接的、可靠的、基於位元組流的傳輸層通信協議,由IETF的RFC 793定義。ip協議是互聯網協議地址,縮寫為IP地址,是分配給用戶上網使用的網際協議 的設備的數字標簽。常見的IP地址分為IPv4與IPv6兩大類。
(1)tcpip伺服器擴展閱讀
TCP/IP包括兩個協議,傳輸控制協議(TCP)和網際協議(IP),但TCP/IP實際上是一組協議,它包括上百個各種功能的協議。
如:遠程登錄、文件傳輸和電子郵件等,而TCP協議和IP協議是保證數據完整傳輸的兩個基本的重要協議。通常說TCP/IP是Internet協議族,而不單單是TCP和IP。
TCP/IP協議的基本傳輸單位是數據包,TCP協議負責把數據分成若干個數據包,並給每個數據包加上包頭,包頭上有相應的編號,以保證在數據接收端能將數據還原為原來的格式。
IP協議在每個包頭上再加上接收端主機地址,這樣數據找到自己要去的地方,如果傳輸過程中出現數據丟失、數據失真等情況。
TCP/IP協議數據的傳輸基於TCP/IP協議的四層結構,數據在傳輸時每通過一層就要在數據上加個包頭,其中的數據供接收端同一層協議使用,而在接收端,每經過一層要把用過的包頭去掉,這樣來保證傳輸數據的格式完全一致。
Ⅱ TCP/IP協議中的DNS伺服器地址是什麼
DNS是用來將域名解析成IP地址的,如果填錯了肯定不能正常上網的,一般家用寬頻路由或貓的手動配置是:網關和DNS都是192.168.1.1 掩碼是:255.255.255.0 IP是192.168.1.X (1<X<255,且X為整數)。呵呵,練習了一下數學,暈。
能手動設置成192.168.1.1的,備用DNS可以設置成202.106.46.151
Ⅲ TCP/IP以及DNS伺服器詳解通俗點
TCP/IP(Transmission Control Protocol/Internet Protocol)的簡寫,中文譯名為傳輸控制協議/網際網路互聯協議,又叫網路通訊協議,這個協議是Internet最基本的協議、Internet國際互聯網路的基礎,簡單地說,就是由網路層的IP協議和傳輸層的TCP協議組成的。TCP/IP 定義了電子設備(比如計算機)如何連入網際網路,以及數據如何在它們之間傳輸的標准。TCP/IP是一個四層的分層體系結構。高層為傳輸控制協議,它負責聚集信息或把文件拆分成更小的包。低層是網際協議,它處理每個包的地址部分,使這些包正確的到達目的地。
DNS,簡單地說,就是Domain Name System,翻譯成中文就是「域名系統」。在一個TCP/IP架構的網路(例如Internet)環境中,DNS是一個非常重要而且常用的系統。主要的功能就是將不容易記住的「IP Address」(IP地址)轉換成易於記憶的「Domain Name」(域名)。DNS服務的網路主機,就可以稱之為DNS Server(域名伺服器)。基本上,通常都認為DNS只是將域名轉換成IP地址,然後再使用所查到的IP地址去進行連接(俗稱「正向解析」)。事實上,將IP Address轉換成Domain Name的功能也是經常使用的。當客戶端登錄到一台Unix/Linux工作站時,工作站就會去進行反查,找出客戶端是從哪個地方連接進來的(俗稱「逆向解析」)。
詳情請登錄 網路
Ⅳ 什麼是簡單的tcp/ ip服務
它們都是作為應同程序和網路操作的中介物。
運輸層協議通常具有幾種責任。一種是創建進程到進程的通信;UDP和TCP使用埠來完成這種通信。另一種責任就是在運輸層提供控制機制。UDP在一個非常低的水平上完成這個功能。UDP沒有流量控制機制,在收到分組時也沒有確認。但是,UDP提供了某種程度的差錯控制。如果UDP檢測出在收到的分組中有差錯,它就悄悄地丟棄這個分組。而TCP使用滑動窗口協議來完成流量控制。TCP使用確認分組,超時和重傳來完成差錯控制。
運輸層還應負責為應用程序提供連接機制。這些應用程序應當能夠向運輸曾發送數據流。在發送站運輸層分責任是和接收站建立連接,把數據流分割成可運輸地單元,把它們編號,然後逐個發送它們。運輸層在接收端的責任是等待屬於同一個進程的所有不同單元的到達,檢查並放過那些沒有差錯的單元,並以流的方式把它們交付給接收進程。當全部的流都發送完畢後,運輸層應當關閉這個連接.TCP完成所有上面的工作,而UDP不完成!
UDP叫做無連接的、不可靠的運輸協議。TCP叫做面向連接的、可靠的運輸協議,它給IP服務提供了面向連接和可靠性的特點。TCP/IP協議族為運輸層指明了兩個協議:TCP和UDP。它們都是作為應同程序和網路操作的中介物。
運輸層協議通常具有幾種責任。一種是創建進程到進程的通信;UDP和TCP使用埠來完成這種通信。另一種責任就是在運輸層提供控制機制。UDP在一個非常低的水平上完成這個功能。UDP沒有流量控制機制,在收到分組時也沒有確認。但是,UDP提供了某種程度的差錯控制。如果UDP檢測出在收到的分組中有差錯,它就悄悄地丟棄這個分組。而TCP使用滑動窗口協議來完成流量控制。TCP使用確認分組,超時和重傳來完成差錯控制。
運輸層還應負責為應用程序提供連接機制。這些應用程序應當能夠向運輸曾發送數據流。在發送站運輸層分責任是和接收站建立連接,把數據流分割成可運輸地單元,把它們編號,然後逐個發送它們。運輸層在接收端的責任是等待屬於同一個進程的所有不同單元的到達,檢查並放過那些沒有差錯的單元,並以流的方式把它們交付給接收進程。當全部的流都發送完畢後,運輸層應當關閉這個連接.TCP完成所有上面的工作,而UDP不完成!
UDP叫做無連接的、不可靠的運輸協議。TCP叫做面向連接的、可靠的運輸協議,它給IP服務提供了面向連接和可靠性的特點。
UDP分組叫做用戶數據報。有8個位元組的固定首部,源埠號、目的埠號、長度和檢驗和各2個位元組。
UDP長度 = IP長度 - IP首部長度
下面是UDP的某些用途:
UDP適用於這樣的進程,它需要簡單的請求-響應通信,而較少考慮流量控制和差錯控制。對於需要傳送成塊數據的進程,如FTP,通常不使用UDP。
UDP適用於具有內部流量控制和差錯控制機制的進程。例如,簡單文本傳送協議(TFTP)的進程就包括流量控制和差錯控制。它能夠很容易地使用UDP。
對多播和廣播來說,UDP是個合適的運輸協議。多播和廣播能力已經嵌入在UDP軟體中,但沒有嵌入在TCP軟體中。
UDP可用於管理進程,如SNMP
UDP可用於某些路由選擇更新協議,如路由信息協議(RIP) 補充: 根據微軟的資料,簡單 TCP/IP 服務內容為:
簡單TCP/IP 服務為下表中列出的可選 TCP/IP 協議服務提供支持。
Character Generator (CHARGEN)
發送由 95 個可列印 ASCII 字元集組成的數據。作為調試工具用於行式列印機的測試或疑難解答。
864Daytime返回包含星期幾、月、日、年、當前時間(以 hh:mm:ss 格式),以及時區信息的消息。有些程序能使用該服務的輸出調試或監視系統時鍾時間或在另一台主機上的變化。
867Discard丟棄在此埠收到的所有消息,不進行響應或確認。可以充當空埠,在網路安裝和配置期間接收和路由 TCP/IP 測試消息,或在某些情況下,可以被程序用作消息丟棄功能。
863Echo回顯在此伺服器埠收到的任何消息的數據。Echo 可用作網路調試和監視工具。
862Quote of the Day (QUOTE)
返回對消息中一行或多行文本的引用。引用是從以下文件中隨機選取的:systemroot\System32\Drivers\Etc\Quotes。示例引用文件隨簡單 TCP/IP 服務一起安裝。如果該文件丟失,引用服務將無法使用。
Ⅳ 如何打開TCP/IP服務
1、點擊」開始「。
Ⅵ 怎麼使用TCP/IP與伺服器進行通信
使用流進行網路通信
使用socket進行網路編程的最簡單方式是使用NSStream。
NSStream類對流操作進行了抽象,包括對各種流數據的讀和寫:內存流、網路流或文件流。當然,通過NSStream也可以與伺服器進行通信。
無論是通過NSStream向伺服器寫數據,還是從NStream對象中讀取伺服器數據,都是一件簡單的事情。
在Mac OS X中,使用NSHost和NSStream與伺服器進行連接的代碼如下:
NSInputStream *iStream;
NSOutputStream *oStream;
uint portNo = 500;
NSURL *website = [NSURLURLWithString:urlStr];
NSHost *host = [NSHost hostWithName:[websitehost]]; [NSStream getStreamsToHost:host
port:portNo
inputStream:&iStream
outputStream:&oStream];
NSStream的getStreamsToHost:port:inputStream:outputStream:方法用於連接伺服器並創建一對輸入輸出流用於向伺服器讀寫數據。問題是iOS中並沒有這個方法。因此上述代碼無法用於iPhoneapp中。
要
解決這個問題,需要為NSStream增加新的類別以增加
getStreamToHost:Port:inputstream:outputStream:方法。在Xcode中新建文件
NSStreamAdditions.m。然後在NSStreamAdditions.h中編寫代碼如下:
@interface NSStream (MyAdditions)
+ (void)getStreamsToHostNamed:(NSString*)hostName
port:(NSInteger)port
inputStream:(NSInputStream **)inputStreamPtr
outputStream:(NSOutputStream **)outputStreamPtr;
@end
在NSStreamAdditions.m文件中加入下列代碼。
#import "NSStreamAdditions.h"
@implementation NSStream (MyAdditions)
+ (void)getStreamsToHostNamed:(NSString*)hostName
port:(NSInteger)port
inputStream:(NSInputStream **)inputStreamPtr
outputStream:(NSOutputStream **)outputStreamPtr
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
assert(hostName != nil);
assert( (port > 0) && (port <65536) );
assert( (inputStreamPtr != NULL) ||(outputStreamPtr != NULL) );
readStream = NULL;
writeStream = NULL;
(
NULL,
(CFStringRef) hostName,
port,
((inputStreamPtr != nil) ?&readStream : NULL),
((outputStreamPtr != nil) ? &writeStream : NULL)
);
if (inputStreamPtr != NULL) {
*inputStreamPtr = [NSMakeCollectable(readStream)autorelease];
}
if (outputStreamPtr != NULL) {
*outputStreamPtr =[NSMakeCollectable(writeStream) autorelease];
}
}
@end
以上代碼為NSStream類增加了一個類方法叫做:
getStreamsToHostNamed:port:inputStream:outputStream:
現在你可以在iPhone app中,使用該方法了。
作者注:該類別代碼基於蘋果文檔 Apple』s Technical Q&A1652。
在NetworkViewController.m中,加入如下代碼:
#import "NetworkViewController.h"
#import "NSStreamAdditions.h"
@implementation NetworkViewController
NSMutableData *data;
NSInputStream *iStream;
NSOutputStream *oStream;
定義connectToServerUsingStream:portNo:方法如下。在方法中我們連接了伺服器並創建了一對輸入/輸出流:
-(void) connectToServerUsingStream:(NSString*)urlStr portNo: (uint) portNo {
if (![urlStrisEqualToString:@""]) {
NSURL *website =[NSURL URLWithString:urlStr];
if (!website) {
NSLog(@"%@ is not a valid URL");
return;
} else {
[NSStream getStreamsToHostNamed:urlStr
port:portNo
inputStream:&iStream
outputStream:&oStream];
[iStreamretain];
[oStream retain];
[iStreamsetDelegate:self];
[oStream setDelegate:self];
[iStream scheleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStream scheleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStreamopen];
[iStream open];
}
}
}
在
方法中,我們將input和output放到了runloop中以便接收事件。這樣做,是為了防止流中沒有有效數據時代碼產生阻塞。input和
output的委託屬性都設置為self,因此我們還應該在NetworkViewController類中實現委託方法以便接收流數據。
使用 CFNetwork 進行網路通信
另一種TCP通信的方法是使用CFNetwork框架。CFNetwork屬於核心服務框架(C語言庫),提供了對HTTP、FTP、BSDsockets等網路協議的封裝。
為了演示如何使用CFNetwork框架,在NetworkViewController.m文件中加入如下語句:
#import "NetworkViewController.h"
#import "NSStreamAdditions.h"
@implementation NetworkViewController
NSMutableData *data;
NSInputStream *iStream;
NSOutputStream *oStream;
CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
定義 connectToServerUsingCFStream:portNo: 方法如下:
-(void) connectToServerUsingCFStream:(NSString *)
urlStr portNo: (uint) portNo{
(kCFAllocatorDefault,
(CFStringRef) urlStr,
portNo,
&readStream,
&writeStream);
if (readStream &&writeStream){
CFReadStreamSetProperty(readStream,
,
kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream,
,
kCFBooleanTrue);
iStream =(NSInputStream *)readStream;
[iStream retain];
[iStream setDelegate:self];
[iStreamscheleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[iStream open];
oStream = (NSOutputStream *)writeStream;
[oStreamretain];
[oStream setDelegate:self];
[oStream scheleInRunLoop:[NSRunLoopcurrentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStream open];
}
}
首
先,我們使用()方法創建了一個到伺服器的TCP/IP連接,以及一對輸入輸出
流。然後將它們轉換為等價的O-C對象——NSInputStream和NSOutputStream。接下來跟前面一樣,設置delegate屬性並放
到runloop中運行。
發送數據
要想伺服器發送數據,請使用NSOutputStream對象:
-(void) writeToServer:(const uint8_t *) buf {
[oStream write:bufmaxLength:strlen((char*)buf)];
}
這段代碼發送了一個無符號整型數組到伺服器。
讀取數據
當伺服器有數據到達,stream:handleEvent:方法被觸發。因此我們只需在這個方法中讀取數據即可。
- (void)stream:(NSStream *)streamhandleEvent:(NSStreamEvent)eventCode {
switch(eventCode) {
case :
{
if (data == nil) {
data = [[NSMutableData alloc] init];
}
uint8_t buf[1024];
unsigned int len = 0;
len = [(NSInputStream *)stream read:buf maxLength:1024];
if(len) {
[data appendBytes:(const void *)buf length:len];
int bytesRead;
bytesRead += len;
} else {
NSLog(@"No data.");
}
NSString *str =[[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(str);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Fromserver"
message:str
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
[str release];
[data release];
data = nil;
} break;
}
}
該方法有兩個參數。一個NSStream對象和一個NSStreamEvent常量。NSStreamEvent常量可能包含以下取值:
NSStreamEventNone -- 沒有任何事件
NSStreamEventOpenCompleted -- 流打開成功.
-- 此時流中有位元組待讀取
-- 此時可向流中寫入數據
NSStreamEventErrorOccurred -- 有錯誤發生
NSStreamEventEndEncountered -- 到達流的末尾
對於輸入流,你應當檢測 常量。在這里,我們從輸入流中讀取了數據並顯示在UIAlertView中。
在
stream:handleEvent:方法中,很容易檢查到連接錯誤。在本例中,如果
connectToServerUsingStream:portNo:方法連接伺服器失敗,則在stream:handleEvent方法將被調用並在
NSStreamEvent參數中傳遞一個NSStreamEventErrorOccured錯誤。
Ⅶ TCP伺服器是什麼
TCP指的是傳輸控制協議。它是一種面向連接導向的、可靠地及基於位元組流的運輸層通信協議。而在接觸TCP中還有UDP,UDP也是一項重要的傳輸協議。TCP提供超時重發,丟棄重復數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端
1、提供IP環境下的數據可靠傳輸(一台計算機發出的位元組流會無差錯的發往網路上的其他計算機,而且計算機A接收數據包的時候,也會向計算機B回發數據包,這也會產生部分通信量),有效流控,全雙工操作(數據在兩個方向上能同時傳遞),多路復用服務,是面向連接,端到端的傳輸;
2、面向連接:正式通信前必須要與對方建立連接。事先為所發送的數據開辟出連接好的通道,然後再進行數據發送,就像打電話。
3、TCP支持的應用協議:FTP 文件傳送、RLogin 遠程登錄、SMTP POP3 電子郵件、NFS 網路文件系統、遠程列印、遠程執行、名字伺服器終端伺服器等服務類型。
Ⅷ 什麼是tcpiptcpip各有什麼作用
TCP/IP的通訊協議
這部分簡要介紹一下TCP/IP的內部結構,為討論與互聯網有關的安全問題打下基礎。TCP/IP協議組之所以流行,部分原因是因為它可以用在各種各樣的信道和底層協議(例如T1和X.25、乙太網以及RS-232串列介面)之上。確切地說,TCP/IP協議是一組包括TCP協議和IP協議,UDP(User Datagram Protocol)協議、ICMP(Internet Control Message Protocol)協議和其他一些協議的協議組。
TCP/IP整體構架概述
TCP/IP協議並不完全符合OSI的七層參考模型。傳統的開放式系統互連參考模型,是一種通信協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬體在相同的層次上相互通信。這7層是:物理層、數據鏈路層、網路層、傳輸層、話路層、表示層和應用層。而TCP/IP通訊協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的網路來完成自己的需求。這4層分別為:
應用層:應用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網路遠程訪問協議(Telnet)等。
傳輸層:在此層中,它提供了節點間的數據傳送服務,如傳輸控制協議(TCP)、用戶數據報協議(UDP)等,TCP和UDP給數據包加入傳輸數據並把它傳輸到下一層中,這一層負責傳送數據,並且確定數據已被送達並接收。
互連網路層:負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。
網路介面層:對實際的網路媒體的管理,定義如何使用實際網路(如Ethernet、Serial Line等)來傳送數據。
TCP/IP中的協議
以下簡單介紹TCP/IP中的協議都具備什麼樣的功能,都是如何工作的:
1. IP
網際協議IP是TCP/IP的心臟,也是網路層中最重要的協議。
IP層接收由更低層(網路介面層例如乙太網設備驅動程序)發來的數據包,並把該數據包發送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數據包傳送到更低層。IP數據包是不可靠的,因為IP並沒有做任何事情來確認數據包是按順序發送的或者沒有被破壞。IP數據包中含有發送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。
高層的TCP和UDP服務在接收數據包時,通常假設包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務的認證基礎,這些服務相信數據包是從一個有效的主機發送來的。IP確認包含一個選項,叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對於一些TCP和UDP的服務來說,使用了該選項的IP包好象是從路徑上的最後一個系統傳遞過來的,而不是來自於它的真實地點。這個選項是為了測試而存在的,說明了它可以被用來欺騙系統來進行平常是被禁止的連接。那麼,許多依靠IP源地址做確認的服務將產生問題並且會被非法入侵。
2. TCP
如果IP數據包中有已經封好的TCP數據包,那麼IP將把它們向『上』傳送到TCP層。TCP將包排序並進行錯誤檢查,同時實現虛電路間的連接。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
TCP將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最後到接收方。
面向連接的服務(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發送和接收域名資料庫),但使用UDP傳送有關單個主機的信息。
3.UDP
UDP與TCP位於同一層,但對於數據包的順序錯誤或重發。因此,UDP不被應用於那些使用虛電路的面向連接的服務,UDP主要用於那些面向查詢---應答的服務,例如NFS。相對於FTP或Telnet,這些服務需要交換的信息量較小。使用UDP的服務包括NTP(網落時間協議)和DNS(DNS也使用TCP)。
欺騙UDP包比欺騙TCP包更容易,因為UDP沒有建立初始化連接(也可以稱為握手)(因為在兩個系統間沒有虛電路),也就是說,與UDP相關的服務面臨著更大的危險。
4.ICMP
ICMP與IP位於同一層,它被用來傳送IP的的控制信息。它主要是用來提供有關通向目的地址的路徑信息。ICMP的『Redirect』信息通知主機通向其他系統的更准確的路徑,而『Unreachable』信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接『體面地』終止。PING是最常用的基於ICMP的服務。
5. TCP和UDP的埠結構
TCP和UDP服務通常有一個客戶/伺服器的關系,例如,一個Telnet服務進程開始在系統上處於空閑狀態,等待著連接。用戶使用Telnet客戶程序與服務進程建立一個連接。客戶程序向服務進程寫入信息,服務進程讀出信息並發出響應,客戶程序讀出響應並向用戶報告。因而,這個連接是雙工的,可以用來進行讀寫。
兩個系統間的多重Telnet連接是如何相互確認並協調一致呢?TCP或UDP連接唯一地使用每個信息中的如下四項進行確認:
源IP地址 發送包的IP地址。
目的IP地址 接收包的IP地址。
源埠 源系統上的連接的埠。
目的埠 目的系統上的連接的埠。
埠是一個軟體結構,被客戶程序或服務進程用來發送和接收信息。一個埠對應一個16比特的數。服務進程通常使用一個固定的埠,例如,SMTP使用25、Xwindows使用6000。這些埠號是『廣為人知』的,因為在建立與特定的主機或服務的連接時,需要這些地址和目的地址進行通訊。
Ⅸ TCP/IP是什麼意思
TCP/IP 指傳輸控制協議/網際網路互聯協議(Transmission Control Protocol / Internet Protocol),又名網路通訊協議。
TCP/IP是Internet最基本的協議、Internet國際互聯網路的基礎,由網路層的IP協議和傳輸層的TCP協議組成,是供連接網際網路的計算機進行通信的通信協議。
TCP/IP 定義了電子設備(比如計算機)如何連入網際網路,以及數據如何在它們之間傳輸的標准。
TCP/IP協議從字面上看,有人可能會認為 TCP/IP 是指 TCP 與 IP 兩種協議。雖然實際中的確有這兩種協議,但是在很多情況下,它泛指 IP、ICMP、TCP、UDP、TELNET、FTP、HTTP 等協議群,所以有時也稱 TCP/IP 為網際協議族。
(9)tcpip伺服器擴展閱讀:
其實 TCP/IP 也是使用 OSI七層協議的觀念, 所以同樣具有分層的架構,只是將它簡化為四層,在結構上面比較沒有這么嚴謹,程序撰寫會比較容易些。
TCP/IP協議族是一個四層協議系統,自底而上分別是數據鏈路層、網路層、傳輸層和應用層。每一層完成不同的功能,且通過若干協議來實現,上層協議使用下層協議提供的服務。
1、數據鏈路層。
該層實現了網卡介面的網路驅動程序,以處理數據在物理媒介(比如乙太網、令牌環等)上的傳輸。不同的物理網路具有不同的電氣特性,網路驅動程序隱藏了這些細節,為上層協議提供一個統一的介面。
數據鏈路層兩個常用的協議是ARP協議(Address Resolve Protocol,地址解析協議)和RARP協議(Reverse Address Resolve Protocol,逆地址解析協議)。
它們實現了IP地址和機器物理地址(通常是MAC地址,乙太網、令牌環和802.11無線網路都使用MAC地址)之間的相互轉換。
2、網路層
網路層實現數據包的選路和轉發。WAN(Wide Area Network,廣域網)通常使用眾多分級的路由器來連接分散的主機或LAN(Local Area Network,區域網),因此,通信的兩台主機一般不是直接相連的,而是通過多個中間節點(路由器)連接的。
網路層的任務就是選擇這些中間節點,以確定兩台主機之間的通信路徑。同時,網路層對上層協議隱藏了網路拓撲連接的細節,使得在傳輸層和網路應用程序看來,通信的雙方是直接相連的。
網路層最核心的協議是IP協議(Internet Protocol,網際網路協議)。IP協議根據數據包的目的IP地址來決定如何投遞它。如果數據包不能直接發送給目標主機,那麼IP協議就為它尋找一個合適的下一跳(next hop)路由器,並將數據包交付給該路由器來轉發。
多次重復這一過程,數據包最終到達目標主機,或者由於發送失敗而被丟棄。可見,IP協議使用逐跳(hop by hop)的方式確定通信路徑。
3、傳輸層
傳輸層為兩台主機上的應用程序提供端到端(end to end)的通信。與網路層使用的逐跳通信方式不同,傳輸層只關心通信的起始端和目的端,而不在乎數據包的中轉過程。圖1-3展示了傳輸層和網路層的這種區別。
4、應用層
應用層負責處理應用程序的邏輯。數據鏈路層、網路層和傳輸層負責處理網路通信細節,這部分必須既穩定又高效,因此它們都在內核空間中實現,而應用層則在用戶空間實現,因為它負責處理眾多邏輯,比如文件傳輸、名稱示等。
而應用層則在用戶空間實現,因為它負責處理眾多邏輯,比如文件傳輸、名稱查詢和網路管理等。如果應用層也在內核中實現,則會使內核變得非常龐大。
當然,也有少數伺服器程序是在內核中實現的,這樣代碼就無須在用戶空間和內核空間來回切換(主要是數據的復制),極大地提高了工作效率。
應用層協議(或程序)可能跳過傳輸層直接使用網路層提供的服務,比如ping程序和OSPF協議。應用層協議(或程序)通常既可以使用TCP服務,又可以使用UDP服務,比如DNS協議。
Ⅹ TCP/IP是什麼
網路協議通常分不同層次進行開發,每一層分別負責不同的通信功能。一個協議組件,比如TCP/IP,是一組不同層次上的多個協議的組合。TCP/IP通常被認為是一個四層協議系統,如圖1.1所示。
每一層負責不同的功能:
1. 鏈路層,有時也稱作數據鏈路層或網路介面層,通常包括操作系統中的設備驅動程序和計算機中對應的網路介面卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理介面細節。
2. 網路層,有時也稱作互連網層,處理分組在網路中的活動,例如分組的路由選擇。在TCP/IP協議組件中,網路層協議包括IP協議(網際協議),ICMP協議(Internet互連網控制報文協議),以及IGMP協議(Internet組管理協議)。
3. 運輸層主要為兩台主機上的應用程序提供端到端的通信。在TCP/IP協議組件中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。
TCP為兩台主機提供高可靠性的數據通信。它所做的工作包括把應用程序交給它的數據分成合適的小塊交給下面的網路層,確認接收到的分組,設置發送最後確認分組的超時時鍾等。由於運輸層提供了高可靠性的端到端的通信,因此應用層可以忽略所有這些細節。
而另一方面,UDP則為應用層提供一種非常簡單的服務。它只是把稱作數據報的分組從一台主機發送到另一台主機,但並不保證該數據報能到達另一端。任何必需的可靠性必須由應用層來提供。
這兩種運輸層協議分別在不同的應用程序中有不同的用途,這一點我們將在後面看到。
4. 應用層負責處理特定的應用程序細節。幾乎各種不同的TCP/IP實現都會提供下面這些通用的應用程序:
·Telnet 遠程登錄
·FTP 文件傳輸協議
·SMTP 用於電子郵件的簡單郵件傳輸協議
·SNMP 簡單網路管理協議
另外還有許多其他應用,我們在後面章節中將介紹其中的一部分。
假設我們在一個區域網(LAN)如乙太網中有兩台主機,二者都運行FTP協議,圖1.2列出了該過程所涉及到的所有協議。
圖1.2 區域網上運行FTP的兩台主機
這里,我們列舉了一個FTP客戶程序和另一個FTP伺服器程序。大多數的網路應用程序都被設計成客戶-伺服器模式。伺服器為客戶提供某種服務,在本例中就是訪問伺服器所在主機上的文件。在遠程登錄應用程序Telnet中,為客戶提供的服務是登錄到伺服器主機上。
在同一層上,雙方都有對應的一個或多個協議進行通信。例如,某個協議允許TCP層進行通信,而另一個協議則允許兩個IP層進行通信。
在圖1.2的右邊,我們注意到應用程序通常是一個用戶進程,而下三層則一般在(操作系統)內核中執行。盡管這不是必需的,但通常都是這樣處理的,例如UNIX操作系統。
在圖1.2中,頂層與下三層之間還有另一個關鍵的不同之處。應用層關心的是應用程序的細節,而不是數據在網路中的傳輸活動。下三層對應用程序一無所知,但它們要處理所有的通信細節。
我們在圖1.2中例舉了四種不同層次上的協議。FTP是一種應用層協議,TCP是一種運輸層協議,IP是一種網路層協議,而乙太網協議則應用於鏈路層上。 TCP/IP協議組件是一組不同的協議組合在一起構成的協議族。盡管通常稱該協議組件為TCP/IP,但TCP和IP只是其中的兩種協議而已。(該協議組件的另一個名字是Internet協議族(Internet Protocol Suite)。
網路介面層和應用層的目的是很顯然的――前者處理有關通信媒介的細節(乙太網,令牌環網等),而後者處理某個特定的用戶應用程序(FTP,Telnet 等)。但是,從表面上看,網路層和運輸層之間的區別不那麼明顯。為什麼要把它們劃分成兩個不同的層次呢?為了理解這一點,我們必須把視野從單個網路擴展到一組網路。
在80年代,網路不斷增長的原因之一是大家都意識到只有一台孤立的計算機構成的「孤島」沒有太大意義,於是就把這些孤立的系統組在一起形成網路。隨著這樣的發展,到了90年代,我們又逐漸認識到這種由單個網路構成的新的更大的「島嶼」同樣沒有太大的意義。於是,人們又把多個網路連在一起形成一個網路的網路,或稱作互連網(internet)。一個互連網就是一組通過相同協議族互連在一起的網路。
構造互連網最簡單的方法是把兩個或多個網路通過路由器進行連接。它是一種特殊的用於網路互連的硬體盒。路由器的好處是為不同類型的物理網路提供連接:乙太網,令牌環網,點對點的鏈接,FDDI(光纖分布式數據介面)等等。
(下面是原書p.4①的譯文)
這些盒子也稱作IP路由器(IP Routers),但我們這里使用路由器(Router)這個術語。
從歷史上說,這些盒子稱作網關(gateways),在很多TCP/IP文獻中都使用這個術語。現在網關這個術語只用來表示應用層網關:一個連接兩種不同協議組件的進程(例如,TCP/IP和IBM的SNA),它為某個特定的應用程序服務(常常是電子郵件或文件傳輸)。
圖1.3是一個包含兩個網路的互連網:一個乙太網和一個令牌環網,通過一個路由器互相連接。盡管這里是兩台主機通過路由器進行通信,實際上乙太網中的任何主機都可以與令牌環網中的任何主機進行通信。
在圖1.3中,我們可以劃分出端系統(end system)(兩邊的兩台主機)和中間系統(intermediate system)(中間的路由器)。應用層和運輸層使用端到端(end-to-end)協議。在我們的圖中,只有端系統需要這兩層協議。但是,網路層提供的卻是逐跳(hop-by-hop)協議,兩個端系統和每個中間系統都要使用它。
圖1.3 通過路由器連接的兩個網路
在TCP/IP協議組件中,網路層IP提供的是一種不可靠的服務。也就是說,它只是盡可能快地把分組從源結點送到目的結點,但是並不提供任何可靠性保證。而另一方面,TCP在不可靠的IP層上提供了一個可靠的運輸層。為了提供這種可靠的服務,TCP採用了超時重傳,發送和接收端到端的確認分組等機制。由此可見,運輸層和網路層分別負責不同的功能。
從定義上看,一個路由器具有兩個或多個網路介面層(因為它連接了兩個或多個網路)。任何具有多個介面的系統英文都稱作是多介面的multihomed。一個主機也可以有多個介面,但一般不稱作路由器, 除非它的功能只是單純地把分組從一個介面傳送到另一個介面。同樣,路由器並不一定指那種在互連網中用來轉發分組的特殊硬體盒。大多數的TCP/IP實現也允許一個多介面主機來擔當路由器的功能,但是主機為此必須進行特殊的配置。在這種情況下,我們既可以稱該系統為主機(當它運行某一應用程序時,如FTP或 Telnet),也可以稱之為路由器(當它把分組從一個網路轉發到另一個網路時)。我們在不同的場合下使用不同的術語。
互連網的目標之一是在應用程序中隱藏所有的物理細節。雖然這一點在圖1.3由兩個網路組成的互連網中並不很明顯,但是應用層不能關心(也不關心)一台主機是在乙太網上,而另一台主機是在令牌環網上,它們通過路由器進行互連。隨著增加不同類型的物理網路,可能會有20個路由器,但應用層仍然是一樣的。物理細節的隱藏使得互連網功能非常強大,也非常有用。
連接網路的另一個途徑是使用網橋。網橋是在鏈路層上對網路進行互連,而路由器則是在網路層上對網路進行互連。網橋使得多個區域網(LAN)組合在一起,這樣對上層來說就好像是一個區域網。
TCP /IP傾向於使用路由器而不是網橋來連接網路,因此我們將著重介紹路由器。文獻[Perlman 1992]的第12章對路由器和網橋進行了比較。
1.3 TCP/IP的分層
在TCP/IP協議組件中,有很多種協議。圖1.4給出了本書將要討論的其他協議。
圖1.4 TCP/IP協議組件中不同層次的協議
TCP和UDP是兩種最為著名的運輸層協議,二者都使用IP作為網路層協議。
雖然TCP使用不可靠的IP服務,但它卻提供一種可靠的運輸層服務。本書第17章到第22章將詳細討論TCP的內部操作細節。然後,我們將介紹一些TCP 的應用,如第26章中的Telnet和Rlogin,第27章中的FTP,以及第28章中的SMTP等。這些應用通常都是用戶進程。
UDP為應用程序發送和接收數據報。一個數據報是指從發送方傳輸到接收方的一個信息單元(例如,發送方指定的一定位元組數的信息)。但是與TCP不同的是, UDP是不可靠的,它不能保證數據報能安全無誤地到達最終目的。本書第11章將討論UDP,然後在第14章(域名系統:Domain Name System),第15章(簡單文件傳輸協議Trivial File Transfer Protocol),以及第16章(引導程序協議Bootstrap Protocol)介紹使用UDP的應用程序。SNMP(簡單網路管理協議)也使用了UDP協議,但是由於它還要處理許多其他的協議,因此本書把它留到第 25章再進行討論。
IP是網路層上的主要協議,同時被TCP和UDP使用。TCP和UDP的每組數據都通過端系統和每個中間路由器中的IP層在互連網中進行傳輸。在圖1.4 中,我們給出了一個直接訪問IP的應用程序。這是很少見的,但也是可能的。(一些較老的路由選擇協議就是以這種方式來實現的。當然新的運輸層協議也有可能試用這種方式。)第3章主要討論IP協議,但是為了使內容更加有針對性,一些細節將留在後面的章節中進行討論。第9章和第10章討論IP如何進行路由選擇。
ICMP是IP協議的附屬協議。IP層用它來與其他主機或路由器交換錯誤報文和其他重要信息。第6章對ICMP的有關細節進行討論。盡管ICMP主要被 IP使用,但應用程序也有可能訪問它。我們將分析兩個流行的診斷工具,Ping和Traceroute(第7章和第8章),它們都使用了ICMP。
IGMP是Internet組管理協議。它用來把一個UDP數據報多播到多個主機。我們在第12章中描述廣播(把一個UDP數據報發送到某個指定網路上的所有主機)和多點傳送的一般特性,然後在第13章中對IGMP協議本身進行描述。
ARP(地址解析協議)和RARP(逆地址解析協議)是某些網路介面(如乙太網和令牌環網)使用的特殊協議,用來轉換IP層和網路介面層使用的地址。我們分別在第4章和第5章對這兩種協議進行分析和介紹。
1.4 互連網的地址
互連網上的每個介面必須有一個唯一的Internet地址(也稱作IP地址)。IP地址長32 bit。Internet地址並不採用平面形式的地址空間,如1,2,3等。IP地址具有一定的結構,五類不同的互連網地址格式如圖1.5所示。
這些32位的地址通常寫成四個十進制的數,其中每個整數對應一個位元組。這種表示方法稱作「點分十進製表示法」(dotted decimal notation)。例如,作者的系統就是一個B類地址,它表示為:140.252.13.33。
區分各類地址的最簡單方法是看它的第一個十進制整數。圖1.6列出了各類地址的起止范圍,其中第一個十進制整數用加黑字體表示。
圖1.5五類互連網地址
圖1.6 各類IP地址的范圍
需要再次指出的是,多介面主機具有多個IP地址,其中每個介面都對應一個IP地址。
由於互連網上的每個介面必須有一個唯一的IP地址,因此必須要有一個管理機構為接入互連網的網路分配IP地址。這個管理機構就是互連網路信息中心(Internet Network Information Centre)稱作InterNIC。InterNIC只分配網路號。主機號的分配由系統管理員來負責。
(下面是原書p.8①的譯文)
Internet注冊服務(IP地址和DNS域名)過去由NIC來負責,其網路地址是nic.ddn.mil。1993年4月1日,InterNIC成立。現在,NIC只負責處理國防數據網的注冊請求,所有其他的Internet用戶注冊請求均由InterNIC負責處理,其網址是: rs.internic.net。
事實上InterNIC有三部分組成:注冊服務(rs.internic.net),目錄和資料庫服務(ds.internic.net),以及信息服務(is.internic.net)。有關InterNIC的其他信息參見習題1.8。
有三類IP地址:單目傳送地址(目標為單個主機),廣播傳送地址(目的端為給定網路上的所有主機),以及多目傳送地址(目的端為同一組內的所有主機)。第12章和第13章將分別討論廣播傳送和多目傳送的更多細節。
在3.4節中,我們在介紹IP路由選擇以後將進一步介紹子網的概念。圖3.9給出了幾個特殊的IP地址:主機號和網路號為全0或全1。
1.5 域名系統
盡管通過IP地址可以識別主機上的網路介面,進而訪問主機,但是人們最喜歡使用的還是主機名。在TCP/IP領域中,域名系統(DNS)是一個分布的資料庫,由它來提供IP地址和主機名之間的映射信息。我們在第14章將詳細討論DNS。
現在,我們必須理解,任何應用程序都可以調用一個標準的庫函數來查看給定名字的主機的IP地址。類似地,系統還提供一個逆函數――給定主機的IP地址,查看它所對應的主機名。
大多數使用主機名作為參數的應用程序也可以把IP地址作為參數。例如,在第4章中當我們用Telnet進行遠程登錄時,我們既可以指定一個主機名,也可以指定一個IP地址。
1.6 封裝
當應用程序用TCP傳送數據時,數據被送入協議棧中,然後逐個通過每一層直到被當作一串比特流送入網路。其中每一層對收到的數據都要增加一些首部信息(有時還要增加尾部信息),該過程如圖1.7所示。TCP傳給IP的數據單元稱作TCP報文段或簡稱為TCP段(TCP segment)。IP傳給網路介面層的數據單元稱作IP數據報(IP datagram)。通過乙太網傳輸的比特流稱作幀(frame)。
圖1.7中幀頭和幀尾下面所標注的數字是典型乙太網幀首部的位元組長度。在後面的章節中我們將詳細討論這些幀頭的具體含義。
乙太網數據幀的物理特性是其長度必須在46-1500位元組之間。我們將在4.5節遇到最小長度的數據幀,在2.8節中遇到最大長度的數據幀。
(下面是原書p.9①的譯文)
所有的Internet標准和大多數有關TCP/IP的書都使用octet這個術語來表示位元組。使用這個過分雕琢的術語是有歷史原因的,因為TCP/IP 的很多工作都是在DEC-10系統上進行的,但是它並不使用8 bit的位元組。由於現在幾乎所有的計算機系統都採用8 bit的位元組,因此我們在本書中使用位元組(byte)這個術語。
更准確地說,圖1.7中IP和網路介面層之間傳送的數據單元應該是分組(packet)。分組既可以是一個IP數據報,也可以是IP數據報的一個片(fragment)。我們將在11.5節討論IP數據報分片的詳細情況。
UDP數據與TCP數據基本一致。唯一的不同是UDP傳給IP的信息單元稱作UDP數據報(UDP datagram),而且UDP的首部長為8位元組。
圖1.7 數據進入協議棧時的封裝過程
回想第6頁中的圖1.4,由於TCP,UDP,ICMP和IGMP都要向IP傳送數據,因此IP必須在生成的IP首部中加入某種標識,以表明數據屬於哪一層。為此,IP在首部中存入一個長度為8比特的數值,稱作協議域。1表示為ICMP協議,2表示為IGMP協議,6表示為TCP協議,17表示為UDP協議。
類似地,許多應用程序都可以使用TCP或UDP來傳送數據。運輸層協議在生成報文首部時要存入一個應用程序的標識符。TCP和UDP都用一個16 bit的埠號來表示不同的應用程序。TCP和UDP把源埠號和目的埠號分別存入報文首部中。
網路介面分別要發送和接收IP,ARP和RARP數據,因此也必須在乙太網的幀首部中加入某種形式的標識,以指明生成數據的網路層協議。為此,乙太網的幀首部也有一個16 bit的幀類型域。
1.7 分用(Demultiplexing)
當目的主機收到一個乙太網數據幀時,數據就開始從協議棧中由底向上升,同時去掉各層協議加上的報文首部。每層協議盒都要去檢查報文首部中的協議標識,以確定接收數據的上層協議。這個過程稱作分用,圖1.8顯示了該過程是如何發生的。
圖1.8 乙太網數據幀的分用過程
(下面是原書p.11①的譯文)
為協議ICMP和IGMP定位一直是一件很棘手的事情。在圖1.4中,我們把它們與IP放在同一層上,那是因為事實上它們是IP的附屬協議。但是在這里,我們又把它們放在IP層的上面,這是因為ICMP和IGMP報文都被封裝在IP數據報中。
對於ARP和RARP我們也遇到類似的難題。在這里我們把它們放在乙太網設備驅動程序的上方,這是因為它們和IP數據報一樣,都有各自的乙太網數據幀類型。但在圖2.4中,我們又把ARP作為乙太網設備驅動程序的一部分,放在IP層的下面,其原因在邏輯上是合理的。
當進一步描述TCP的細節時,我們將看到協議確實是通過目的埠號,源IP地址和源埠號進行解包的。
1.8 客戶伺服器模型
大部分網路應用程序在編寫時都假設一端是客戶,另一端是伺服器,其目的是為了讓伺服器為客戶提供一些特定的服務。
我們可以將這種服務分為兩種類型:重復型或並發型。重復型伺服器通過以下步驟進行交互:
I1. 等待一個客戶請求的到來。
I2. 處理客戶請求。
I3. 發送響應給發送請求的客戶。
I4. 返回I1步驟。
重復型伺服器主要的問題發生在I2狀態。在這個時候,它不能為其他客戶機提供服務。
相應地,並發型伺服器採用以下步驟:
C1. 等待一個客戶請求的到來
C2. 啟動一個新的伺服器來處理這個客戶的請求。在這期間可能生成一個新的進程、任務或線程,並依賴底層操作系統的支持。這個步驟如何進行取決於操作系統。生成的新伺服器對客戶的全部請求進行處理。處理結束後,終止這個新伺服器。
C3.返回C1步驟。
並發伺服器的優點在於它是利用生成其他伺服器的方法來處理客戶的請求。也就是說,每個客戶都有它自己對應的伺服器。如果操作系統允許多任務,那麼就可以同時為多個客戶同時服務。
我們對伺服器,而不是對客戶進行分類的原因是因為對於一個客戶來說,它通常並不能夠辨別自己是與一個重復型伺服器或並發型伺服器進行對話。
一般來說,TCP伺服器是並發的,而UDP伺服器是重復的,但也存在一些例外。我們將在11.12節對UDP對其伺服器產生的影響進行詳細討論,並在18.11節對TCP對其伺服器的影響進行討論。
1.9 埠號
我們前面已經指出過,TCP和UDP採用16比特的埠號來識別應用程序。那麼這些埠號是如何選擇的呢?
伺服器一般都是通過人們所熟知的埠號來識別的。例如,對於每個TCP/IP實現來說,FTP伺服器的TCP埠號都是21,每個Telnet伺服器的 TCP埠號都是23,每個TFTP(簡單文件傳輸協議)伺服器的UDP埠號都是69。任何TCP/IP實現所提供的服務都用眾所周知的1-1023之間的埠號。這些人們所熟知的埠號由Internet埠號分配機構(Internet Assigned Numbers Authority, IANA)來管理。
(下面是原書p.13①的譯文)
到1992年為止,人們所熟知的埠號介於1-255之間。256-1023之間的埠號通常都是由Unix系統佔用,以提供一些特定的Unix服務―― 也就是說,提供一些只有Unix系統才有的,而其他操作系統可能不提供的服務。現在IANA管理1-1023之間所有的埠號。
Internet 擴展服務與Unix特定服務之間的一個差別就是Telnet和Rlogin。它們二者都允許我們通過計算機網路登錄到其他主機上。Telnet是採用埠號為23的TCP/IP標准且幾乎可以在所有操作系統上進行實現。相反,Rlogin最開始時只是為Unix系統設計的(盡管許多非Unix系統現在也提供該服務),因此在80年代初,它的有名埠號為513。
客戶端通常對它所使用的埠號並不關心,只需保證該埠號在本機上是唯一的就可以了。客戶埠號又稱作臨時埠號(即存在時間很短暫)。這是因為它通常只是在用戶運行該客戶程序時才存在,而伺服器則只要主機開著的,其服務就運行。
大多數TCP/IP實現給臨時埠分配1024-5000之間的埠號。大於5000的埠號是為其他伺服器預留的(Internet上並不常用的服務)。我們可以在後面看見許多這樣的給臨時埠分配埠號的例子。
(下面是原書p.13②的譯文)
Solaris 2.2是一個很有名的例外。通常TCP和UDP的預設臨時埠號從32768開始。在E.4節中,我們將詳細描述系統管理員如何對配置選項進行修改以改變這些預設項。
大多數Unix系統的file/etc/services都包含了人們熟知的埠號。為了找到Telnet伺服器和域名系統的埠號,我們可以運行以下語句:
(見原書p.13的③)
保留埠號
Unix系統有保留埠號的概念。只有具有超級用戶特權的進程才允許給它自己分配一個保留埠號。
這些埠號介於1到1023之間,一些應用程序(如有名的Rlogin,26.2節)將它作為客戶與伺服器之間身份認證的一部分。
1.10 標准化過程
究竟是誰控制著TCP/IP協議組件,又是誰在定義新的標准以及其他類似的事情?事實上,有四個小組在負責Internet技術。
1. Internet協會(ISOC: Internet Society)是一個推動、支持和促進Internet不斷增長和發展的專業組織,它把Internet作為全球研究通信的基礎設施。
2. Internet體系結構委員會(IAB:Internet Architecture Board)是一個技術監督和協調的機構。它由國際上來自不同專業的15個志願者組成,其職能是負責Internet標準的最後編輯和技術審核。IAB隸屬於ISOC。
3. Internet工程專門小組(IETF:Internet Engineering Task Force)是一個面向近期標準的組織,它分為9個領域(應用,尋徑和定址,安全等等)。IETF開發成為Internet標準的規約。為幫助IETF主席,又成立了Internet工程指導小組(IESG:Internet Engineering Steering Group)。
4. Internet研究專門小組主要對長遠的項目進行研究。
IRTF和IETF都隸屬於IAB。文獻[Crocker 1993]提供了關於Internet內部標准化進程更為詳細的信息,同時還介紹了它的早期歷史。
1.11 RFC
所有關於Internet的正式標准都以RFC(Request for Comment)文檔出版。另外,大量的RFC並不是正式的標准,出版的目的只是為了提供信息。RFC的篇幅從1頁到200頁不等。每一項都用一個數字來標識,如RFC 1122,數字越大說是RFC的內容越新。
所有的RFC都可以通過電子郵件或用FTP從Internet上免費獲取。如果發送下面這份電子郵件,你就會收到一份獲取RFC的方法清單:
T [email protected]
Subject: getting rfcs
help: ways_to_get_rfcs
最新的RFC索引總是搜索信息的起點。這個索引列出了RFC被替換或局部更新的時間。
下面是一些重要的RFC文檔:
1. 賦值RFC(Assigned Numbers RFC)列出了所有Internet協議中使用的數字和常數。至本書出版時為止,最新RFC的編號是1340 [Reynolds and Postel 1992]。所有著名的Internet埠號都列在這里。
當這個RFC被更新時(通常每年至少更新一次),索引清單會列出RFC 1340被替換的時間。
2. Internet正式協議標准,目前是RFC 1600[Postel 1994]。這個RFC描述了各種Internet協議的標准化現狀。每種協議都處於下面幾種標准化狀態之一:標准,草案標准,提議標准,實驗標准,信息標准,和歷史標准。另外,對每種協議都有一個要求的層次:必需的,建議的,可選擇的,限制使用的,或者不推薦的。
與賦值RFC一樣,這個RFC也定期更新。請一定隨時查看最新版本。
3. 主機需求RFC,1122和1123[Braden 1989a, 1989b]。RFC 1122針對鏈路層,網路層和運輸層,RFC 1123針對應用層。這兩個RFC對早期重要的RFC文檔作了大量的糾正和解釋。如果要查看有關協議更詳細的細節內容,它們通常是一個入口點。它們列出了協議中關於「必須」,「應該」,「可以」,「不應該」或者「不能」等特性及其實現細節。
文獻[Borman 1993b]提供了有關這兩個RFC的實用內容。RFC 1127[Braden 1989c]對工作小組開發主機需求RFC過程中的討論內容和結論進行了非正式的總結。
4.路由器需求RFC,目前正式版是RFC 1009[Braden and Postel 1987],但一個新版已接近完成[Aknqyust 1993]。它與主機需求RFC類似,但是只單獨描述了路由器的需求。
1.12 標準的簡單服務
有一些標準的簡單服務幾乎每種實現都要提供。在本書中我們將使用其中的一些服務程序,而客戶程序通常選擇Telnet。圖1.9描述了這些服務。從該圖我們可以看出,當使用TCP和UDP提供相同的服務時,一般選擇相同的埠號.
(下面是原書p.15①的譯文)
如果仔細檢查這些標準的簡單服務以及其他標準的TCP/IP服務(如Telnet, FTP, SMTP等)的埠號時,我們發現它們都是奇數。這是有歷史原因的,因為這些埠號都是從NCP埠號派生出來的。(NCP,即網路控制協議,是 ARPANET的運輸層協議,是TCP的前身。NCP是單工的,不是全雙工的,因此每個應用程序需要兩個連接,需預留一對奇數和偶數埠號。當TCP和 UDP成為標準的運輸層協議時,每個應用程序只需要一個埠號,因此就使用了NCP中的奇數。
(以下是原書p.16圖1.9的譯文)
名字
TCP埠號
UDP埠號
RFC
描述
echo
7
7
862
伺服器返回客戶發送的所有內容。
discard
9
9
863
伺服器丟棄客戶發送的所有內容。
daytime
13
13
867
伺服器以可讀形式返回時間和日期。
chargen
19
19
864
當客戶發送一個數據報時,TCP伺服器發送一串連續的字元流,直到客戶中斷連接。UDP伺服器發送一個隨機長度的數據報。
time
37
37
868
伺服器返回一個二進制形式的32 bit數,表示從UTC時間1900年1月1日午夜至今的秒數。
圖1.9 大多數實現都提供的標準的簡單服務
1.13 互連網
在圖1.3中,我們列舉了一個由兩個網路組成的互連網-一個乙太網和一個令牌環網。在1.4節和1.9節中,我們討論了世界范圍內的互連網- Internet,以及集中分配IP地址的需要(InterNIC),還討論了著