1.OSI/ISO 7层
应用层
表示层
会话层 用户层
——————————————————————
传输层 内核
网络层
数据链路层
物理层
2.udp通信服务器端实现流程
socket:创建服务器套接字,使用socket()函数创建一个UDP服务器套接字
bind :将服务器套接字绑定到一个特定的IP地址和端口号上,使客户端可以定位服务器
recvfrom:使用recvfrom()函数接受客户端数据包,并使用sendto()函数将相应数据包发给客户端
close():关闭套接字使服务器不在监听和响应客户请求,释放资源。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8080 //定义端口号8080
#define BUFFER_SIZE 1024 //数据大小
int main() {
int server_socket; //用于接收套接字
struct sockaddr_in server_addr, client_addr; //
char buffer[BUFFER_SIZE];
// 创建服务器套接字
server_socket = socket(AF_INET, SOCK_DGRAM, 0); //IPV4 ,UDP ,自动寻找协议号
if (server_socket == -1) { //容错判断,
perror("Failed to create socket");
exit(EXIT_FAILURE);
}
// 设置服务器地址和端口
server_addr.sin_family = AF_INET; //协议族为IPV4
server_addr.sin_addr.s_addr = INADDR_ANY; //自动识别本机ID地址
server_addr.sin_port = htons(PORT); //设置端口号8080
// 绑定套接字到服务器地址和端口
if (bind(server_socket, (struct sockaddr*)&server_addr,\
sizeof(server_addr)) == -1) //如果在绑定服务器本机IP地址时发生错误
{
perror("Failed to bind");
exit(EXIT_FAILURE);
}
printf("Server started. Listening on port %d...\n", PORT);
while (1) {
// 接收数据
socklen_t client_len = sizeof(client_addr);
ssize_t recv_len = recvfrom(server_socket, buffer, BUFFER_SIZE, 0,
(struct sockaddr*)&client_addr, &client_len);
if (recv_len == -1) {
perror("Failed to receive");
continue;
}
// 处理接收到的数据
printf("Received message from client: %s\n", buffer);
// 发送响应数据
ssize_t send_len = sendto(server_socket, "Hello from server!",\
strlen("Hello from server!"), 0,
(struct sockaddr*)&client_addr, client_len);
if (send_len == -1) {
perror("Failed to send");
continue;
}
}
// 关闭服务器套接字
close(server_socket);
return 0;
}
3.TCP 三次握手
-
第一次握手 - 客户端向服务器发送连接请求:
- 客户端向服务器发送一个SYN(同步)标志位的TCP数据包。
- 客户端选择一个初始的序列号,并设置SYN标志位为1,表明它要发起一个连接。
-
第二次握手 - 服务器回复客户端的请求:
- 服务器接收到客户端的SYN数据包后,如果同意建立连接,则将确认ACK标志位和SYN标志位都设置为1。服务器还会选择自己的初始序列号,并将它放入数据包的序列号字段中。
- 服务器同时也会将确认序列号设置为客户端的初始序列号加1,表示已经收到了客户端的请求,并准备好建立连接。
-
第三次握手 - 客户端确认服务器的回复:
- 客户端收到服务器的ACK和SYN数据包后,会确认收到,并向服务器发送一个ACK(确认)标志位的数据包。
- 客户端将确认序列号设置为服务器的初始序列号加1,表示连接已经建立。
4.TCP UDP 区别
UDP 不可靠 面向无连接 速度快
TCP 可靠 面向连接 慢
相同点:
- 都是用于在计算机网络中传输数据的传输层协议。
- 都使用IP协议作为底层网络传输协议。
- 都在通信的两端使用端口号来标识应用程序。
不同点:
- TCP可靠,UDP不可靠
- TCP是面向连接的协议,提供流控制和拥塞控制功能 ,UDP无连接因此没有流控制和拥塞功能,数据传输无序且不可靠
- TCP的速度和效率相对较低,UDP相对较高
5.请写出创建一个tcp服务器的流程(文字描述和程序描述都可以)
socket :创建socket对象
bind :将socket绑定到具体IP地址和端口号,便于监听客户端和连接请求
listen :监听连接请求,服务器将进入阻塞状态等待客户端连接
accept :接受连接,客户端发起请求,服务器会为每个客户端创建一个新的socket
read/write :双端进行传输工作
close :关闭连接
6. 请完成下列sql语句
student_info表有以下字段 name(varchar) number(varchar) age(integer) score(integer)
查找 名字是”小李”的基本信息
select *from student_info where name='小李'
统计 所有学生的成绩和
select sum(score) from student_info
插入一条记录:name :”小李” number: “1001” age: 25 score: 95
insert into student_info values('小李','1001',25,95)
删除年龄小于25的学生
delete from student_info where age<25
选择题
1.下面哪个协议用于通过域名得到IP地址 (B )
[A] DHCP (用于网络设备分配IP地址) [B] DNS (用于域名查找和转换)
[C] TCP (IP网络上进行数据传输) [D] UDP (IP网络传输)
2.[单选题]在OSI七层结构模型中,处于数据链路层与运输层之间的是( B )。
A: 物理层
B: 网络层
C: 会话层
D: 表示层
3. [单选题]OSI 模型的第二层是( C )
A: 网络层
B: 传输层
C: 数据链路层
D: 应用层
4. [单选题]以下叙述不正确的是( D )
A: Internet运输层协议有TCP和UDP
B: TCP协议要完成流量控制
C: UDP协议提供的是不可靠传输
D: UDP协议与TCP协议都支持可靠的字节流传输(TCP是字节流传输,UDP是数据报流)
5.[单选题]
为了使一个网络中的计算机能够直接通信,每台计算机中的哪一个方面必须相同。( D )
A: 网卡
B: 操作系统
C: 硬盘
D: 网络协议
6.以下哪个协议用于动态分配ip地址 (D)
[A] IGMP (用于多播通信) [B] IP (网络层协议用于数据报传输)
[C] ICMP (用于在IP网络用传递控制信息) [D] DHCP (动态分配IP地址)
7.ping 命令的作用是(A )
[A] 查看对方主机是否在线
[B] 动态分配ip地址
[C] 获取某个域名的ip地址
[D] 查看某个计算机的mac地址
8.能实现互联网的关键协议是(IP),基于此的连接协议( TCP )和无连接协议( UDP ),超文本传输协议是( HTTP ),邮件协议( SMTP )
[A] IP、TCP、UDP、HTTP、SMTP
[B] ICMP、TCP、UDP、HTTP、SMTP
[C] IP、UDP、TCP、HTTP、SMTP
[D] ICMP、TCP、UDP、FTP、SMTP
9. 服务器和客户端tcp通信断开连接的流程是 ( B )
A SYN-->ACK-->FIN-->ACK
B FIN-->ACK-->FIN-->ACK
C SYN-->ACK-->SYN-->ACK
D SYN-->SYN+ACK-->ACK
10.能通过IP地址得到MAC地址的协议是 ( C )
A DHCP (用于动态分配IP地址) B DNS (用于域名解析为IP地址)
C ARP(用于解析IP地址和MAC地址) D SMTP(用于电子邮件发送)
11.在MTU=1500字节的以太网中,TCP报文的最大载荷为( B )字节
A 1500 B 1460 C 1400 D 512
在MTU(最大传输单元)为1500字节的以太网中,TCP报文的最大载荷为 [B] 1460 字节。
在TCP协议中,每个TCP报文段的负载部分受到网络层的最大传输单元(MTU)限制。以太网的MTU通常为1500字节,其中包括TCP报文头部的20个字节。因此,TCP报文段的最大负载大小为MTU减去TCP报文头部的大小。经过计算,1500 - 20 = 1480 字节。
然而,TCP协议在实现时一般会考虑到IP层的报文头部大小,通常为20个字节。因此,在实际应用中,TCP报文的最大载荷往往要减去20个字节的IP头部大小,为 1480 - 20 = 1460 字节。
所以,在MTU为1500字节的以太网中,TCP报文的最大载荷大小为1460字节。
12. 在TTL初始值是64的情况下,ping某台主机的应答ttl = 49, 那么经过的路由个数是( C )
A 49 B 64 C 15 D 79
ttl (每经过1个路由,ttl - 1)
13. 客户端连接服务器时发送( C )包,服务器收到客户端连接请求发送( D )包
A ACK B FIN C SYN D SYN+ACK
14. 关于UDP协议,以下说法正确的有( A C D )
A UDP是传输层协议
B UDP提供了可靠的传输服务
C 使用UDP可以监听8080端口
D DHCP使用了UDP协议