网络编程知识整理

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 三次握手

 

  1. 第一次握手 - 客户端向服务器发送连接请求:

    • 客户端向服务器发送一个SYN(同步)标志位的TCP数据包。
    • 客户端选择一个初始的序列号,并设置SYN标志位为1,表明它要发起一个连接。
  2. 第二次握手 - 服务器回复客户端的请求:

    • 服务器接收到客户端的SYN数据包后,如果同意建立连接,则将确认ACK标志位和SYN标志位都设置为1。服务器还会选择自己的初始序列号,并将它放入数据包的序列号字段中。
    • 服务器同时也会将确认序列号设置为客户端的初始序列号加1,表示已经收到了客户端的请求,并准备好建立连接。
  3. 第三次握手 - 客户端确认服务器的回复:

    • 客户端收到服务器的ACK和SYN数据包后,会确认收到,并向服务器发送一个ACK(确认)标志位的数据包。
    • 客户端将确认序列号设置为服务器的初始序列号加1,表示连接已经建立。

4.TCP UDP 区别


UDP 不可靠 面向无连接 速度快 
TCP 可靠  面向连接    慢 

相同点:

  1. 都是用于在计算机网络中传输数据的传输层协议。
  2. 都使用IP协议作为底层网络传输协议。
  3. 都在通信的两端使用端口号来标识应用程序。

 不同点:

  1. TCP可靠,UDP不可靠
  2. TCP是面向连接的协议,提供流控制和拥塞控制功能 ,UDP无连接因此没有流控制和拥塞功能,数据传输无序且不可靠
  3. 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协议

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值