计算机网络面试题总结

来源:互联网 发布:环境科学与工程知乎 编辑:程序博客网 时间:2024/04/29 00:36

OSI,TCP/IP,五层协议的体系结构,以及各层协议

OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。

五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。

每一层的协议如下:

物理层: RJ45、CLOCK、IEEE802.3 (中继器,集线器,网关)

数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)

网络层: IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)

传输层: TCP、UDP、SPX

会话层: NFS、SQL、NETBIOS、RPC

表示层: JPEG、MPEG、ASII

应用层: FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS

每一层作用:

物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)

数据链路层:将比特组装成帧和点到点的传递(帧Frame)

网络层:负责数据包从源到目的地的传递和网际互连(包PackeT)

传输层:提供端到端的可靠报文传递和错误检查(段Segment)

会话层:建立、管理和终止会话(会话协议数据单元SPDU)

表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)

应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

网络层

只提供简单灵活的,无连接的,尽最大努力交付(不可靠交付)的数据报服务。发送时候不需要先建立连接。

(这层不提供服务质量保证,因计算机是智能的,让差错处理,流量控制交给传输层处理)

IP地址的分类

  • A类地址

    以0开头, 第一个字节范围:0~127(1.0.0.0 - 126.255.255.255);

    私有地址:10.0.0.0 ~ 10.255.255.255

  • B类地址

    以10开头, 第一个字节范围:128~191(128.0.0.0 - 191.255.255.255);

    私有地址:172.16.0.0—172.31.255.255

  • C类地址

    以110开头, 第一个字节范围:192~223(192.0.0.0 - 223.255.255.255);

    私有地址: 192.168.0.0—192.168.255.255

IP地址与子网掩码相与得到主机号

子网划分-主机数

一个网络号192.168.5.0/24,子网掩码是255.255.255.248,可以构建的最大子网数和每个子网最多可容纳多少台机器?

  题目给出的IP地址空间基于CIDR划分,前24位是网络号,后8位是主机号。子网掩码最后是 248(1111 1000)。

相当于主机号又被分成两部分, 前5位是子网号, 后3位是主机号,所以,最大子网个数是 2^5, 主机个数为 2^3. 另外,主机号全 0 代表本地主机, 全 1 表示广播,所以每个子网最多容纳8 - 2 = 6台机器。

ARP

地址解析协议:IP->物理地址

APP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址。

  1. 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
  2. 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。
  3. 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
  4. 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

广播发送ARP请求,单播发送ARP响应。

RARP

逆地址解析协议,物理地址->IP

ICMP

网际控制报文协议 ICMP(差错报告报文 询问报文)

差错:重点不可达源点抑制 时间超过 参数问题 改变路由

询问:回送请求或回答 时间戳请求或回答 如ping 没有用tcp/udp

三次握手,四次挥手

http://blog.csdn.net/lis_12/article/details/54934272

TCP的滑动窗口,流量控制和拥塞控制

TCP协议作为一个可靠的,面向字节流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由拥塞窗口结合一系列的控制算法实现。

  • 滑动窗口协议

    1. “窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”;

    2. “滑动”则是指这段“允许发送的范围”是可以随着发送的过程而变化的,方式就是按顺序“滑动”。

  • 流量控制

    接收方传递信息给发送方,使其不要发送数据太快,是一种端到端的控制。

    主要方式就是返回的报文中会包含接收窗口大小,利用窗口大小来控制发送方的数据发送大小。

    发送方的发送窗口应该小于等于拥塞窗口

  • 拥塞控制

    拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。

    常用控制方法:慢开始、拥塞控制、快重传、快恢复

  • 超时重传

    TCP协议保证数据可靠性的重要机制,在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。

TCP(TCP报文段)

面向连接的运输层协议

一对一(点对点)

可靠交付

全双工通信

面向字节流

UDP(UDP用户数据报)

(报头包括: 源端口号 目的端口号数据报长度 检验和)

无连接

支持 一对一、多对一、一对多的交互通信

尽最大努力交付(即不可靠交付 主机不需要维持复杂的链接状态)

面向数据报

没有拥塞控制

首部开销小(仅有八个字节)

TCP和UDP的区别

  1. TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。
  2. TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
  3. TCP注重数据安全性,UDP数据传输快。

面向和非面向连接

面向连接的服务:通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道,在通信过程中,整个连接的情况一直可以被实时地监控和管理。

非面向连接的服务:不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控。

TCP和UDP对应的协议

TCP对应的协议:

  1. FTP: 端口 = 21, 定义了文件传输协议;
  2. SSH: 端口 = 22, 专为远程登录会话和其他网络服务提供安全性的协议;
  3. Telnet: 端口 = 23, 一种用于远程登陆的协议,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
  4. SMTP: 端口 = 25, 邮件传送协议,用于发送邮件;
  5. POP3: 端口 = 110,和SMTP对应,POP3用于接收邮件;
  6. HTTP: 端口 = 80, 是从Web服务器传输超文本到本地浏览器的传送协议;
  7. HTTPS: 端口 = 443,HTTP的加密版本;

UDP对应的协议:

  1. DNS: 端口 = 53, 用于域名解析服务,将域名地址转换为IP地址;
  2. SNMP: 端口 = 161,简单网络管理协议,用来管理网络设备。由于网络设备很多,无连接的服务就体现出其优势。
  3. TFTP: 端口 = 21, 简单文件传输协议;

DNS,域名解析

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。

点击www.baidu.com

简易版:

  1. 浏览器分析页面指向的URL

  2. 向DNS请求解析出www.baidu.com的IP地址

  3. 域名系统DNS解析出www.baidu.com的IP地址

  4. 建立TCP连接(http本身是无连接,无状态)

  5. 浏览器发出相应的命令

  6. 服务器给出响应,将结果发给浏览器

  7. 释放TCP连接

HTTP状态码

1xx 表示请求已被接受,需要继续处理

2xx 表示成功

3xx 表示重定向 如请求还需要进一步操作,301 永久,302临时

4xx 表示客户端出现错误,403禁止,404未找到

5xx 表示服务器端出现错误

Get与Post区别

操作方式 数据位置 明文密文 数据安全 长度限制 应用场景 GET HTTP包头 明文 不安全 长度较小 查询数据 POST HTTP正文 可明可密 安全 支持较大数据传输 修改数据

socket编程流程

  • server

    1. 通过 socket() 函数向系统申请一个套接字
    2. 调用 bind() 函数定义一个侦听端口号
    3. 调用 listen() 函数侦听请求
    4. 组织循环,处理收到的每一个请求
    5. 用 accept() 函数建立交换数据的通道
    6. 用 read() 函数读取请求报文
    7. 根据请求报文进行处理,生成响应报文
    8. 调用 write() 函数返回响应报文
    9. 调用 close() 函数关掉套接字
  • client

    1. 通过 socket() 函数向系统申请一个套接字
    2. 调用 connect() 函数与server建立连接
    3. 调用 write() 函数发出请求报文
    4. 调用 read() 函数读取响应报文
    5. 调用 close() 函数关掉套接字

转载请注明作者及原文地址(http://blog.csdn.net/lis_12/article/details/55003623)

如果觉得本文对您有帮助,请点击‘顶’支持一下,您的支持是我写作最大的动力,谢谢。

0 0