127.0.0.1 + 回送地址
转者补充:当用C++编程来获取本机的地址时,正常情况下可以获取到主机的IP地址,但是当在断网的情况下获取到的是127.0.0.1,编程者需要判断此种情况。还有一点要强调下,如果在本机安装了虚拟机,还可能获取的是虚拟机的写死的地址。127.0.0.1是回送地址,指本地机,一般用来测试使用。回送地址(127.x.x.x)是本机回送地址(Loopback Address),即主机IP
·
编辑本段基本简介
IP地址由两部分组成,即网络号和主机号。网络号标识的是internet上的一个网络,主机号标编辑本段IP地址的四大类型识的是网络中的某台主机。
IPv4的地址长度为32位,共4个字节,但实际中我们用点分十进制记法。 IP地址根据网络号和主机号来分,分为A、B、C三类及特殊地址D、E。 全0和全1的都保留不用。 A类:第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为“0”,所以地址的网络号取值于1~126之间。一般用于大型网络。 B类:前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为“10”,所以地址的网络号取值于128~191之间。一般用于中等规模网络。 C类:前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。一般用于小型网络。编辑本段特殊地址
D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户。 E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。 回送地址:127.0.0.1。一般用于测试使用。例如:ping 127.0.0.1 来测试本机TCP/IP是否正常。 在有类IP地址的规定中,第一部分是1~126为A类地址,128~191为B类地址,那么中间留的127.0.0.1被称为 本地回环地址,主要作用有两个:一是测试本机的网络配置,能PING通127.0.0.1说明本机的网卡和IP协议安装都没有问题;另一个作用是某些SERVER/CLIENT的 应用程序在运行时需调用服务器上的资源,一般要指定SERVER的IP地址,但当该程序要在同一台机器上运行而没有别的SERVER时就可以把SERVER的资源装在本机,SERVER的IP地址设为127.0.0.1也同样可以运行。 对于大多数习惯用localhost的来说,实质上就是指向127.0.0.1这个本地IP地址。在 操作系统中有个配置文件将localhost与127.0.0.1绑定在了一起。 127.0.0.1对于网站建设者来说是常常用到的。 大家常用“ping 127.0.0.1”命令在本机上做回路测试,用来验证本机的 TCP/IP协议簇是否被正确安装。但你发现了吗?使用“ping 127.1”这个命令也能得到同样的测试结果,其实“ping 127.1”和“ping 127.0.0.1”这两条命令是一样的,都是在进行回路测试。 为什么会这样呢?这就是Ping命令应用中IP地址的使用技巧。大家都知道,IP地址由32位二进制数字组成,为了方便大家记忆,将每8位二进制数字换算成十进制数字,因此就形成了容易记忆的由四部分十进制数字组成的IP地址(如127.0.0.1)。由于,Windows操作系统具有自动填充 “.0”的功能,因此我就可将“127.0.0.1”变为“127.1”。 但是,这个“.0”的省略是有条件限制的,并不能任意省略。在Ping命令的应用中,只能将在IP地址的最后一部分十进制数字前出现的一个或多个“.0”省略,如把“ping 127.0.0.1”命令改写成“ping 127.1”。编辑本段其他信息
ping注意事项
如果这一个或多个 “.0”没有紧挨着最后一部分的十进制数字,而是在其他位置,则这个“.0”不能省略,如“ping 202.0.96.1”就不能写成“ping 202.96.1”。这是因为“ping 202.96.1”返回的结果是“202.96.0.1”的应答信息,而不是“202.0.96.1”的应答信息。在批处理中的应用
1在批处理中 相信大多数懂一点批处理的人都见过类似于“ping 127.1 -n 5 >nul”这样的命令。 其实批处理作者的目的肯定不是测试网络,而是为了让批处理运行延时。 这个命令的意思是让批处理运行到这里时延迟4秒在继续运行下面的命令(ping命令每隔一秒试探一次,第一次试探在执行时就试探过了,所以5次试探是延迟4秒),后面>nul 的意思是不在屏幕上显示数据,达到延迟运行又不对批处理造成丝毫影响的目的。产生的效果就是一个白色的闪动符号闪动等待。 2在网络链接中 同一IP段的数据传输使用地址:127.0.0.1 简单来说就是网上邻居使用此地址传输3.需要特别注意
收到127.0.0.1的响应表示主机的ip配置正确。此响应来自网络层。但是此响应比不代表地址、掩码、和网关配置正确。它也不能说明有关网络协议族下层的任何状态。此方法只是测试网络层的ip联通性。 cisco官网原文(A response from 127.0.0.1 indicates that IP is properly installed on the host. This response comes from the Network layer. This response is not, however, an indication that the addresses, masks, or gateways are properly configured. Nor does it indicate anything about the status of the lower layer of the network stack. This simply tests IP down through the Network layer of the IP protocol. If we get an error message, it is an indication that TCP/IP is not operational on the host .)-
扩展阅读:
-
- 1
http://baike.baidu.com/view/1179381.htm
编辑本段操作方法
在“ 运行”程序中输入“ cmd”命令,然后再弹出的对话框中输入“ping 127.x.x.x”,再按回车键。编辑本段实际应用
我们分两部分介绍如下: 一、我们可以Ping回送地址。通常如果回送地址Ping不通,就说明IP堆栈出了故障。如果不通的话,表明网络出了问题。 例如:我们在命令行运行ping 127.0.0.1 ,以检查主机的TCP/IP协议是否安装并正常工作,如下: c:\>ping 127.0.0.1 Pinging 127.0.0.1 with 32 bytes of data: Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Ping statistics for 127.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@gmail.com> 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连接。最后,两个程序都将关闭连接并终止。编辑本段TCP客户端与服务器的活动
1(foster@syngress ~/book) $ ./server1 4001 & 2./server1 4001 & [1] 31802 3 4(foster@syngress ~/book) $ ./client1 127.0.0.1 4001 5 ./client1 127.0.0.1 4001 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。127.0.0.1是一个回送地址,被分配给回送接口。回送接口是一个仅能被本地主机上运行的程序所访问的逻辑接口。实际上大部分系统都将localhost作为127.0.0.1的别名。 ● 第5行,TCSH shell打印用户输入的命令。 ● 第7行,server1打印一条信息,表示它收到客户端的TCP连接,即client1发起的连接。 ● 第9行,client1打印信息表明已经建立了到server1的连接。 上面演示了127.x.x.x在TCP和UDP套接字编程中的应用
- 1
更多推荐
已为社区贡献1条内容
所有评论(0)