Fork me on GitHub

IT面试整理(1)——网络

网络体系结构


  • OSI五层模型
    • 应用层
    • 传输层
    • 网络层
    • 数据链路层
    • 物理层
  • OSI七层模型
    • 应用层: 文件传输,电子邮件,文件服务,虚拟终端
      • (协议族: FTP,HTTP,SMTP,DNS,Telnet,SNMP)
    • 表示层: 数据格式化,代码转换,数据加密。对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
    • 会话层: 解除或建立与别的节点的联系。管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
    • 传输层: 提供端到端的接口。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层处理端到端的差错控制和流量控制问题。
      • (协议族: TCP, UDP)
    • 网络层: 为数据包选择路由。还可以实现拥塞控制、网际互连等功能
      • (协议族: IP, ICMP, RIP, OSPF, BGP, IGMP)
    • 数据链路层: 传输有地址的帧以及错误检测功能。在不可靠的物理介质上提供可靠的传输,该层的作用包括:物理地址寻址、数据的成帧、流量控制、 数据的检错、重发等
      • (协议族: SLIP, CSLIP, PPP, ARP, RARP, MTU)
    • 物理层: 以二进制数据形式在物理媒介上传输数据。激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性
      • (协议族: ISO2110, IEEE802, IEEE802.2)

        地址解析协议


  • 原理: 适用于局域网,主机在发送帧前将目标IP地址转换成目标MAC地址的过程
  • 工作过程
    • (1) 当主机A向本局域网上主机B发送IP数据报时,先在自己的ARP缓冲表中查看有无主机B的IP地址;
    • (2) 如果有,查出对应的硬件地址,并将此硬件地址写入MAC帧,然后通过以太网将数据包发送到目的主机中
    • (3) 如果查不到主机B的IP地址的表项,高速缓存表可能是空的。主机A就自动运行ARP协议
      • ARP进程在本局域网上广播一个ARP请求分组。ARP请求分组的主要内容表明:我的IP地址是192.168.0.2,我的硬件地址是00-C0-15-AD-18,我想知道IP地址为192.168.0.4的主机的硬件地址
      • 本局域网上的所有主机上运行的AR进程都接收此ARP请求分组
      • 主机B在ARP请求分组中见到自己的IP地址,就向主机A发送ARP响应分组,并写入自己的硬件地址
      • 主机A收到主机B的ARP响应分组后,在其ARP高速缓存中写入主机B的IP地址硬件地址的映射

路由选择协议


  • RIP协议
    • 底层是Bellmanford算法,其选择路由的度量标准是跳数,最大跳数是15跳,如果大于15跳,则丢弃数据包
  • OSPF协议
    • 底层是Dijskra算法,是链状状态路由选择协议,其选择路由的度量标准是带宽、延迟

NAT协议、DHCP议、DNS协议


  • NAT协议
    • 网络地址转换协议: 一种将私有地址转换成合法IP地址的转换技术,完美解决了IP地址不足的问题,还能有效避免来自网络外部的攻击
  • DHCP协议
    • 动态主机配置协议: 一种局域网的网络协议,使用UDP协议工作,主要用途:
      • (1) 给内部网络或者网络供应商自动分配IP地址
      • (2) 给用户或者内部网络管理员作为对所有计算机作中央管理的手段
  • DNS协议
    • 将域名和IP地址相互映射的一个分布式数据库

实现可靠传输的协议


  • (1) 停止等待协议
    • 每发完一帧就停止发送,直到收到接收确认信号再发送下一帧,如果没有收到接收确认信号,则通过设定的定时器 超时后重传上一帧,通过序号判断之前的帧是否被接收
  • (2) 连续ARQ协议
    • 发送窗口大于1,接收窗口等于1。如果发送窗口已经发送到了序号为5的帧,但是接收端收到序号为3的帧出错,那么3以后的帧都需重传。为了避免后面的帧重传,可以使用缓存
  • (3) 选择重传协议

TCP拥塞控制


【参考】

  • 定义: 防止过多的数据注入网络中,可以使网络中的路由器或链路不至于过载。拥塞控制是一个全局性的过程,和流量控制不同,流量控制是指点对点通信量的控制
  • 方法:
    • (1) 慢开始与拥塞避免
      • 慢开始: 先探测网络的拥塞程度,从小到大逐渐增加拥塞窗口的大小
      • 拥塞避免: 让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1
    • (2) 快重传与快恢复
    • (3) 随机早起检测RED

网络设备及其相关层


  • 网关: 网络层以上的设备
  • 网络层: 路由器
  • 数据链路层: 网桥、交换机
  • 物理层: 中继器、集线器

HTTPS


【参考】

  • 在HTTP和TCP协议之间建立一层TLS/SSL协议

HTTP头


【参考】

  • 报文格式
    • 报文首部
    • 空行
    • 报文主体
  • 请求报文首部

    • 请求行(GET /index.html/ HTTP/1.1)
    • 请求首部字段
      • 请求信息性首部字段
        • From: 请求来自何方,格式是客户端用户的有效电子邮件地址
        • Host: 服务器的主机名和端口号
        • Referer: 这次请求的URL是从哪里获得的
        • User-Agent: 客户端的浏览器或代理信息
      • Accept首部字段
        • Accept: 客户端通过该首部字段告诉服务器自己可以接收哪些媒体类型,如text/html。此外,还有可以权重系数(q值)来表示媒体类型的优先级。
        • Accept-Charset: 客户端可以接收哪些字符集,也可以有q值
        • Accept-Encoding: 客户端支持的内容编码及内容编码的优先级顺序。
        • Accept-Language: 客户端能够处理的自然语言集(中文、英文等)
        • TE: 客户端能够处理的传输编码,还可以指定伴随trailer字段的分块传输编码方式
      • 条件请求首部字段
        • Expect: 客户端通过该首部字段告知服务器它们需求某种行为,现在该首部与响应码100 Continue紧密相关。如果服务器无法理解该首部的值,就应该返回417 Expectation Failed
        • If-Match: 服务器会比对该字段的值和资源的ETag值,仅当两者一致时,才会执行请求,否则,返回412 Precondition Failed。该字段值为*时,会忽略ETag值
        • If-Modified-Since: 该字段值应该是一个日期,如果服务器上资源的更新时间较该字段值新则处理该请求,否则,返回304 Not Modified
        • If-None-Match: 与If-Match相反,该字段的值与请求资源的ETag不一致时,处理该请求
        • If-Range: 该字段的值(ETag或时间)与资源的ETag或时间一致时,作为范围请求处理(参加首部字段Range)。否则,返回全体资源
        • If-Unmodified-Since: 与If-Modified-Since相反,服务器上资源的更新时间早于该字段值时处理请求,否则,返回412 Precondition Failed
        • Range: 范围请求,只获取部分资源。如Range: bytes=5001-10000,表示获取从第5001字节至10000字节的资源。成功处理范围请求时返回206 Partial Content响应,无法处理范围请求时返回200 OK响应及全部资源
      • 安全请求首部字段
        • Authorization: 向服务器回应自己的身份验证信息。客户端收到来自服务器的401 Authentication Required响应后,要在其请求中包含这个首部
        • Cookie: HTTP/1.1中没有定义,用于客户端识别和跟踪的扩展首部
      • 代理请求首部字段
        • Max-Forwards: 只能和TRACE方法一起使用,指定经过代理或其他中间节点的最大数目。每个收到带此首部的TRACE请求的应用程序,在请求转发之前都要将这个值减1;如果应用程序收到请求时,该首部值为0,则立即回应一条200 OK响应
      • Proxy-Authorization: 与Authorization类似,用于客户端与代理服务器之间的身份验证
    • 通用首部字段
    • 实体首部字段
    • 其他
  • 响应报文首部

    • 状态行(HTTP/1.1 200 OK)
    • 响应首部字段
      • 响应信息性首部字段
        - Age: 响应已经产生了多长时间。HTTP/1.1规定缓存服务器在创建响应时必须包含Age首部
        
        • Location: 客户端应重定向到指定URI,基本配合响应出现
        • Retry-After: 告诉客户端多久之后再次发送请求。主要配合503 Service Unavailable使用,或与3**响应一起使用
        • Server: HTTP服务器的应用程序信息
        • Warning:
      • 协商首部字段
        • Accept-Ranges: 服务器是否能处理范围请求,bytes表示能,none表示不能
        • Vary:
      • 安全响应首部字段
        • Proxy-Authorizate: 与WWW-Authenticate类似,用于代理与客户端之间的认证,407 Proxy Authentication Required响应必须包含该首部
        • Set-Cookie: 非HTTP/1.1标准首部
        • WWW-Authenticate: 告诉客户端访问所请求资源的认证方案,401 Unauthorized响应中肯定有该首
    • 通用首部字段
      • 通用信息性首部字段
        • Connection: 两个作用
          1. 控制不再转发给代理的首部字段
          2. 管理持久连接
        • Date: 创建HTTP报文的时间和日期
        • Trailer: 说明在报文主体后记录了哪些首部字段
        • Transfer-Encoding: 传输报文主体时采用的编码方式
        • Upgrade: 用于检测HTTP协议及其他协议是否可使用更高的版本进行通信
        • Via: 追踪客户端与服务器之前的请求和响应报文的传输路径
      • 通用缓存首部字段
        • Cache-Control: 管理缓存信息,是HTTP/1.1引入的一个复杂首部
        • Pragma: HTTP/1.1以前的遗留字段Pargma: no-cache与Cache-Control: no-cache功能一致,只用在客户端发送请求时
    • 实体首部字段
      • 实体信息性首部字段
        • Allow: 通知客户端可以对特定资源使用那些HTTP方法。405 Method Not Allowed响应中必须包含该首部
      • 内容首部字段
        • Content-Encoding: 告诉客户端实体的主体部分选用的内容编码方式。具体方式参见Accept-Encoding
        • Content-Language: 告诉客户端实体主体使用的自然语言(中文、英文等)
        • Content-Length: 表明实体主体部分的大小(单位:字节)。对实体主体进行内容编码传输时,不能再使用该首部字段
        • Content-Location: 报文主体部分相对应的URI
        • Content-MD5: 一串由MD5算法生成的值。对于检查在传输过程中数据是否被无意的修改非常有用,但不能用于安全目的,因为报文如果被有意的修改,该字段的值也可以计算后作相应修改
        • Content-Range: 针对范围请求,提供了请求实体在原始实体内的位置(范围),还给出了整个实体的长度
        • Content-Type: 响应报文中对象的媒体类型
      • 实体缓存首部字段
        • ETag: 实体标记,就是一种标识资源的方式
        • Expires: 资源失效日期,当Cache-Control有指定max-age指令时,会优先处理max-age
        • Last-Modified: 资源最终修改时间
    • 其他

HTTP请求方法


  • GET: 最常见,向服务器请求某个资源
  • POST: 起初用于向服务器输入数据。实际上,通常用于HTML表单数据的提交
  • HEAD: 与GET的行为类似,但服务器返回的响应中只包含首部,不会返回主体部分
  • PUT: 向服务器写入文档
  • DELETE: 删除指定资源
  • TRACE: 服务器回送收到的请求信息给客户端,主要用于诊断
  • ONNECT
  • OPTIONS: 查询服务器支持的方法(通用或针对指定资源)

HTTP状态码


  • 100 Continue: 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
  • 200 OK: 正常返回信息
  • 201 Created: 请求成功并且服务器创建了新的资源
  • 202 Accepted: 服务器已接受请求,但尚未处理
  • 301 Moved Permanently: 请求的网页已永久移动到新位置。
  • 302 Found: 临时性重定向。
  • 303 See Other: 临时性重定向,且总是使用 GET 请求新的 URI。
  • 304 Not Modified: 自从上次请求后,请求的网页未修改过。
  • 400 Bad Request: 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
  • 401 Unauthorized: 请求未授权。
  • 403 Forbidden: 禁止访问。
  • 404 Not Found: 找不到如何与 URI 相匹配的资源。
  • 500 Internal Server Error: 最常见的服务器端错误。
  • 503 Service Unavailable: 服务器端暂时无法处理请求(可能是过载或维护)。

域名劫持


  • 原理: 通过攻击域名解析服务器或者伪造域名解析服务器的方法,把目标网站域名解析到错误的地址。

Content-Type


  • 含义: 用于指定请求和响应的HTTP内容类型。如果未指定,默认为text/html
  • 格式: [type]/[subtype];parameter
    • type
      • text: 用于标准化地表示文本信息,文本消息可以是多种字符集或多种格式的
      • multipart: 用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据
      • application: 用于传输应用程序数据或二进制数据
      • message: 用于包装一个email消息
      • image: 用于传输静态图片数据
      • audio: 用于传输音频数据
      • video: 用于传输动态影像数据,可以是与音频编辑在一起的视频格式的数据 q
      • subtype
      • patameter
  • 常见值
    • text/html
    • text/plain
    • text/css
    • text/javascript
    • application/x-www-form-urlencoded: 常用的表单发包方式,POST发包方式
    • multipart/form-data: 发送文件的POST包
    • application/json
    • application/xml

Etag


cache-control


  • private: 默认值。内容只缓存到私有缓存中(仅客户端可以换成,代理服务器不可缓存)
  • public: 所用内容都可以被缓存(客户端和代理服务器都可缓存)
    cache会发起往返通信来验证缓存的响应,如果资源未被更改,可以避免下载
  • no-store: 所有内容都不会被缓存到缓存或Internet临时文件中
  • max-age: 缓存的内容将在xxx秒后失效
  • must-revalidate/proxy-revalidation: 如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证

三次握手、四次挥手


  • 三次握手
    1. Client端发送连接请求报文
    2. Server端接收连接请求,并回复ACK报文,并为此次连接分配资源
    3. Client端接收ACK报文,向Server端发送ACK报文,并分配资源
  • 四次挥手
    1. Client端发送中断请求,即FIN报文
    2. Server端收到FIN报文,发送ACK报文,并继续发送数据
    3. Client端收到ACK报文,进入FIN_WAIT状态
    4. Server端数据发送完毕,发送FIN报文
    5. Client端收到FIN报文,发送ACK报文,等待2MSL

IP地址


  • 特殊的IP地址
    • 网络地址
      • IP地址由网络号和主机号组成,网络地址的主机号为全0,网络地址代表整个网络
    • 广播地址(直接广播地址)
      • IP地址主机号全为1。当向某个网络的广播地址发送消息时,该网络内的所有主机都能收到该广播消息
      • 既可本地广播,也可跨网段广播
    • 组播地址
      • D类即主播地址
    • 255.255.255.255(受限广播地址)
      • 受限广播地址,只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组
    • 0.0.0.0
      • 表示整个网络。它的作用是帮助路由器发送路由表中无法查询的包。如果设置了全零网络的路由,路由表中无法查询的包都将送到全零网络的路由中去。
    • 回环地址
      • 表示本机地址
    • A、B、C类私有地址
      • A类私有地址: 10.0.0.0/8, 范围: 10.0.0.0~10.255.255.255
      • B类私有地址: 172.16.0.0/12, 范围: 172.16.0.0~172.31.255.255
      • C类私有地址: 182.168.0.0/16, 范围: 192.168.0.0~192.168.255.255
  • IP地址分类
    • A类地址: 0开头,8位网络号
    • B类地址: 10开头,16位网络号
    • C类地址: 110开头,24位网络号
    • D类地址: 1110开头,用于多播
    • E类地址: 1111开头

子网


  • 原理: 从二级IP地址到三级IP地址
    • 二级IP地址: <网络号><主机号>,默认子网掩码为网络号的长度
    • 三级IP地址: <网络号><子网号><主机号>,默认子网掩码为网络号+子网号的长度

超网


  • 原理: 变长子网掩码,无分类编址CIDR
  • IP地址: <网络前缀><主机号>
  • 特点:

TCP、UDP


【参考】

  • 报文格式
    • 共有字段:
      • 源端口和目的端口号
      • 数据长度
      • 校验和
      • 数据域
    • TCP特有字段
      • 序列号和确认号
      • 接收窗口
      • TCP首部
      • 标识字段
  • 区别
    • TCP
      • 面向连接的协议,提供可靠的数据传输
      • 当数据接收方收到数据发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在收到确认消息之后才会继续发送其他信息;
      • 报文最大长度允许超过512字节
    • UDP
      • 用户数据报协议,一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务
      • 报文最大长度为512字节

TCP对应的协议和UDP对应的协议


  • TCP
    • FTP: 定义了文件传输协议,使用21端口
    • Telnet: 一种用于远程登录的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DO S模式下的通信服务,使用23端口
    • SMTP: 定义了简单邮件传送协议,使用25端口
    • POP3: 和SMTP对应,POP3用于接收邮件,使用110端口
    • HTTP: 从web服务器传输超文本到本地浏览器的传送协议
  • UDP
    • DNS: 用于域名解析服务,将域名地址转换为IP地址,使用53端口
    • SNMP: 简单网络管理协议,用来管理网络设备,使用161端口
    • TFTP: 简单文件传输协议,使用69端口

Socket


  • 套接字
    • 是支持TCP/IP协议的网络通信的基本操作单元,是网络通信过程中端点的抽象表示,包含进行
    • 套接字 = 连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口

HTTP2.0


  • 特性
    • 入服务器端推: 允许服务器端在客户端需要数据之前就主动地将数据发送到客户端缓存
    • 提供更多加密技术
    • 使用多路技术,允许多个消息在一个连接上同时交叉
    • 增加了头压缩,即使非常小的请求,其请求和响应的header都只会占用很小比例的带宽
欣赏此文?求鼓励,求支持!