複製鏈接
請複製以下鏈接發送給好友

回送地址

鎖定
回送地址(127.x.x.x)是本機回送地址(Loopback Address),即主機IP堆棧內部的IP地址,主要用於網絡軟件測試以及本地機進程間通信,無論什麼程序,一旦使用回送地址發送數據,協議軟件立即返回之,不進行任何網絡傳輸。
中文名
回送地址
定    義
本機回送地址
應用於
網絡軟件測試和本地機進程間通信
應用範圍
任何程序

回送地址操作方法

在“運行”程序中輸入“cmd”命令,然後在彈出的對話框中輸入“ping 127.x.x.x”,再按回車鍵。如ping127.0.0.1

回送地址實際應用

我們分兩部分介紹如下:
一、我們可以Ping回送地址。通常如果回送地址Ping不通,就説明IP堆棧出了故障。如果通的話,表明網絡沒問題。
例如:我們在命令行運行ping127.0.0.1,以檢查主機TCP/IP協議是否安裝並正常工作,如下:
c:\>ping127.0.0.1
Pinging127.0.0.1with 32 bytes of data:
Reply from127.0.0.1: bytes=32 time<1ms TTL=128
Reply from127.0.0.1: bytes=32 time<1msTTL=128
Reply from127.0.0.1: bytes=32 time<1ms TTL=128
Reply from127.0.0.1: bytes=32 time<1ms TTL=128
Ping statistics for127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Appro\eximate round trip time= in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
c:\>
二、主要用於網絡軟件測試以及本地機進程間通信,無論什麼程序,一旦使用回送地址發送數據,例如我們可以IP地址127.0.0.1和端口4001作為參數執行程序。127.0.0.1是一個回送地址,被分配給回送接口。回送接口是一個僅能被本地主機上運行的程序所訪問的邏輯接口。實際上大部分系統都將localhost作為127.0.0.1的別名。測試實例如下:
TCP服務器(server1. c)
1 /*
2 * server1.c
3 *
4 * Create TCP server socket, accept
5 * one TCP client connection using
6 * socket(), bind(), listen() and
7 * accept().
8 *
9 * foster <jamescfoster@ >
10 */
11
12 #include <stdio.h>
13 #include <sys/types.h>
14 #include <sys/socket.h>
15 #include <netinet/in.h>
16
17 int
18 main (int argc, char *argv[])
19 {
20 struct sockaddr_in sin ;
21 struct sockaddr_in csin;
22 socklen_t len = sizeof(struct sockaddr);
23 short port = 0;
24 int csock = 0;
25 int sock = 0;
26 int ret = 0;
27
28 if(argc != 2)
29 {
30 printf("usage: %s: port\n", argv[0]);
31 return(1);
32 }
33
34 port = atoi(argv[1]);
35
36 sock = socket(AF_INET, SOCK_STREAM, 0);
37 if(sock < 0)
38 {
39 printf("TCP server socket() failed.\n");
40 return(1);
41 }
42
43 memset(&sin, 0x0, sizeof(struct sockaddr_in *));
44
45 sin.sin_family = AF_INET;
46 sin.sin_port = htons(port);
47 sin.sin_addr.s_addr = INADDR_ANY;
48
49 ret = bind(sock, (struct sockaddr *)&sin,
50 (struct sockaddr));
51 if(ret < 0)
52 {
53 printf("TCP server bind() failed.\n");
54 close (sock);
55 return(1 );
56 }
57
58 ret = listen(sock, 5);
59 if(ret < 0)
60 {
61 printf("TCP server listen() failed.\n");
62 close (sock);
63 return(1 );
64 }
65
66 printf("TCP server listening.\n");
67
68 memset(&csin, 0x0, sizeof(struct sockaddr));
69
70 csock = accept(sock, (struct sockaddr *)&csin, &len);
71 if(csock < 0)
72 {
73 printf("TCP server accept() failed.\n");
74 }
75 else
76 {
77 printf("TCP server: TCP client connection " \
78 "on port %d.\n", port);
79 close(csock);
80 }
81
82 close(sock);
83
84 return(0);
85 }

回送地址編譯

(foster@syngress ~/book) $ gcc -o server1 server1.c
(foster@syngress ~/book) $ ./server1
usage: ./server1: port
執行
(foster@syngress ~/book) $ ./server1 4001
TCP server listening.
server1.c是一個簡單的TCP服務器程序,它只帶有一個命令行參數表示端口號,服務器將在這個端口上監聽遠程客户端的連接。程序首先調用socket( )函數分配一個套接字標識符,然後綁定到指定的端口並調用accept( )函數進行監聽,這個函數將等待客户端的連接。收到客户端的連接以後,與TCP客户端的連接以及服務器端套接字被關閉,程序終止。

回送地址相關分析

● 第36行,程序調用socket( )函數分配套接字標識符,將AF_INET作為域參數傳遞,表示該套接字使用IP協議;將SOCK_STREAM作為類參數傳遞,表示該套接字在傳輸層使用TCP協議進行通信;將0傳遞給作為協議參數傳遞,因為在分配TCP套接字的時候,通常不會用到這個參數。
● 第43行,初始化sockaddr_in結構,用來定義套接字將要綁定的本地端點。
● 第45行,本地端點的family域被指定為AF_INET,與第36行傳給socket( )函數的參數一致。
● 第46行,指定將要綁定的本地端口,端口號命令行參數給出並作為字符數組(char *)傳遞進來。端口號通過atoi( )函數被轉換成4字節的整型數,然後再轉換為網絡字節順序的2字節短整型數,最後賦值給sockaddr_in結構的sin_port成員。
● 第47行,指定要綁定的本地IP地址。這裏用到了無符號整型常量INADDR_ANY,這個值表示套接字將會綁定到所有可用的網絡接口,包括回送接口(loopback interface)。與INADDR_ANY相反,在主機有多個網絡接口的情況下,如果用指定網絡接口的IP地址代替INADDR_ANY,則可以將套接字綁定到其中的一個接口。
● 第49行,調用bind( )函數指定本地端點的信息,包括本地IP地址、端口以及套接字描述符。
● 第58行,調用listen( )函數,指定在拒絕新連接以前,可排除等待的TCP客户端連接請求的數目,並且指定套接字已經就緒,可以接收客户端的連接。程序從這裏開始處理客户端的連接。
● 第70行,調用accept( )函數接收TCP客户端的連接請求,accept( )函數被調用時,將會等待(阻塞)客户端的連接。當收到一個新的TCP客户端請求以後,accept( )函數將返回一個套接字描述符來代表這個新的連接。
● 第79行,關閉由accept( )函數返回的合法套接字描述符。
● 第82行,關閉服務器端套接字,不再允許客户端的連接。
下面,我們首先執行程序server1,接着再執行程序client1。server1將分配一個套接字描述符,並綁定到命令行指定的端口,然後監聽來自客户端的TCP連接。當執行client1時,將會在server1和client1兩個程序之間建立一個TCP連接。最後,兩個程序都將關閉連接並終止。

回送地址活動

1(foster@syngress ~/book) $ ./server1 4001 &
2./server1 4001 & [1] 31802
3
4(foster@syngress ~/book) $ ./client1127.0.0.14001
5 ./client1127.0.0.14001
6
7 TCP server: TCP client connection on port 4001.
8
9 TCP client connected.
10
11 [1] Done ./server1 4001

回送地址解析

server1執行時指令綁定4001號TCP端口,並在該端口進行監聽。在大部分操作系統上,1到1024號端口限制為僅供具有特定權限的程序使用,所以在這個示例裏面使用了大於1024的端口。命令行末尾的&符號表示程序將作為後台進程運行,所以會立即返回到命令提示符以便執行client1程序。
● 第1行,TCSH shell打印出用户輸入的命令。
● 第2行,TCSH shell打印server1後台進程的進程ID。
● 第4行,以IP地址127.0.0.1和端口4001作為參數執行程序client1。
● 第5行,TCSH shell打印用户輸入的命令。
● 第7行,server1打印一條信息,表示它收到客户端的TCP連接,即client1發起的連接。
● 第9行,client1打印信息表明已經建立了到server1的連接。
上面演示了127.x.x.x在TCP和UDP套接字編程中的應用。