回送地址

回送地址

中文名 回送地址
应用于 网络软件测试、本地机进程间通信
目录导航

名片信息

IP地址由两部分组成,即网络号和主机号。网络号标识的是internet上的一个网络,主机号标识的是网络中的某台主机。IP地址长度为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地址的最前面为“11110”,所以地址的网络号取值于240~255之间。 

Ping

一、我们可以Ping回送地址。通常如果回送地址Ping不同,就说明IP堆栈出了故障。如果不通的话,表明网络出了问题。[1]

例如:我们在命令行运行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:\>

       二、使用Ping检查 连通性有五个步骤:

1. 使用ipconfig /all观察本地网络设置是否正确;

2. Ping 127.0.0.1,127.0.0.1 回送地址Ping回送地址是为了检查本地的TCP/IP协议有没有设置好;

3. Ping本机IP地址,这样是为了检查本机的IP地址是否设置有误;

4. Ping本网网关或本网IP地址,这样的是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常;(在非局域网中这一步骤可以忽略)

5. Ping远程IP地址,这主要是检查本网或本机与外部的连接是否正常。

举例分析

主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,例如我们可以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套接字编程中的应用

相关百科
返回顶部
产品求购 求购