网络编程面试笔试题

一、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 = readfdsselect(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.rhkb.cn/news/98652.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

奇舞周刊第503期:图解串一串 webpack 的历史和核心功能

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 图解串一串 webpack 的历史和核心功能 提到打包工具&#xff0c;可能你会首先想到 webpack。那没有 webpack 之前&#xff0c;都是怎么打包的呢&#xff1f;webpack 都有哪些功能&…

selenium 选定ul-li下拉选项中某个指定选项

场景&#xff1a;selenium的下拉选项是ul-li模式&#xff0c;选定某个指定的选项。 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 显示等待def select_li(self, text, *ul_locator):"…

贝叶斯公式

一、贝叶斯公式 贝叶斯公式是一种用于概率推断的重要数学工具&#xff0c;它描述了在观测到新信息后如何更新关于某个事件的概率分布。贝叶斯公式的一般形式如下&#xff1a; P(A∣B)P(B∣A)⋅P(A) ​/ P(B) 其中&#xff1a; P(A∣B) 表示在给定观测到事件 B 后&#xff0c…

[RDMA] 高性能异步的消息传递和RPC :Accelio

1. Introduce Accelio是一个高性能异步的可靠消息传递和RPC库&#xff0c;能优化硬件加速。 RDMA和TCP / IP传输被实现&#xff0c;并且其他的传输也能被实现&#xff0c;如共享存储器可以利用这个高效和方便的API的优点。Accelio 是 Mellanox 公司的RDMA中间件&#xff0c;用…

分布式 | 如何搭建 DBLE 的 JVM 指标监控系统

本篇文章采用 Docker 方式搭建 Grafana Prometheus 实现对 DBLE 的 JVM 相关指标的监控系统。 作者&#xff1a;文韵涵 爱可生 DBLE 团队开发成员&#xff0c;主要负责 DBLE 需求开发&#xff0c;故障排查和社区问题解答。 本文来源&#xff1a;原创投稿 爱可生开源社区出品&a…

python中使用xml快速创建Caption和URL书签管理器应用程序

导语&#xff1a; 本文介绍如何使用wxPython库创建一个Caption和URL管理器应用程序。该应用程序具有图形用户界面&#xff0c;允许用户输入Caption和URL&#xff0c;并将其保存到XML文件中。此外&#xff0c;还提供了浏览文件夹并选择HTML文件的功能&#xff0c;并可以运行另一…

安装jenkins-cli

1、要在 Linux 操作系统上安装 jcli curl -L https://github.com/jenkins-zh/jenkins-cli/releases/latest/download/jcli-linux-amd64.tar.gz|tar xzv sudo mv jcli /usr/local/bin/ 在用户根目录下&#xff0c;增加 jcli 的配置文件&#xff1a; jcli config gen -ifalse …

回归预测 | MATLAB实现BO-SVM贝叶斯优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现BO-SVM贝叶斯优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现BO-SVM贝叶斯优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程序设计…

构建 NodeJS 影院微服务并使用 docker 部署它(02/4)

一、说明 构建一个微服务的电影网站&#xff0c;需要Docker、NodeJS、MongoDB&#xff0c;这样的案例您见过吗&#xff1f;如果对此有兴趣&#xff0c;您就继续往下看吧。 图片取自网络 — 封面由我制作 这是✌️“构建 NodeJS 影院微服务”系列的第二篇文章。 二、对第一部分的…

对象内存布局与对象头

对象内存布局 在Hotspot虚拟机里&#xff0c;对象在堆内存中的存储布局可以划分为三个部分&#xff1a;对象头、实例数据、对齐填充。 对象头 在64为系统中&#xff0c;Mark word 占了8个字节&#xff0c;cla ss Pointer 占了8个字节。从jdk1.8开始&#xff0c;存在指针压缩&am…

【学习日记】【FreeRTOS】FreeRTOS 移植到 STM32F103C8

前言 本文基于野火 FreeRTOS 教程&#xff0c;内容是关于 FreeRTOS 官方代码的移植的注意事项&#xff0c;并将野火例程中 STM32F103RC 代码移植到 STM32F103C8。 一、FreeRTOS V9.0.0 源码的获取 两个下载链接&#xff1a; 官 网 代码托管 二、源码文件夹内容简介 Source…

线程基础和CompletableFuture异步编排

目录 一、线程回顾 1、初始化线程的 4 种方式 2、线程池的七大参数 3、常见的 4 种线程池 4、开发中为什么使用线程池 二、CompletableFuture 异步编排 1、创建异步对象 2、计算完成时回调方法 3、handle 方法 4、线程串行化方法 5、两任务组合 - 都要完成 6、两任务…

tomcat中的BIO与NIO发展

tomcat中的NIO发展 前言 Tomcat目前支持BIO&#xff08;阻塞 I/O&#xff09;、NIO&#xff08;非阻塞 I/O&#xff09;、AIO&#xff08;异步非阻塞式IO&#xff0c;NIO的升级版&#xff09;、APR&#xff08;Apache可移植运行库&#xff09;模型&#xff0c;本文主要介绍NI…

财务数据分析用什么软件好?财务数据分析的几个重要数据是什么?

财务的数据分析也分很多种的&#xff0c;就拿最粗略的划分来说&#xff0c;也可以分为3大领域—— 财务数据处理类工具财务数据挖掘类工具财务数据可视化工具 01 数据处理类 在财务数据处理这一块儿&#xff0c;不用说&#xff0c;当然是以excel为主力的数据处理类工具—— …

成集云 | 电子签署集成腾讯云企业网盘 | 解决方案

源系统成集云目标系统 方案介绍 电子签署是通过电子方式完成合同、文件或其他文件的签署过程。相较于传统的纸质签署&#xff0c;电子签署具有更高效、更便捷、更安全的优势。 在电子签署过程中&#xff0c;使用电子签名技术来验证签署者的身份并确保签署文件的完整性。电子…

游戏找不到msvcr100.dll解决方法,常见的三种解决方法

在计算机领域&#xff0c;msvcr100.dll是一个非常重要的动态链接库文件。它是Microsoft Visual C 2010 Redistributable的一部分&#xff0c;用于支持Visual Studio 2010的开发环境。然而&#xff0c;在某些情况下&#xff0c;msvcr100.dll可能会出现问题&#xff0c;导致程序无…

Hadabot:从网络浏览器操作 ROS2 远程控制器

一、说明 Hadabot Hadabot是一个学习ROS2和机器人技术的机器人套件。使用 Hadabot&#xff0c;您将能够以最小的挫败感和恐吓来构建和编程物理 ROS2 机器人。Hadabot套件目前正在开发中。它将仅针对ROS2功能&#xff0c;并强调基于Web的用户界面。 随着开发的进展&a…

postgresql 数据排序

postgresql 常见操作 排序总结 排序 -- 排序的时候null是最大的值(看一下) select employee_id,manager_id from employeesorder by manager_id desc;-- nulls first使null值排在第一位 select employee_id,manager_id from employeesorder by manager_id nulls first;-- null…

【负荷频率和电压控制】电力系统的组合负荷频率和电压控制模型研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Codeforces Round 890 (Div. 2) E2. PermuTree (hard version) (主席树/树状数组/差分+前缀和)

题目 有一个初始为空的数组&#xff0c;你需要处理q(q<1e6)次操作&#xff0c;操作分四种&#xff1a; ① x&#xff0c;数组后面加一个新的数x ② - k&#xff0c;删掉数组最后面的k个值 ③ !&#xff0c;回滚最后一次变更&#xff08;只有①操作和②操作视为变更&…