简介:本资源是一份面向IT初学者与计算机专业入门者的系统性练习题集,聚焦计算机基础知识与网络基础核心考点,适用于高校课程复习、软考初级备考及技术岗笔试准备。文件为单页PDF文档(353KB),内容结构清晰,涵盖计算机特点与分类、冯·诺依曼体系、四代计算机发展脉络、CAI/CAM/CAD等应用术语、二进制/八进制/十进制/十六进制转换、存储单位换算、ASCII码与汉字编码、指令系统等高频知识点,全部以标准单选题形式呈现,并附带题干解析逻辑支撑。题目设计紧扣教学大纲,如数制转换(75→1001011)、存储容量计算(1KB=8×1024bit)、ENIAC诞生年份、巨型机定义等均来自典型考点,便于自测巩固与查漏补缺。目前已有53人学习下载,适合作为课堂补充训练材料或自学检验工具。
1. 这份 PDF 不是“刷题资料”,而是你排查网络连通性、理解 TCP 三次握手、定位进程端口冲突时,翻得最勤的那张纸
很多人拿到《计算机基础知识和网络基础知识练习题.pdf》第一反应是:“又一份考试复习题?”——错了。它真正高频出现的场景,是在你凌晨两点排查一个死活不通的 Docker 容器端口时,突然想起“SYN_SENT 状态到底意味着哪一端没回包”,于是猛翻 PDF 第 47 页的 TCP 状态机图;是在你反复curl -v失败后,重新默写 OSI 七层模型里传输层和网络层的职责边界;是在你给新同事讲“为什么localhost能通但127.0.0.1有时不通”时,直接打开 PDF 第 12 页的“环回地址与 hosts 文件解析优先级对比表”。它不是为应试编的,而是为故障现场即时调用设计的知识锚点:每道题背后都对应一个真实运维动作(如netstat -tuln | grep :8080)、一个必查日志位置(如/var/log/syslog中 kernel 的iptables DROP记录)、或一个不可绕过的协议细节(如 ARP 请求广播域限制)。适合刚转岗的 DevOps 工程师、正在啃《TCP/IP 详解》却卡在 SYN-ACK 重传逻辑的后端开发者,以及需要给非科班产品讲清“DNS 解析失败 ≠ 网络断了”的技术布道者。别把它当习题集,要当你的本地化网络排错速查手册。
2. 把 PDF 里的抽象概念,变成终端里可验证、可打断、可修改的实时状态
PDF 上写的“TCP 连接建立需三次握手”,如果只停留在文字层面,遇到Connection refused就只能干瞪眼。我们必须让它在 Linux 终端里“活”起来——不是模拟,是真实复现每个报文、每个状态、每个超时阈值。下面这三步,是我带新人时强制要求手敲的最小闭环:从抓包到状态观察,再到参数干预。
2.1 用nc+tcpdump实时捕获三次握手全过程(不依赖任何服务)
很多教程教你在服务器跑python3 -m http.server 8000再用浏览器访问,但这样你看到的是应用层 HTTP,不是纯 TCP。我们要剥离 HTTP,直击内核:
# 终端1:监听本机 8888 端口,且不响应任何数据(只建连接) nc -l -p 8888 -k < /dev/null > /dev/null & # 终端2:用 tcpdump 抓取本机所有进出的 TCP 包(过滤端口 8888) sudo tcpdump -i any -nn -s 0 'tcp port 8888' -w handshake.pcap # 终端3:发起连接(注意:不发送任何数据,只建链) nc -zv 127.0.0.1 8888关键逻辑说明:
nc -l -p 8888 -k < /dev/null启动监听但立即关闭 stdin,因此收到 SYN 后会发 SYN-ACK,但不会发 ACK(因为没数据要确认);nc -zv是“扫描模式”,只发 SYN 并等待 SYN-ACK,不发后续 ACK。这样你就能在handshake.pcap里清晰看到:Client 发 SYN → Server 回 SYN-ACK → Client 不发 ACK(连接卡在 ESTABLISHED?不,是 SYN_RECV!)。用 Wireshark 打开 pcap,过滤tcp.flags.syn == 1 and tcp.flags.ack == 0,立刻定位第一个 SYN 包——这才是 PDF 第 33 题“客户端发出的第一个 TCP 报文段中哪个标志位被置位?”的答案来源。
2.2 用ss替代netstat查看连接状态,并关联到进程 PID
PDF 里常考“LISTEN、ESTABLISHED、TIME_WAIT 分别代表什么”,但光背定义没用。必须看到真实进程:
# 查看所有监听 8888 端口的 socket 及其所属进程 ss -tulnp | grep ':8888' # 输出示例: # tcp LISTEN 0 128 *:8888 *:* users:(("nc",pid=12345,fd=3))参数深挖:
-t(TCP)、-u(UDP)、-l(仅显示监听态)、-n(不解析域名/服务名,避免 DNS 查询干扰)、-p(显示进程信息,需 root 权限)。特别注意users:(...)里的fd=3——这是文件描述符号,对应/proc/12345/fd/3,你可以ls -l /proc/12345/fd/3看到它实际指向哪个 socket。PDF 第 51 题“如何确定某个端口被哪个进程占用?”的答案就藏在这里:ss -tulnp是唯一能同时输出端口、状态、PID、FD 的命令,lsof -i :8888在容器环境常失效(因命名空间隔离),而netstat已被标记为 deprecated。
2.3 修改内核参数,让 TIME_WAIT 状态“显形”并可控
PDF 第 62 题问“大量 TIME_WAIT 状态会带来什么影响?如何优化?”,标准答案是“占用端口、内存,可通过net.ipv4.tcp_tw_reuse缓解”。但没人告诉你:默认情况下,你根本看不到 TIME_WAIT!
# 先制造一个 TIME_WAIT:快速建连再断开 for i in {1..5}; do nc -zv 127.0.0.1 8888; done # 默认 ss 不显示 TIME_WAIT(被过滤了) ss -tan | grep ':8888' # 空输出 # 加上 -o 参数显示定时器,-a 显示所有状态(包括非监听) ss -tano | grep ':8888' # 输出示例: # tcp CLOSE_WAIT 0 0 127.0.0.1:52342 127.0.0.1:8888 timer:(timewait,34sec,0) # 永久启用 TIME_WAIT 复用(需 root) echo 'net.ipv4.tcp_tw_reuse = 1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p参数真相:
tcp_tw_reuse并非“允许复用 TIME_WAIT 端口”,而是“当新连接的四元组(源IP+源端口+目标IP+目标端口)与某个 TIME_WAIT 连接完全相同时,且该 TIME_WAIT 已存在超过tcp_fin_timeout(默认 60 秒)的一半(即 30 秒),才允许复用”。PDF 里写的“开启即可解决端口耗尽”是严重误导——必须配合net.ipv4.tcp_fin_timeout = 30(缩短 TIME_WAIT 持续时间)和net.ipv4.ip_local_port_range = "1024 65535"(扩大可用端口范围)才能生效。我见过太多人只开tw_reuse,结果在高并发短连接场景下依然爆Address already in use。
3. DNS 解析失败 ≠ 网络不通:用 PDF 第 28 题拆解 resolver 的五层决策链
PDF 第 28 题:“当ping www.example.com失败时,可能的原因有哪些?”标准答案列了 7 条,但实际排错时,90% 的人卡在第一步:你根本不知道系统到底用了哪个 DNS 服务器、查了哪些文件、走了哪条路径。这份 PDF 的价值,在于它把getaddrinfo()的调用链具象成了可逐层验证的命令流。
3.1 从/etc/nsswitch.conf开始:resolver 的宪法级配置
Linux 解析域名不是直接找/etc/resolv.conf,而是先读nsswitch.conf决定“去哪里查”:
# 查看域名解析的优先级策略 cat /etc/nsswitch.conf | grep '^hosts:' # 典型输出:hosts: files dns myhostname逐层含义:
files→ 先查/etc/hosts(静态映射,最快,常被忽略)dns→ 再查/etc/resolv.conf里的 nameserver(真正的 DNS 查询)myhostname→ 最后查本机 hostname(仅对 localhost 有效)PDF 第 28 题的“原因1:/etc/hosts 中有错误条目”之所以排第一,是因为它不发任何网络包。验证方法:
getent hosts www.example.com——这个命令严格按nsswitch.conf执行,比nslookup更真实。如果getent能返回 IP 而ping不能,说明问题出在ping的 ICMP 路由或防火墙,而非 DNS。
3.2 用dig +trace看清 DNS 查询的每一跳,替代nslookup
nslookup只显示最终结果,而dig +trace展开整个递归过程:
# 从根域名服务器开始,逐级向下查询 dig +trace www.example.com A # 关键输出节选: # ;; Received 282 bytes from 192.112.36.4 (g.root-servers.net) in 12 ms: # . 518400 IN NS a.root-servers.net. # ... # ;; Received 173 bytes from 192.5.5.241 (e.gtld-servers.net) in 21 ms: # example.com. 1728 IN NS a.iana-servers.net. # ... # ;; Received 112 bytes from 192.0.47.137 (a.iana-servers.net) in 33 ms: # www.example.com. 300 IN A 93.184.216.34PDF 关联点:第 28 题“原因3:本地 DNS 服务器配置错误”——这里的“本地 DNS 服务器”指
resolv.conf里的nameserver,但dig +trace第一行就告诉你:它根本没走那个 nameserver!它直接从根服务器查起。所以dig @8.8.8.8 +trace和dig +trace结果不同,前者强制用 Google DNS 递归,后者用系统默认 resolver(通常是127.0.0.53的 systemd-resolved)。要验证resolv.conf是否生效,必须用dig @$(grep nameserver /etc/resolv.conf | head -1 | awk '{print $2}') www.example.com。
3.3systemd-resolved的双 resolver 陷阱:resolv.conf可能是假文件
Ubuntu 18.04+ 默认启用systemd-resolved,它会让/etc/resolv.conf变成软链接:
ls -l /etc/resolv.conf # 输出:/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf # 真实配置在: cat /run/systemd/resolve/stub-resolv.conf # 供本机应用使用(127.0.0.53) cat /run/systemd/resolve/resolv.conf # 供容器/Docker 使用(真正的上游 DNS) # 查看 resolved 的当前状态 systemd-resolve --status # 关键字段: # Global: 127.0.0.53 # Link 2 (eth0): 192.168.1.1 # 这才是 DHCP 给的真实 DNS血泪经验:PDF 第 28 题“原因5:DNS 服务器本身不可达”,很多人
ping 8.8.8.8通就认为 DNS 没问题,但systemd-resolved可能正把请求转发给127.0.0.53,而127.0.0.53自己又去192.168.1.1查——中间任一环节断,dig就超时。验证方法:dig @127.0.0.53 www.example.com(测 stub) vsdig @192.168.1.1 www.example.com(测真实 upstream)。我曾为一个resolv.conf里写着127.0.0.53却死活解析不了的故障,花 3 小时才发现systemd-resolved的DNSSEC验证失败导致全盘拒绝响应——关掉DNSSEC=off立刻恢复。
4. 避坑:PDF 里没写的 5 个真实翻车现场,每个都让我重启过服务器
这些坑不会出现在 PDF 的标准答案里,但它们真实存在于你的journalctl -u docker日志、dmesg输出、或strace跟踪中。以下是我在生产环境踩过的、且 100% 会重现的 5 个典型问题:
4.1 现象:ping通 IP 但curl域名超时,nslookup却正常
原因:curl默认走getaddrinfo()(受nsswitch.conf控制),而nslookup直连resolv.conf的 nameserver,绕过了files和myhostname。更隐蔽的是:某些发行版(如 CentOS 7)的glibc对getaddrinfo()的AI_ADDRCONFIG标志处理异常,当 IPv6 地址存在但网络不通时,会静默丢弃所有 IPv4 结果。
解决:curl -4 https://www.example.com强制 IPv4;或临时注释/etc/gai.conf中precedence ::ffff:0:0/96 100行。
4.2 现象:ss -tuln显示端口监听,但telnet localhost 8080拒绝连接
原因:监听套接字绑定的是:::8080(IPv6 ANY),但localhost解析为127.0.0.1(IPv4),而 IPv6 ANY 默认不兼容 IPv4(除非开启net.ipv6.bindv6only = 0)。ss -tuln的*列显示*:8080时,实际可能是:::8080。
解决:ss -tuln | grep ':8080'看Local Address:Port列,若为:::8080,则用telnet ::1 8080测试;或改应用绑定0.0.0.0:8080。
4.3 现象:Docker 容器内ping宿主机 IP 通,但curl http://host.docker.internal404
原因:host.docker.internal是 Docker Desktop for Mac/Windows 的特有 DNS 名,Linux 上默认不存在。即使你手动加--add-host=host.docker.internal:host-gateway,curl仍可能因 HTTP Host 头未匹配而被 Nginx/Apache 拒绝(因host.docker.internal不在server_name列表中)。
解决:容器内用宿主机真实 IP(如172.17.0.1);或在宿主机 Nginx 配置中添加server_name host.docker.internal;。
4.4 现象:tcpdump抓不到某端口的包,但ss显示连接存在
原因:tcpdump默认抓any接口,但容器网络、VLAN、或iptables的raw表可能将流量重定向到其他接口(如docker0或cni0)。更常见的是:tcpdump -i any在多网卡机器上会漏包,必须指定具体接口(-i eth0)。
解决:先ip route get 192.168.1.100确认流量出口网卡,再tcpdump -i $(ip route get 192.168.1.100 | awk '{print $5}') port 8080。
4.5 现象:修改/etc/resolv.conf后dig立刻生效,但curl仍用旧 DNS
原因:curl(及多数 glibc 应用)会缓存resolv.conf的 inode 和 mtime,只有当文件被touch或重建时才重读。直接echo "nameserver 8.8.8.8" > /etc/resolv.conf不触发重载。
解决:sudo systemctl restart systemd-resolved(若启用);或sudo touch /etc/resolv.conf强制 glibc 重读;终极方案:sudo chattr +i /etc/resolv.conf锁死文件,逼应用走systemd-resolved。
5. 把 PDF 变成你的“故障响应 SOP”:用 3 个 Bash 函数封装高频诊断链
PDF 的价值不在题目本身,而在它帮你建立了条件反射式的诊断路径。我把最常复现的 3 个场景(端口不通、DNS 失败、连接重置)封装成 3 个函数,放在~/.bashrc里,遇到问题直接输入函数名,自动执行完整链路并高亮关键结论:
5.1diag-port PORT:一键诊断端口连通性全链路
diag-port() { local port=$1 echo "=== 端口诊断:$port ===" # 1. 查本机监听状态 echo -e "\n1. 本机监听状态:" ss -tuln | grep ":$port" || echo " 无监听进程" # 2. 测试本地连接 echo -e "\n2. 本地连接测试:" if nc -zv 127.0.0.1 $port 2>&1 | grep -q "succeeded"; then echo " ✅ 127.0.0.1:$port 可达" else echo " ❌ 127.0.0.1:$port 拒绝连接(检查监听地址是否为 0.0.0.0)" fi # 3. 检查防火墙 echo -e "\n3. 防火墙状态:" if command -v ufw >/dev/null; then sudo ufw status verbose | grep "$port" elif command -v iptables >/dev/null; then sudo iptables -L INPUT -n | grep ":$port" fi # 4. 路由追踪(若非本地) if [[ $port != "22" && $port != "80" && $port != "443" ]]; then echo -e "\n4. 外部可达性(需替换为真实IP):" echo " 使用:curl -v http://<SERVER_IP>:$port" fi }使用示例:
diag-port 8080
输出亮点:自动区分“监听但拒绝”(ss 有记录,nc 失败)和“根本没监听”(ss 无记录),并提示0.0.0.0vs127.0.0.1绑定差异——这正是 PDF 第 38 题“为何服务绑定 127.0.0.1 时外部无法访问?”的实操答案。
5.2diag-dns DOMAIN:DNS 解析五层验证自动化
diag-dns() { local domain=$1 echo "=== DNS 诊断:$domain ===" # 1. /etc/hosts 检查 echo -e "\n1. /etc/hosts 静态解析:" getent hosts $domain || echo " 未在 /etc/hosts 中定义" # 2. nsswitch.conf 策略 echo -e "\n2. NSS 解析策略:" grep '^hosts:' /etc/nsswitch.conf # 3. systemd-resolved 状态 echo -e "\n3. systemd-resolved 状态:" if systemctl is-active --quiet systemd-resolved; then systemd-resolve --status | grep -A5 "DNS Servers" else echo " systemd-resolved 未运行,直接读 /etc/resolv.conf" cat /etc/resolv.conf 2>/dev/null || echo " /etc/resolv.conf 不存在" fi # 4. 逐级 dig 验证 echo -e "\n4. DNS 逐级查询:" dig +short $domain A | head -1 || echo " A 记录未解析" dig @8.8.8.8 +short $domain A | head -1 || echo " Google DNS 也无法解析" }使用示例:
diag-dns google.com
输出亮点:强制执行getent hosts(验证nsswitch.conf的files层),并对比systemd-resolved和8.8.8.8的结果——如果前者失败后者成功,问题一定出在resolved的配置或上游 DNS,而非网络本身。这比 PDF 第 28 题的“列出可能原因”更进一步:它直接告诉你哪一层断了。
5.3diag-tcp IP PORT:TCP 连接状态深度快照
diag-tcp() { local ip=$1 local port=$2 echo "=== TCP 连接诊断:$ip:$port ===" # 1. 建连测试(带详细错误) echo -e "\n1. 连接测试:" timeout 5 bash -c "echo > /dev/tcp/$ip/$port 2>&1" 2>/dev/null || \ echo " ❌ 连接失败:$(timeout 5 bash -c "echo > /dev/tcp/$ip/$port 2>&1" 2>&1)" # 2. 当前连接状态 echo -e "\n2. 本机连接状态:" ss -tn sport = :$port | head -5 ss -tn dport = :$port | head -5 # 3. 路由与 MTU echo -e "\n3. 路由与 MTU:" ip route get $ip ping -c1 -M do $ip 2>&1 | grep "mtu" }使用示例:
diag-tcp 192.168.1.100 3306
输出亮点:echo > /dev/tcp/$ip/$port利用 Bash 内置 TCP 重定向,比nc更轻量且错误信息更明确(如Connection refusedvsNo route to host);ss -tn sport/dport分离源/目的端口,精准定位是客户端还是服务端问题——这正是 PDF 第 42 题“如何判断连接失败发生在哪一端?”的终极答案。
我坚持把这份 PDF 打印出来,夹在键盘下方的笔记本里,不是为了背题,而是每次curl失败时,手指会本能地翻到第 33 页看 TCP 状态图,翻到第 28 页对照 DNS 排查清单,翻到第 51 页确认ss命令参数。它早已不是一份练习题,而是我肌肉记忆的一部分——当Connection reset by peer出现时,我不再慌乱strace,而是先ss -tni看retrans计数,再cat /proc/sys/net/ipv4/tcp_retries2查重传上限,最后翻 PDF 第 45 题确认tcp_retries2=15意味着最多重试 15 次(约 13~30 分钟)。这些动作已经刻进我的手指,就像呼吸一样自然。希望帮到你。
本文还有配套的精品资源,点击获取