网络编程面试笔试题

一、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);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

选择大型语言模型自定义技术

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑器的3D应用场景 企业需要自定义模型来根据其特定用例和领域知识定制语言处理功能。自定义LLM使企业能够在特定的行业或组织环境中更高效&#xff0c;更准确地生成和理解文本。 自定义模型使企业能够创建符合其品牌…

“之江数据安全治理论坛”暨《浙江省汽车数据处理活动规定(专家建议稿)》研讨会顺利召开

研讨会主题 8月10日&#xff0c;“之江数据安全治理论坛”暨《浙江省汽车数据处理活动规定&#xff08;专家建议稿&#xff09;》研讨会在浙江大学计算机创新技术研究院举办。 本次研讨会的主题聚焦于“智能网联汽车的数据安全与数据合规”&#xff0c;邀请行业主管部门和数据…

近 2000 台 Citrix NetScaler 服务器遭到破坏

Bleeping Computer 网站披露在某次大规模网络攻击活动中&#xff0c;一名攻击者利用被追踪为 CVE-2023-3519 的高危远程代码执行漏洞&#xff0c;入侵了近 2000 台 Citrix NetScaler 服务器。 研究人员表示在管理员安装漏洞补丁之前已经有 1200 多台服务器被设置了后门&#x…

Fork/Join框架

是什么 Fork/Join框架是Java 7提供的一个用于并行执行任务的框架&#xff0c;是一个把大任务分割成若干个小任务&#xff0c;最终汇总每个小任务结果后得到大任务结果的框架。 Fork: 把一个大任务切分为若干子任务并行的执行 Join: 合并这些子任务的执行结果&#xff0c;最后…

版本控制工具Git集成IDEA的学习笔记(第一篇Gitee)

目录 一、Gitee的使用 1、注册网站会员 2、用户中心 3、创建远程仓库 4、配置SSH免密登录 二、集成IDEA&#xff0c;Git项目搭建 1、本地仓库搭建 1&#xff09;创建一个新项目 2&#xff09;打开终端&#xff0c;在当前目录新建一个Git代码库 3&#xff09;忽略文件 …

Linux命令200例:tail用来显示文件的末尾内容(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

通过Git使用GitHub

目录 一、建立个人仓库 二、配置SSH密钥 三、克隆仓库代码 四、推送代码到个人仓库 五、代码拉取 一、建立个人仓库 1.建立GitHub个人仓库&#xff0c;首先注册GitHub用户。注册好了之后&#xff0c;打开用户的界面 然后就是配置问题 配置好后拉到最下方点击create repos…

【C++入门到精通】C++入门 —— 容器适配器、stack和queue(STL)

阅读导航 前言stack1. stack概念2. stack特点3. stack使用 queue1. queue概念2. queue特点3. queue使用 容器适配器1. 什么是适配器2. STL标准库中stack和queue的底层结构3. STL标准库中对于stack和queue的模拟实现⭕stack的模拟实现⭕stack的模拟实现 总结温馨提示 前言 文章…

鲁棒优化入门(5)—Matlab+Yalmip求解鲁棒优化编程实战

之前的博客&#xff1a;鲁棒优化入门&#xff08;二&#xff09;——基于matlabyalmip求解鲁棒优化问题 去年发布了使用Yalmip工具箱求解鲁棒优化问题的博客之后&#xff0c;陆陆续续有朋友问我相关的问题&#xff0c;有人形容从学习这篇博客到求解论文中的鲁棒优化问题&#x…

(二)结构型模式:4、组合模式(Composite Pattern)(C++实例)

目录 1、组合模式&#xff08;Composite Pattern&#xff09;含义 2、组合模式应用场景 3、组合模式的优缺点 4、组合模式的UML图学习 5、C实现组合模式的简单示例&#xff08;公司的OA系统&#xff09; 1、组合模式&#xff08;Composite Pattern&#xff09;含义 组合模…

【C语言学习】二维数组

二维数组 int[3][5];//通常理解为a是一个3行5列的矩阵二维数组的遍历 for(i0; i<3; i){for(j0; j<5; j){a[i][j] i*j;} }

Vivado使用入门之三:I/O约束

一、导图概览 二、I/O约束 2.1 I/O约束的内容 I/O约束主要是对port的位置和电气特性进行设置&#xff0c;进入菜单栏Window的IO Ports&#xff0c;可以查看可约束的相关内容。 一些port的常用特性解释如下 Name: port的名称 Direction:port的输入输出类型&#xff0c;有三种…

DNNGP、DeepGS 和 DLGWAS模型构成对比

一、DNNGP DNNGP 是基于深度卷积神经网络&#xff0c;这个结构包括一个输入层&#xff0c;三个卷积层&#xff0c;一个批标准化层&#xff0c;两个dropout层&#xff0c;一个平坦化层&#xff0c;一个 dense层。 dropout层&#xff1a;在神经网络中,dropout层是一个非常有效的正…

[JavaWeb]【一】入门JavaWeb开发总概及HTML、CSS、JavaScript

目录 一 特色 二 收获​编辑 三 什么是web? 四 网站的工作流程 五 web网站的开发模式​编辑 六 web开发课程学习安排 七、初始web前端 八 HTML、CSS 8.1 什么是HTNL\CSS(w3cschool) 8.2 HTML快速入门 8.3 VS Code开发工具 8.3.1 插件 8.3.2 主题&#xff08;改变颜色&…

破解难题:如何应对项目中的‘老油条’障碍

引言 在项目管理的实践中&#xff0c;我们经常遇到各种各样的人员挑战。其中&#xff0c;有一种特殊的挑战被称为“老油条”现象。这些“老油条”通常在表面上表现得非常配合&#xff0c;但在实际工作中却常常没有任何进展。这种情况不仅会影响项目的进度&#xff0c;还可能对…

Kestrel和ISS服务器下的配置

一、Kestrel服务器 Kestrel是ASP.NET Core框架中的一个跨平台的Web服务器。它是ASP.NET Core应用程序默认的HTTP服务器&#xff0c;并且可作为独立的Web服务器来托管ASP.NET Core应用程序。 Kestrel具有以下特点和功能 1、跨平台 Kestrel是完全跨平台的&#xff0c;可以在Wind…

Git如何上传文件到github

Git下载网址&#xff1a; https://git-scm.com/downloads 1. 新建一个空文件夹&#xff0c;用来上传文件&#xff0c;第一次需创建&#xff0c;以后无需创建 2. 点进去空文件夹&#xff0c;鼠标右键&#xff0c;使用Git Bash Here 打开 3. 克隆远程仓库&#xff1a;git cl…

nginx反向代理、负载均衡

修改nginx.conf的配置 upstream nginx_boot{# 30s内检查心跳发送两次包&#xff0c;未回复就代表该机器宕机&#xff0c;请求分发权重比为1:2server 192.168.87.143 weight100 max_fails2 fail_timeout30s; server 192.168.87.1 weight200 max_fails2 fail_timeout30s;# 这里的…

WPF显示初始界面--SplashScreen

WPF显示初始界面–SplashScreen 前言 WPF应用程序的运行速度快&#xff0c;但并不能在瞬间启动。当第一次启动应用程序时&#xff0c;会有一些延迟&#xff0c;因为公共语言运行时&#xff08;CLR&#xff09;首先需要初始化.NET环境&#xff0c;然后启动应用程序。 对于WPF中…

OpenAI Function calling

开篇 原文出处 最近 OpenAI 在 6 月 13 号发布了新 feature&#xff0c;主要针对模型进行了优化&#xff0c;提供了 function calling 的功能&#xff0c;该 feature 对于很多集成 OpenAI 的应用来说绝对是一个“神器”。 Prompt 的演进 如果初看 OpenAI 官网对function ca…