网络编程面试笔试题

news2024/11/26 1:24:15

一、OSI 7层模型,TCP/IP 4层模型 5层模型。 以及每一层的功能(重点:第三层 第四层)

答:

7层模型(①物理层:二进制比特流传输,②数据链路层:相邻结点的可靠传输,③网络层:寻址和路由选择,④传输层:端到端的可靠传输,⑤会话层:主机之间会话管理,⑥表示层:数据表示,加密与压缩,⑦应用层:提供各种网络应用接口)

5层模型(①物理层,②数据链路层,③网络层,④传输层,⑦应用层)

4层模型(①网络接口和物理层或网络访问层:ip地址与物理地址的映射(MAC),以及将上一次的ip报文封装成帧,转换成二进制比特流传输,③网络层,④传输层,⑦应用层)

网络接口和物理层:网络访问层

二、MAC地址:48bit全球唯一。 改变网络环境后MAC地址变不变,IP地址变不变

答:MAC不变,IP改变

2.1 ARP:通过ip地址获取对应的mac地址

2.2 RARP:通过mac地址获取对应的ip地址

2.3 MTU MSS,分别多大,有什么作用

答:MTU(最大传输单元):物理接口提供给上层最大一次传输数据的大小,规定了数据链路层所能传送最大数据长度,最大为1500bytes。MSS(最大报文长度):TCP提交给IP层最大分段大小,指TCP报文所允许传送数据部分最大长度,不包含TCP头,MSS是TCP来限制应用层最大发送字节数,若MTU=1500,则MSS最大为1460bytes

三、网络层:

  1. IP协议 : 路由器工作在哪一层:网络层
  2. ICMP :英特网控制管理协议,用于在IP主机、路由器之间传递控制消息
  3. IGMP:英特网分组管理协议,组播,广播

四、传输层:

4.1 TCP UDP

答:TCP(传输控制协议):提供面向连接的,一对一的,可靠数据传输协议。UDP(用户数据报协议):提供无连接的,不可靠的,尽力的传输协议(效率高)

4.2 TCP和UDP有什么异同点

答:相同点:是同属于传输层的协议。不同点:

TCP:

  1. TCP是面向连接的,可靠的数据传输协议
  2. TCP提供数据无误,数据无失序,数据无丢失,数据无重复到达的通信
  3. 传输效率低,耗费资源多
  4. 数据的收发是不同步的,或出现粘包的情况

UDP:

  1. UDP是面向无连接的,不可靠的,尽力的数据传输协议
  2. 数据有可能在传输过程中丢失、失序、重复
  3. 传输效率高
  4. 数据的收发是同步的,不存在粘包现象
  5. 限制每次传输的数据大小,超出部分直接删除

五、IP地址:

5.1 IP地址分类:2类

答:IPv4:采用4个字节的无符号整数,共32bit来存储IP地址。IPv6:采用16字节的无符号整数,共128bit来存储IP地址

5.2 二级IP地址划分:二级IP地址 = 网络号 + 主机号 哪几类可以分配给主机使用。

答:A类:0.0.0.0~127.255.255.255

B类:128.0.0.0~191.255.255.255

C类:192.0.0.0~223.255.255.255

D类:224.0.0.0~239.255.255.255

E类:240.0.0.0~255.255.255.255

ABC类为基本类,IP地址分配给主机使用,D类不表示网络,用于特殊用途,例如:组播。E类不表示网络,保留或者实验室使用。

5.3 网络地址和广播地址:

答:网络地址 = 有效网络号 + 全是0的主机号,例如192.168.122.92 网络地址为192.168.122.0

广播地址 = 有效网络号 + 全是1的主机号,例如192.168.122.92 广播地址为192.168.122.255

5.4 子网掩码:默认子网掩码,子网网段个数,主机号,可以用主机号,所有可用主机号。 题型详情看笔记。

答:三级IP地址划分:利用子网掩码可以将主机号再次划分,可以划分部分为2^n,IP = 网络号 + 子网号 + 主机号

子网掩码格式:子网掩码的长度与IP地址长度一样是32位无符号整数,由一串连续的1后面跟着连续的0组成

IP地址 & 子网掩码 = 子网网段

子网网段个数 = 2^(子网掩码中多加的1的个数)

每个子网网段中主机号的个数 = 2^(子网掩码剩余0的个数)

六、字节序:请简述字节序的概念,并用共用体(联合体)的方式判断本机字节数

答:字节序是指不同类型CPU主机内存存储多字节整数序列的方式,例如:short,int,long。字节序分为大端字节序与小端字节序,小端字节序:低地址存储低字节,高地址存储高字节。大端字节序:低地址存储高字节,高地址存储低字节。用共用体的方式判断本机字节序:

#include <stdio.h>
union t
{
    int  a;
    char b;
};
int main(int argc,const char argv[])
{
    union t test;
    test.a = 1;
    if(1 == test.b)
    printf("这是小端存储\n");
    else if(0 == test.b)
    printf("这是大端存储\n");
}

七、TCP

7.1 TCP流程图

7.2 send函数能否替换成其他函数

答:可以,当send中的flag == 0时,send函数可以替换成write,也可以替换成sendto,此时sendto最后两个参数分别为NULL和0

7.3 recv函数能否替换成其他函数

答:可以,当recv中的flag == 0时,recv函数可以替换成read,也可以替换成recvfrom,此时recvfrom最后两个参数为NULL

八、UDP

8.1 UDP的流程图

8.1 recvfrom函数能否替换成其他函数

答:可以,当flag == 0且最后两个参数都为NULL时,可以替换成recv,read函数

8.2 sendto函数能否替换成其他函数 ----> connect

答:可以,当flag == 0时,可以替换成send,write函数,但前提是得先调用connect函数

8.3 udp中能否调用connect函数。(与TCP的对比,优点)

答:UDP中,可以调用connect函数。

  1. TCP中的connect函数会产生三次握手,将客户端与服务器相连,UDP中的connect函数不会产生连接,它仅仅将对端的IP和端口号记录到内核套接字中,此时UDP只能与记录的对端进行通信
  2. TCP中的connect函数只能调用一次,UDP中的connect函数可以调用多次,但会刷新内核中对端的IP和端口号,如果想要清空内核中对端的地址信息,则需要将地址信息结构体中sin_family设置成AF_UNSPEC,再调用connect
  3. 当UDP采用connect函数后,sendto函数可以用send,write替换
  4. UDP调用connect函数能够提升传输效率
  5. UDP调用connect函数能够增加传输稳定性

九、广播IP和组播IP(流程)

9.1.1 广播发送方

  1. socket 创建报式套接字
  2. setsockopt 设置允许广播 level:SOL_SOCKET optname:SO_BROADCAST
  3. bind 非必须绑定
  4. 填充接收方的地址信息结构体,给sendto函数使用,IP:广播IP 与接收方绑定的一致(ps:不能填0.0.0.0)PORT:1024~49151,与接收方绑定的一致
  5. sendto 发送

9.1.2 广播接收方

  1. socket 创建报式套接字
  2. 填充接收方自身的地址信息结构体,给bind函数使用
    1. IP:绑定广播IP(192.168.123.255 或者 255.255.255.255 或者0.0.0.0)
      1. 0.0.0.0:一旦绑定到套接字上,会将本机所有可用IP地址都绑定到套接字上。例如:
        1. ifconfig出来的本机IP 192.168.122.120
        2. 本地环回IP: 127.0.0.1
        3. 广播IP
        4. 组播IP
    2. PORT:1024~49151。
  3. bind 必须绑定
  4. recvfrom 接收数据

9.2.1 组播发送方

  1. socket 创建报式套接字
  2. bind 非必须绑定
  3. 填充接收方的地址信息结构体,给sendto函数使用,IP:组播 与接收方绑定的一致(ps:不能填0.0.0.0),PORT:1024~49151,与接收方绑定的一致
  4. sendto 发送

9.2.2 组播接收方

  1. socket 创建报式套接字
  2. setsockopt 加入多播组 level:IPPROTO_IP optname:IP_ADD_MEMBERSHIP
  3. 填充接收方自身的地址信息结构体,给bind函数使用
    1. IP:绑定组播IP,与加入的组播一致(224.0.0.0 - 239.255.255.255 或者 0.0.0.0)
      1. 0.0.0.0:一旦绑定到套接字上,会将本机所有可用IP地址都绑定到套接字上。例如:
        1. ifconfig出来的本机IP 192.168.122.120
        2. 本地环回IP: 127.0.0.1
        3. 广播IP
        4. 组播IP
    2. PORT:1024~49151。
  4. bind 必须绑定
  5. recvfrom 接收数据

十、多进程并发服务器 和 多线程并发服务器模型

10.1 多进程并发服务器

void handler(int sig){
    while(waitpid(-1, NULL, WNOHANG) > 0);
}

signal(17, handler);
sfd = socket();
bind();
listen();
while(1){
    newfd = accept();
    if(fork() == 0){
        close(sfd);
        while(1){
            recv();
            send();        
        }    
        close(newfd);
        exit(0);
    }
    close(newfd);
}
close(sfd);

10.2 多线程并发服务器

sfd = socket();
bind();
listen();
while(1){
    newfd = accept();
    pthread_create(&tid, NULL, deal_cli_msg, &info);
    pthread_detach(tid);
}
close(sfd);

void* deal_cli_msg(void* arg){
    newfd = arg->newfd;
    cin = arg->cin;
    
    while(1){
        recv();
        send();    
    }
    close(newfd);
    pthread_exit();
}

十一、IO多路复用的分类?请简述其中一种的流程(原理)?

答:IO多路复用分为select、poll、epoll,select的TCP服务器模型

sfd = socket();
bind();
listen();
while(1)
{
    tempfds = readfds
    select(maxfd+1,&tempfds,NULL,NULL,NULL);
    for(int i=0;i<maxfd;i++)
    {
        if(FD_ISSET(i,&tempfds) == 0) continue;
        if(0 == i)
        {
            fgets();        
        }    
        else if(sfd == i)
        {
            newfd = accept();
            FD_SET(new,&readfds);
            maxfd = maxfd > newfd ? maxfd : newfd;        
        }
        else
        {
            res = recv();
            if(0 == res)
            {
                close(i);
                FD_CLR(i,&readfds);
                while(FD_ISSET(maxfd,&readfds) == 0 && maxfd-- > 0)
                continue;            
            }      
            send();                                       
        }
    }
}
close(sfd);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/903852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ctfshow web入门 命令执行RCE篇 web29-web77 与 web118-web124 详细题解 持续更新中

Ctfshow 命令执行 web29 pregmatch是正则匹配函数&#xff0c;匹配是否包含flag&#xff0c;if(!preg_match("/flag/i", $c))&#xff0c;/i忽略大小写 可以利用system来间接执行系统命令 flag采用f*绕过&#xff0c;或者mv fl?g.php 1.txt修改文件名&#xff0c…

Docker搭建LNMP----(超详细)

目录 ​编辑 一、项目环境 1.1 所有安装包下载&#xff1a; 1.3 服务器环境 1.4任务需求 二、Ngin 2.1、建立工作目录 2.2 编写 Dockerfile 脚本 2.3准备 nginx.conf 配置文件 2.4生成镜像 2.5创建自定义网络 2.6启动镜像容器 2.7验证 nginx、 三、Mysql 3.1建立…

生产环境下的终极指南:使用 Docker 部署 Nacos 集群和 MySQL

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

WPF入门到精通:1.新建项目及项目结构

WPF&#xff08;Windows Presentation Foundation&#xff09;是一种用于创建 Windows 应用程序的技术&#xff0c;它可以通过 XAML&#xff08;Extensible Application Markup Language&#xff09;和 C# 或其他 .NET 语言来实现。WPF 提供了许多强大的 UI 控件和样式&#xf…

OpenCV实例(九)基于深度学习的运动目标检测(二)YOLOv2概述

基于深度学习的运动目标检测&#xff08;二&#xff09;YOLOv2&YOLOv3概述 1.YOLOv2概述2.YOLOv3概述2.1 新的基础网络结构&#xff1a;2.2 采用多尺度预测机制。2.3 使用简单的逻辑回归进行分类 1.YOLOv2概述 对YOLO存在的不足&#xff0c;业界又推出了YOLOv2。YOLOv2主要…

17.HPA和rancher

文章目录 HPA部署 metrics-server部署HPA Rancher部署Rancherrancher添加集群仪表盘创建 namespace仪表盘创建 Deployments仪表盘创建 service 总结 HPA HPA&#xff08;Horizontal Pod Autoscaling&#xff09;Pod 水平自动伸缩&#xff0c;Kubernetes 有一个 HPA 的资源&…

openai多模态大模型:clip详解及实战

引言 CLIP全称Constrastive Language-Image Pre-training&#xff0c;是OpenAI推出的采用对比学习的文本-图像预训练模型。CLIP惊艳之处在于架构非常简洁且效果好到难以置信&#xff0c;在zero-shot文本-图像检索&#xff0c;zero-shot图像分类&#xff0c;文本→图像生成任务…

728. 自除数 题解

题目描述&#xff1a;728. 自除数 - 力扣&#xff08;LeetCode&#xff09; 自除数 是指可以被它包含的每一位数整除的数。 例如&#xff0c;128 是一个 自除数 &#xff0c;因为 128 % 1 0&#xff0c;128 % 2 0&#xff0c;128 % 8 0。 自除数 不允许包含 0 。 给定两个整…

VCS与Verdi联仿,简要万能工程模板,持续更新中...

VCS与Verdi联仿&#xff0c;简要工程模板&#xff0c;持续更新中… 文章目录 VCS与Verdi联仿&#xff0c;简要工程模板&#xff0c;持续更新中...背景编写工程模块使用工程模板仿真结果工程下载地址 背景 学习verilog&#xff0c;故用vcs来编译verilog&#xff0c;用verdi来查…

一篇文章了解编译类成员定义

文章目录 一篇文章了解编译类成员定义 %Dictionary.CompiledClass - 编译类定义表简介索引示例表结构 %Dictionary.CompiledConstraint - 编译约束表简介索引示例表结构 %Dictionary.CompiledConstraintMethod - 编译约束表简介索引示例表结构 %Dictionary.CompiledForeignKey …

通过docker-Compose快速搭建OwnCloud网盘

目录 docker-compose文件信息 nginx文件信息 证书生成 查看文件有哪些&#xff01;&#xff01;&#xff01; 在 .yml 文件目录运行 查看容器情况并访问网页 当然&#xff0c;以下是一个使用 MySQL 5.7、Nginx 和 ownCloud 的完整 Docker Compose 示例&#xff0c;同时启用…

《Zookeeper》源码分析(十六)之 Leader是如何运行的

目录 Leader创建Leader实例lead() Leader Leader选举结束后&#xff0c;成为leader的服务器开始进行leader的工作&#xff0c;过程如下&#xff1a; 从源码中看出&#xff0c;第一步先创建Leader实例&#xff0c;第二步调用Leader.lead()方法&#xff0c;Leader的所有工作都…

【ElasticSearch】一键安装ElasticSearch与Kibana以及解决遇到的问题

目录 一、安装ES 二、安装Kibana 三、遇到的问题 一、安装ES 按顺序复制即可 docker network create es-net # 创建网络 docker pull images:7.12.1 # 拉取镜像 mkdir -p /root/es/data # 创建数据卷 mkdir -p /root/es/plugins # 创建数据卷 chmod 777 /root/es/** # 设置权…

Ubuntu20.04搭建OpenGL环境(glfw+glad)

Ubuntu20.04搭建OpenGL环境(glfwglad) Linux环境搭建 本文在VMware安装Ubuntu20.04桌面版的环境下搭建OpenGL&#xff0c;按照本文搭建完成后可以执行LearnOpenGL网站上的demo。 关于VMware可自行到VMware Workstation Pro | CN下载 关于Ubuntu20.04桌面版可自行到官网或In…

MNIST手写数字数据集+7000张图片下载

MNIST手写数字图像数据集是一个经典的用于图像分类任务的数据集&#xff0c;其中包含了大量的手写数字图像样本 数据集点击下载&#xff1a; MNIST手写数字数据集7000张图片.rar

【MySQL】好好学习一下InnoDB中的页

文章目录 一. 前言二. 从宏观层面看页三. 页的基本内容3.1 页的数据结构3.2 用户空间内的数据行结构3.3 页目录 四. 问题集4.1 索引 和 数据页 有什么区别4.2 页的大小是什么决定的4.3 页的大小对哪些情况有影响4.4 一般情况下说的链表有哪几个4.5 如果页的空间满了怎么办4.6 如…

微服务中间件--Ribbon负载均衡

Ribbon负载均衡 a.Ribbon负载均衡原理b.Ribbon负载均衡策略 (IRule)c.Ribbon的饥饿加载 a.Ribbon负载均衡原理 1.发起请求http://userservice/user/1&#xff0c;Ribbon拦截该请求 2.Ribbon通过EurekaServer拉取userservice 3.EurekaServer返回服务列表给Ribbon做负载均衡 …

线性代数的学习和整理9(草稿-----未完成)

3.3 特征值和特征向量是什么&#xff1f; 直接说现在&#xff1a;特征向量这个块往哪个方向进行了拉伸&#xff0c;各个方向拉伸了几倍。这也让人很容易理解为什么&#xff0c;行列式的值就是特征值的乘积。 特征向量也代表了一些良好的性质&#xff0c;即这些线在线性变换后…

[LeetCode111双周赛LeetCode359周赛] DP双指针

参考灵神和闫总的讲解和代码&#xff1a; https://www.bilibili.com/video/BV1rP411s7Z5 https://space.bilibili.com/206214 7006. 销售利润最大化 https://leetcode.cn/problems/maximize-the-profit-as-the-salesman/ Solution 动态规划 哈希表 首先按照 end 的顺序分…

UGUI可视化组件Image, RawImage

一.组件Image 1.1 Image的属性 创建的Image对象自带Image组件&#xff0c;用来显示图片&#xff0c;其属性说明如下 属性&#xff1a;功能&#xff1a;Source Image表示要显示的图像的纹理&#xff08;必须作为精灵导入&#xff09;。Color要应用于图像的颜色&#xff0c;会和…