当前位置: 首页 > news >正文

做网站是先买域名还是国内三大电商平台分析报告

做网站是先买域名还是,国内三大电商平台分析报告,纺织厂网站模板,建筑工程网格化管理的目的和意义《TCP/IP网络编程》学习笔记 | Chapter 3#xff1a;地址族与数据序列 《TCP/IP网络编程》学习笔记 | Chapter 3#xff1a;地址族与数据序列分配给套接字的IP地址和端口号网络地址网络地址分类和主机地址边界用于区分套接字的端口号数据传输过程示例 地址信息的表示表示IPv4… 《TCP/IP网络编程》学习笔记 | Chapter 3地址族与数据序列 《TCP/IP网络编程》学习笔记 | Chapter 3地址族与数据序列分配给套接字的IP地址和端口号网络地址网络地址分类和主机地址边界用于区分套接字的端口号数据传输过程示例 地址信息的表示表示IPv4地址的结构体结构体sockaddr_in的成员分析成员sin_family成员sin_port成员sin_addr成员sin_zero 网络字节序与地址变换字节序与网络字节序字节序转换 网络地址的初始化与分配将字符串信息转换为网络字节序的整数型网络地址初始化客户端地址信息初始化INADDR_ANY向套接字分配网络地址 基于Windows的实现函数htons、htonl在Windows中的使用函数inet_addr、inet_ntoa在Windows中的使用WSAStringToAddress WSAAddressToString 习题1IP地址族IPv4和IPv6有何区别在何种背景下诞生了IPv6?2通过IPV4网络ID、主机ID及路由器的关系说明向公司局域网中的计算机传输数据的过程。3套接字地址分为IP地址和端口号。为什么需要IP地址和端口号或者说通过IP可以区分哪些对象通过端口号可以区分哪些对象4请说明IP地址分类方法并说出下面这些IP地址的分类。5计算机通过路由器或交换机连接到互联网。请说出路由器和交换机的作用。6什么是知名端口其范围是多少知名端口中具有代表性的HTTP和FTP端口号各是多少7bind函数8请解释大端序、小端序、网络字节序并说明为何需要网络字节序。9大端计算机希望将4字节整型数据12传到小端序计算机。请说出数据传输过程中发生的字节序变换过程。 10怎么表示回送地址其含义是什么如果向回送地址传输数据将会发生什么情况 《TCP/IP网络编程》学习笔记 | Chapter 3地址族与数据序列 分配给套接字的IP地址和端口号 IP是为收发网络数据而分配给计算机的值。端口号是为区分程序中创建的套接字而分配给套接字的序号。 网络地址 IP地址有两种表达形式 IPv44字节地址族IPv616字节地址族 一定要记住IPv4和IPv6不只是在地址长度不同在其具体的协议实现上是有很大程度的不同的。IPv6出现的主要目的是为了解决由于计算机数量的暴增导致IP地址可能出现不足的问题的现在IPv6的地址范围可以让地球上任何一个沙子都拥有IP地址。 让我们继续说回到IPv4上IPv4标准的4字节IP地址分为网络地址和主机指计算机地址且分为A、B、C、D、E等类型。 类型地址范围网络地址位数主机地址位数可分配的网络数量每个网络可分配的主机数量A1.0.0.0 - 126.255.255.25582412816,777,216B128.0.0.0 - 191.255.255.255161616,38465,536C192.0.0.0 - 223.255.255.2552482,097,152256D224.0.0.0 - 239.255.255.255未分配未分配未分配未分配 网络地址是用来标识一个特定网络的。它告诉路由器和其他网络设备数据应该被发送到哪个网络。 主机地址是用来标识网络中具体设备的。它必须在网络中是唯一的以确保数据能够被正确地发送到正确的设备。 现在我来举个例子来具体理解一下网络地址和主机地址的含义。 假设向WWW.SEMI.COM公司传输数据该公司内部构建了局域网把所有计算机连接起来。因此首先应向SEMI.COM网络传输数据也就是说并非一开始就浏览所有4字节IP地址进而找到目标主机而是仅浏览4字节IP地址的网络地址先把数据传到SEMI.COM的网络。SEMI.COM网络构成网络的路由器接收到数据后浏览传输数据的主机地址主机ID并将数据传给目标计算机。 网络地址分类和主机地址边界 只需通过地址的第一个字节即可判断网络地址占用的字节数因为我们根据地址的边界区分网络地址如下所示 A类地址的首字节范围:0~127B类地址的首字节范围:128-191C类地址的首字节范围:192~223 还有如下这种表述方式 A类地址的首位以0开始B类地址的前2位以10开始C类地址的前3位以110开始 正因如此通过套接字收发数据时数据传到网络后即可轻松找到正确的主机。 用于区分套接字的端口号 端口号是计算机为了区分程序中创建的不同套接字而分配给套接字的序号由16位组成端口号唯一可配分的范围在0~ 65535其中0~10223是知名端口一般分配给特定应用程序所以应当分配范围之外的值。 端口号与套接字是一一对应关系端口号与程序的不同通信功能是一一对应关系。 TCP套接字和UDP套接字不会共用端口号所以允许重复。 数据传输过程示例 下面是基于IP地址的数据传输过程图 主要步骤 主机向203.211.217.202和203.211.172.103传输数据。其中203.211.217和203.211.172是网络ID通过网络ID可以把数据传输到指定的网络路由器或交换机。202和103是主机ID网络路由器或交换机通过主机ID将数据传输到指定的设备上。操作系统收到数据后根据数据包里的端口号将数据传输到对应的程序上。 地址信息的表示 应用程序中使用的IP地址和端口号以结构体的形式给出了定义。 表示IPv4地址的结构体 此结构体将作为地址信息传递给bind函数。 struct sockaddr_in {sa_family_t sin_family; // 地址族uint16_t sin_port; // 16位TCO/UDP端口号struct in_addr sin_addr; // 32位IP地址char sin_zero[8]; // 不使用 };该结构体中提到的另一个结构体 in_addr 定义如下它用来存放32位IP地址。 struct in_addr {in_addr_t s_addr; // 32位IPv4地址 };这些数据类型可以参考 POSIX它是为 UNIX 系列操作系统设立的标准它定义了一些其他数据类型如下表所示 数据类型名称数据类型说明声明的头文件int8_tsigned 8-bit intsys/types.huint8_tunsigned 8-bit int (unsigned char)sys/types.hint16_tsigned 16-bit intsys/types.huint16_tunsigned 16-bit int(unsigned short)sys/types.hint32_tsigned 32-bit intsys/types.huint32_tunsigned 32-bit int(unsigned long)sys/types.hsa_family_t地址族sys/socket.hsocklen_t长度sys/socket.hin_addr_tIP地址声明为uint32_tnetinet/in.hin_port_t端口号声明为uint16_tnetinet/in.h 看到这么长的类型表有人不禁会问为什么要搞出这么长的类型名呢 其中一个很大的原因就是移植性的问题如果适用于一个32位计算机的代码搬到64位的计算机上运行可定会出现由于位数不同导致的int被解释为不同的字节大小这种问题是万万不可发生的。因此如果使用int32_t类型的数据就能保证任何时候都占用4字节即使转到不同字节的计算机上。 结构体sockaddr_in的成员分析 成员sin_family 每种协议族适用的地址族均不同。比如IPv4使用4字节地址族IPv6使用16字节地址族。 地址族(Address Family)含义AF_INETIPv4网络协议中使用的地址族 AF_INET6 |IPv6网络协议中使用的地址族 AF_LOCAL| 本地通信中采用的UNIX协议的地址族 AF_LOCAL是为了说明具有多种地址族而添加的。 成员sin_port 该成员保存16位端口号重点在于它以网络字节序保存。 成员sin_addr 该成员保存32位地址信息且也以网络字节序保存。为理解好该成员应同时观察结构体in_addr。但结构体in_addr明为uint32_t因此只需当作32位整数型即可。 成员sin_zero 无特殊含义。只是为使结构体sockaddr_in的大小和sockaddr结构体保持一致而插入的成员。必需填充为0否则无法得到想要的结果。后面会另外讲解sockaddr。 从之前介绍的代码也可看出sockaddr_in结构体变量地址值将以如下方式传递给bind函数。稍后将给出关于bind函数的详细说明希望各位重点关注参数传递和类型转换部分的代码。 struct sockaddr_in serv_addr;if(bind(serv_sock, (struct sockaddr *)serv_addr, sizeof(serv_addr)) -1)error_handling(bind() error);此处重要的是第二个参数的传递。实际上bind函数的第二个参数期望得到sockaddr结构体变量地址值包括地址族、端口号、IP地址等。 struct sockaddr {sa_family_t sin_family; // 地址族char sa_data[14]; // 地址信息 };这个结构体结构相对于sockaddr_in来说它将后三个成员都放入sa_data之中。而这对于包含地址信息非常麻烦继而有了新的结构体sockaddr_in。但是最后还是要转换为sockaddr型的结构体变量再传递给bind函数即可。 网络字节序与地址变换 字节序与网络字节序 CPU内存保存数据有两种方式 大端序 高位字节存放到低位地址小端序 高位字节存放到高位地址 示例 0x1234567中0x12是最高位字节0x67是最低位字节大端序中先保存最高位。 0x1234567中0x12是最高位字节0x67是最低位字节小端序中先保存最低位。 0x12和0x34构成的大端序系统值与0x34和0x12构成的小端序系统值相同。换言之只有改变数据保存顺序才能被识别为同一值。 如果大端序系统传输数据0x1234时未考虑字节序问题而直接以0x12、0x34的顺序发送。结果接收端以小端序方式保存数据因此小端序接收的数据变成0x3412而非0x1234就会出现问题。 正因如此在通过网络传输数据时约定统一方式这种约定称为网络字统一节序Network Byte Order非常简单——统一为大端序。因此所有计算机接受数据时应识别该数据时网络字节格式小端序系统传输数据时应转换为大端序的排列方式。 字节序转换 为了统一标准在网络传输前得先把主机数据数组转化为大端序的网络字节序格式下面是四种转换字节序的函数 unsigned short htons(unsigned short); unsigned short ntohs(unsigned short); unsigned long htonl(unsigned long); unsigned long ntohl(unsigned long);s指shortl指longh指主机host字节序n指网络network字节序。 因此htons指把short类型数据从主机字节序转换为网络字节序ntohl指把long类型数据从网络字节序转换为主机字节序。 示例程序 #include stdio.h #include arpa/inet.hint main(int argc, char *argv[]) {unsigned short host_port 0x1234;unsigned short net_port;unsigned long host_addr 0x12345678;unsigned long net_addr;net_port htons(host_port);net_addr htonl(host_addr);printf(Host ordered port: %#x \n, host_port);printf(Network ordered port: %#x \n, net_port);printf(Host ordered address: %#lx \n, host_addr);printf(Network ordered address: %#lx \n, net_addr);return 0; }Intel 和 AMD 系列的 CPU 都采用小端序标准。 网络地址的初始化与分配 将字符串信息转换为网络字节序的整数型 sockaddr_in中保存地址信息的成员为32位整数型。因此为了分配IP地址需要将其表示为32位整数型数据。 对于IP地址的表示我们熟悉的是点分十进制表示法(Dotted Decimal Notation)而非整数型数据表示法。幸运的是有个函数会帮我们将字符串形式的IP地址转换成32位整数型数据。此函数在转换类型的同时进行网络字节序转换。 #includearpa/inet.hin_addr_t inet_addr(const char *cp);成功时返回32位大端序整数型值失败时返回INADDR_NONE。 参数 cp 是一个指向包含 IPv4 地址点分十进制字符串的字符指针例如 “192.168.1.1”。inet_addr函数会将其转换为32位整数型数据并返回。当然该整数型值满足网络字节序。另外该函数的返回值类型in_addr_t在内部声明为32位整数型。下列示例表示该函数的调用过程。 #include stdio.h #include arpa/inet.hint main(int argc, char *argv[]) {char *addr1 1.2.3.4;char *addr2 1.2.3.256;unsigned long conv_addr inet_addr(addr1);if (conv_addr INADDR_NONE)printf(Error occurred! \n);elseprintf(Network ordered integer addr: %#lx \n, conv_addr);conv_addr inet_addr(addr2);if (conv_addr INADDR_NONE)printf(Error occurred! \n);elseprintf(Network ordered integer addr: %#lx \n\n, conv_addr);return 0; }从运行结果可以看出inet_addr函数不仅可以把IP地址转成32位整数型而且可以检测无效的IP地址。另外从输出结果可以验证确实转换为网络字节序。 inet_aton函数与inet_addr函数在功能上完全相同也将字符串形式IP地址转换为32位网络字节序整数并返回。只不过该函数利用了in_addr结构体且其使用频率更高。 #include arpa/inet.hint inet_aton(const char * string, struct in_addr * addr);成功时返回1true失败时返回0false。 参数 string需转换的IP地址信息的字符串指针将保存转换结果的in_addr结构体变量的指针 通过以下示例来了解inet_aton函数调用过程。 #include stdio.h #include stdlib.h #include arpa/inet.hvoid error _handling(char *message) {fputs(message, stderr);fputc(\n, stderr);exit(1); }int main(int argc, char *argv[]) {char *addr 127.232.124.79;struct sockaddr_in addr_inet;if (!inet_aton(addr, addr_inet.sin_addr))error _handling(Conversion error);elseprintf(Network ordered integer addr: %#x \n, addr_inet.sin_addr.s_addr);return 0; }下面再介绍一个做的功能完全和上述函数相反的函数 #include arpa/inet.hchar * inet_ntoa(struct in_addr adr);成功时返回转换的字符串地址值失败时返回-1。 该函数将通过参数传入的整数型IP地址转换为字符串格式并返回。但调用时需小心返回值类型为char指针。返回字符串地址意味着字符串已保存到内存空间但该函数未向程序员要求分配内存而是在内部申请了内存并保存了字符串。也就是说调用完该函数后应立即将字符串信息复制到其他内存空间。因为若再次调用inet_ntoa函数则有可能覆盖之前保存的字符串信息。总之再次调用inet_ntoa函数前返回的字符建地此值是有效的。若需要长期保存则应将字符串复制到其他内存空间。 下面给出上述函数调用示例 #include stdio.h #include string.h #include arpa/inet.hint main(int argc, char *argv[]) {struct sockaddr_in addr1, addr2;char *str_ptr;char str_arr[20];addr1.sin_addr.s_addr htonl(0x1020304);addr2.sin_addr.s_addr htonl(0x1010101);str_ptr inet_ntoa(addr1.sin_addr);strcpy(str_arr, str_ptr);printf(Dotted-Decimal notation1: %s \n, str_ptr);inet_ntoa(addr2.sin_addr);printf(Dotted-Decimal notation2: %s \n, str_ptr);printf(Dotted-Decimal notation3: %s \n, str_arr);return 0; }网络地址初始化 常用的初始化方法 struct sockaddr_in addr;char *serv_ip 211.217.168.13;char *serv_port 9190;memset(addr, 0, sizeof(addr));addr.sin_family AF_INET;addr.sin_addr.s_addr inet_addr(serv_ip);addr.sin_port htons(atoi(serv_port));客户端地址信息初始化 客户端声明sockaddr_in结构体初始化为要与之连接的服务器端套接字的IP和端口号然后调用connect函数。 INADDR_ANY 每次创建服务器端套接字都要输入IP地址会有些繁琐此时可如下初始化地址信息。 struct sockaddr_in addr;// char *serv_ip 211.217.168.13;char *serv_port 9190;memset(addr, 0, sizeof(addr));addr.sin_family AF_INET;addr.sin_addr.s_addr htonl(INADDR_ANY);addr.sin_port htons(atoi(serv_port));与之前方式最大的区别在于利用常数INADDR_ANY分配服务器端的IP地址。若采用这种方式则可自动获取运行服务器端的计算机IP地址不必亲自输入。而且若同一计算机中已分配多个IP地址多宿主Multi-homed计算机一般路由器属于这一类则只要端口号一致就可以从不同IP地址接收数据。因此服务器端中优先考虑这种方式。而客户端中除非带有一部分服务器端功能否则不会采用。 向套接字分配网络地址 既然已讨论了sockaddr_in结构体的初始化方法接下来就把初始化的地址信息分配给套接字。bind函数负责这项操作。 #include sys/socket.hint bind(int sockfd, struct sockaddr * myaddr, socklen_t addrlen);成功时返回0失败时返回-1。 参数 sockfd要分配地址信息IP地址和端口号的套接字文件描述符。myaddr存有地址信息的结构体变量地址值。addrlen第二个结构体变量的长度。 如果此函数调用成功则将第二个参数指定的地址信息分配给第一个参数中的相应套接字。 基于Windows的实现 函数htons、htonl在Windows中的使用 这些函数的用法与Linux平台下的使用没有区别。 #include stdio.h #include winsock2.hvoid ErrorHanding(char *message) {fputs(message, stderr);fputc(\n, stderr);exit(1); }int main(int argc, char *argv[]) {WSADATA wsaData;unsigned short host_port 0x1234;unsigned short net_port;unsigned long host_addr 0x12345678;unsigned long net_addr;if (WSAStartup(MAKEWORD(2, 2), wsaData) ! 0)ErrorHanding(WSAStartup() error!);net_port htons(host_port);net_addr htonl(host_addr);printf(Host ordered port: %#x \n, host_port);printf(Network ordered port: %#x \n, net_port);printf(Host ordered address: %#lx \n, host_addr);printf(Network ordered address: %#lx \n, net_addr);WSACleanup();return 0; }运行结果 C:\Users\81228\Documents\Program\TCP IP Project\Chapter 3gcc endian_conv_win.c -lwsock32 -o endian_convC:\Users\81228\Documents\Program\TCP IP Project\Chapter 3endian_conv Host ordered port: 0x1234 Network ordered port: 0x3412 Host ordered address: 0x12345678 Network ordered address: 0x78563412函数inet_addr、inet_ntoa在Windows中的使用 测试程序 #include stdio.h #include string.h #include winsock2.hvoid ErrorHanding(char *message) {fputs(message, stderr);fputc(\n, stderr);exit(1); }int main(int argc, char *argv[]) {WSADATA wsaData;if (WSAStartup(MAKEWORD(2, 2), wsaData) ! 0)ErrorHanding(WSAStartup() error!);/* inet_addr 函数调用示例 */{char *addr 127.212.124.78;unsigned long conv_addr inet_addr(addr);if (conv_addr INADDR_NONE)printf(Error occurred! \n);elseprintf(Network ordered integer addr: %#lx \n, conv_addr);}/* inet_ntoa 函数调用示例 */{struct sockaddr_in addr;char *strPtr;char strArr[20];addr.sin_addr.s_addr htonl(0x1020304);strPtr inet_ntoa(addr.sin_addr);strcpy(strArr, strPtr);printf(Dotted-Decimal notation3 %s\n, strArr);}WSACleanup();return 0; }Windows中不存在inet_aton函数。 运行结果 C:\Users\81228\Documents\Program\TCP IP Project\Chapter 3gcc inet_adrconv_win.c -lwsock32 -o inet_adrconvC:\Users\81228\Documents\Program\TCP IP Project\Chapter 3inet_adrconv Network ordered integer addr: 0x4e7cd47f Dotted-Decimal notation3 1.2.3.4与Linux完全相同。下面是示例程序 SOCKET hSocket; SOCKADDR_IN serverAddr; char *serverPort 9190;// 创建服务端套接字 hSocket socket(PF_INET, SOCK_STREAM, 0);// 地址信息初始化 memset(serverAddr, 0, sizeof(serverAddr)); serverAddr.sin_family AF_INET; serverAddr.sin_addr.s_addr inet_addr(INADDR_ANY); serverAddr.sin_port htons(atoi(serverPort));// 分配地址信息 bind(hServerSock, (struct sockaddr *)serverAddr, sizeof(serverAddr))WSAStringToAddress WSAAddressToString 下面介绍Winsock2中增加的2个转换函数。它们在功能上和inet_ntoa和inet_addr全相同但优点在于只持多种协议在IPv4和IPv6中均可适用。当然它们也有缺点使用inet_ntoa、inet_addr可以很容易地在Linux和Windows之间切换程序。而将要介绍的这2个函数则依赖于特定平台会降低兼容性。 #include winsock2.hINT WSAStringToAddress(LPTSTR AddressString, INT AddressFamily, LPWSAPROTOCOL_INFO lpProtocolInfo,LPSOCKADDR lpAddress, LPINT lpAddressLength );成功时返回0失败时返回SOCKET_ERROR。 参数 AddressString含有IP和端口号的字符串地址值AddressFamily第一个参数中地址所属的地址族信息lpProtocolInfo设置协议提供者Provider默认为NULLlpAddress保存地址信息的结构体变量地址值lpAddressLength第四个参数中传递的结构体长度所在的变量地址值 上述函数中新出现的各种类型几乎都是针对默认数据类型的typedef声明。 WSAAddressToString与WSAStringToAddress在功能上正好相反它将结构体中的地址信息转换成字符串形式。 #include winsock2.hINT WSAAddressToString(LPSOCKADDR lpsaAddress, DWORD dwAddressLength,LPWSAPROTOCOL_INFO lpProtocolInfo, LPSTR lpszAddressString,LPDWORD lpdwAddressStringLength); 成功时返回0失败时返回 SOCKET_ERROR。 参数 lpsaAddress需要转换的地址信息结构体变量地址值dwAddressLength第一个参数中结构体的长度lpProtocolInfo设置协议提供者默认为NULLlpszAddressString保存转换结果的字符串地址值lpdwAddressStringLength第四个参数中存有地址信息的字符串长度 以下是这两个函数的示例 #undef UNICODE #undef _UNICODE #include stdio.h #include winsock2.hint main(int argc, char *argv[]) {char *strAddr 203.211.218.102:9190;char strAddrBuf[50];SOCKADDR_IN servAddr;int size;WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), wsaData);size sizeof(servAddr);WSAStringToAddress(strAddr, AF_INET, NULL, (SOCKADDR *)servAddr, size);size sizeof(strAddrBuf);memset(strAddrBuf, 0, sizeof(strAddrBuf));WSAAddressToString((SOCKADDR *)servAddr, sizeof(servAddr), NULL, strAddrBuf, (LPDWORD)size);printf(Second conv result: %s \n, strAddrBuf);WSACleanup();return 0; }注意WSAAddressToString API 的最后一个参数是 unsigned long 类型的指针要显式转换。 用命令行编译程序gcc conv_addr_win.c -lwsock32 -o conv_addr 遇到报错 C:\WINDOWS\TEMP\ccjFwpSG.o:conv_addr_win.c:(.text0x7a): undefined reference to __imp_WSAStringToAddressA C:\WINDOWS\TEMP\ccjFwpSG.o:conv_addr_win.c:(.text0xd2): undefined reference to __imp_WSAAddressToStringA collect2.exe: error: ld returned 1 exit status错误解释 这个错误表示链接器无法找到__imp_WSAStringToAddressA函数的定义。WSAStringToAddressA是Windows Sockets API中的一个函数用于将一个IP地址字符串转换为一个sockaddr结构。在使用了WSAStringToAddressA函数的程序中如果没有正确地链接Winsock库就会出现这个错误。 解决方法 确保你的程序链接了正确的Winsock库。在使用GCC或类似的编译器时可以通过在编译命令中加入-lws2_32来链接Winsock库。 运行结果 C:\Users\81228\Documents\Program\TCP IP Project\Chapter 3gcc conv_addr_win.c -o conv_addr -lws2_32C:\Users\81228\Documents\Program\TCP IP Project\Chapter 3conv_addr Second conv result: 203.211.218.102:9190习题 1IP地址族IPv4和IPv6有何区别在何种背景下诞生了IPv6? IPV4是4字节地址族IPV6是16字节地址族。 IPV6的诞生是为了应对2010年前后IP地址耗尽的问题而提出的标准。 2通过IPV4网络ID、主机ID及路由器的关系说明向公司局域网中的计算机传输数据的过程。 向目标主机传输数据首先向目标IP所属的网络传输数据。此时使用的是IP地址中的网络ID。数据传到路由器路由器将参照IP地址的主机号查找路由表从对应的网口发送数据数据经过路由器转发最终送到目标主机。 3套接字地址分为IP地址和端口号。为什么需要IP地址和端口号或者说通过IP可以区分哪些对象通过端口号可以区分哪些对象 IP地址是为了区分网络上的主机。端口号是区分同一主机下的不同的socket以确保程序进程都能准确收发数据。 4请说明IP地址分类方法并说出下面这些IP地址的分类。 214.121.212.102 - C类 120.101.122.89 - A类 129.78.102.211 - B类 5计算机通过路由器或交换机连接到互联网。请说出路由器和交换机的作用。 路由器是连接两个或多个网络的硬件设备在网络间起网关的作用是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。作用于网络层寻址转发依靠 IP 地址 交换机是一种用于电光信号转发的网络设备。一般作用于链路层过滤转发依靠 MAC 地址 6什么是知名端口其范围是多少知名端口中具有代表性的HTTP和FTP端口号各是多少 知名端口Well-known PROT是指预定分配给特定操作的端口。其范围是0~1023。 HTTP80。 FTP21。 7bind函数 bind函数原型 int bind(SOCKET s, const struct sockaddr *name, int namelen);调用 bind(hServerSock, (struct sockaddr *)serverAddr, sizeof(serverAddr))为什么bind中第二个参数是sockaddr但是传入的是sockaddr_in 答 bind函数第二个参数类型sockaddr结构体很难分配IP地址和端口号的空间大小因为结构体sockaddr并非只为IPv4设计所以要兼容所以sockaddr结构体内将IP地址和端口号合并到一起用一个成员 sa_data 表示。因此对于不同类型网络的IP地址和PORT号的分配是可先通过sockaddr_in完成之后再强制转换成sockaddr类型因为两个结构体的长度相同都是16字节强制转换类型时不会丢失字节也没有多余的字节。 8请解释大端序、小端序、网络字节序并说明为何需要网络字节序。 小端序是把高位字节存储到高位地址上大端序是把高位字节存储到低位地址上。因为保存栈的方式有差异所以对网络传输数据的过程制定了标准这就是“网路字节序”。而且在网络字节序中数据传输的标准是“大端序”。 9大端计算机希望将4字节整型数据12传到小端序计算机。请说出数据传输过程中发生的字节序变换过程。 因为网络字节序的顺序标准是“大端序”所以大端序的计算机在网络传输中不需要先转换字节顺序直接传输。但是接受数据的是小端序计算机因此要经过网络转本地序的过程再保存到存储设备上。 10怎么表示回送地址其含义是什么如果向回送地址传输数据将会发生什么情况 127.0.0.1 / localhost。 回送地址表示计算机本身。 因此如果将数据传送到IP地址127.0.0.1数据不进行网络传输而是直接返回。
http://www.dnsts.com.cn/news/11704.html

相关文章:

  • 女的可以学做网站wordpress idc模板
  • 南沙网站制作云卡会员卡管理系统
  • 服务器在国外的网站内网网站建设的亮点特点
  • 成都网站建设哪里好点深圳网络推广解决方案
  • 个人网站做哪些内容购物类网站
  • 长沙网站制造培训收费网站建设
  • 网站程序开发公司徐州泉山建设局网站
  • 建立网站费用多少网站建设方案硬件支撑
  • 个人网站名商洛市住户和城乡建设局网站信息价
  • 最好的手机资源网站数码设计网站
  • 网站开发软件 连接SQL数据库企业网站整理优化
  • 如何wix 做 网站搜索引擎营销推广方案
  • 浙江海滨建设集团有限公司网站网站模板系统
  • wordpress做网站手机手机网站建设公司
  • 企业网站的视频页如何做东莞ui设计公司
  • 互联网工具型网站车载互联系统网站建设
  • 高端企业网站制作返回json数据的网站
  • 电商网站建设如何上海中高风险地区名单最新
  • 网站开发毕业设计说明孝感网站建设
  • 一个ip做几个网站网站建设中图片怎么样
  • 个人网站 摄影展示怎么查询网站开发时间
  • 大型购物网站建设域名收录查询工具
  • 12306网站开发有哪些可以做翻译兼职的网站吗
  • 给视频做特效的网站遵义做网站推广
  • 中牟高端网站建设珠海网站建设知识
  • 做同城网站赚钱吗深圳福田商城网站建设
  • 东莞在哪里学网站建设上海心橙科技网站建设
  • 网页设计入门教学视频宁波seo建站价格
  • 电商网站前端制作分工深圳坪山医院
  • 张家口网站建设哪里好个人网站空间多大合适