P1. IP地址格式
IP 地址是一个32位的二进制数,它通常采用点分_________进制数表示
print(10) //这是python
**************************************************
P2. IP地址类别和子网掩码
IP 地址 192.168.1.2 属于 ____类地址 ,其默认的子网掩码为__________
print("C")
print("255.255.255.0")
//这是python
**************************************************
P3. TCP/IP四层模型
print("应用层")
print("传输层")
print("网络接口层")
//这是python
**************************************************
P4. 网络字节序
现有网络字节序(BigEndian)数据:0x 12 34 56 78,将其转换为小端字节序输出。
#include<stdio.h>
#include<arpa/inet.h>
int main(){
unsigned long a;
unsigned long b;
scanf("%x",&a);
b=htonl(a);
printf("%#lx",b);
return 0;
}
**************************************************
P5. 初始化TCP类型的套接字
补全以下初始化TCP套接字代码(在空白处填上3个参数):
#include <stdio.h>
int main() {
printf("socket(PF_INET,SOCK_STREAM,0);");
return 0
}
**************************************************
P6. 转换IP地址
IP地址通常是字符串类型,例如:"1.2.3.4",系统给我们提供了 inet_addr() 函数来将字符串类型的IP地址转换为32位网络字节序的整型数据。
#include <stdio.h>
#include <arpa/inet.h>
int main()
{
int s1,s2,s3,s4;
char ip_addr[20];
scanf("%d.%d.%d.%d", &s1, &s2, &s3, &s4);
sprintf(ip_addr,"%d.%d.%d.%d",s1,s2,s3,s4);
unsigned long addr=inet_addr(ip_addr);
printf("%#lx",addr);
}
**************************************************
P7. 转换IP地址(Ⅱ)
系统给我们提供了第二种转换IP地址的方式,除了inet_addr()以外还提供了inet_aton(),inet_ntoa()两种方法:
inet_aton()//字符串转整型
inet_ntoa()//整型转字符串
请调用inet_aton()对字符串类型的IP地址进行转换
#include<stdio.h>
#include<arpa/inet.h>
int main() {
struct sockaddr_in addr_inet;
int s1,s2,s3,s4;
char ip_addr[20];
scanf("%d.%d.%d.%d", &s1, &s2, &s3, &s4);
sprintf(ip_addr,"%d.%d.%d.%d",s1,s2,s3,s4);
inet_aton(ip_addr,&addr_inet.sin_addr);
printf("%#x",addr_inet.sin_addr.s_addr);
return 0;
}
**************************************************
P8. 转换IP地址(Ⅲ)
系统给我们提供了第二种转换IP地址的方式,除了inet_addr()以外还提供了inet_aton(),inet_ntoa()两种方法:
inet_aton()//字符串转整型
inet_ntoa()//整型转字符串
请调用inet_ntoa()对整型数据进行转换
**************************************************
P9. 服务器端函数调用流程
服务器端要启动一个回声服务端,会使用一整套的函数,最终能够接受并显示出来。把图中1-5的函数名打印出来
#include <stdio.h>
int main() {
printf("socket()\n");
printf("bind()\n");
printf("listen()\n");
printf("accept()\n");
printf("close()\n");
return 0;
}
**************************************************
P10. 客户端函数调用流程
类似于服务端调用流程,在TCP协议中客户端也有自己的一套调用流程,请打印出1-3的具体函数名
#include <stdio.h>
int main() {
printf("socket()\n");
printf("connect()\n");
printf("close()\n");
return 0;
}
三次握手
print("SYN")
print("SYN+ACK")
print("ACK")
//Python
三次握手报文(java)
public class Main {
public static void main(String[] args) {
System.out.println("SYN");
System.out.println("SYN+ACK");
System.out.println("ACK");
}
}
三次握手报文(C\C++)
#include<stdio.h>
int main(){
printf("SYN\n");
printf("SYN+ACK\n");
printf("ACK\n");
return 0;
}