网络常见问题合集

  • 7层/5层/4层网络

    • 网络七层有哪些:物理层,数据链路层,网络层,传输层,(会话层,表示层),应用层
    • 各层的协议:重点关注应用层、网络层、传输层。
      • 会话层,表示层:没有协议
      • 传输层:tcp,udp
      • 网络层:arp,ip
      • 应用层:http,ftp,smtp,dns
  • OSI分层 (7层):

    • 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
    • 是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机。
    • OSI 七层模型是一种框架性的设计方法 ,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,其主要的功能使就是帮助不同类型的主机实现数据传输。
  • TCP/IP分层(4层):

    • 网络接口层、 网际层、运输层、 应用层。
    • 主要针对协议。
  • 五层协议 (5层):

    • 物理层、数据链路层、网络层、运输层、 应用层。
    • 综合了7层和4层的优缺点进行折中的分层方式,同时为了方便学习计算机网络原理而采用的。
  • 每一层的协议如下

    • 物理层: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
  • 7层网络结构的每一层的作用如下:

    • 物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
    • 数据链路层:将比特组装成帧和点到点的传递(帧Frame)
    • 网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
    • 传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
    • 会话层:建立、管理和终止会话(会话协议数据单元SPDU)
    • 表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
    • 应用层:允许访问OSI环境的手段(应用协议数据单元APDU)
  • tcp三次握手和四次挥手 & 为什么需要这么多次

    • tcp, udp:传输层
    • 三次握手-服务器易受SYN洪泛攻击:
      • 服务器端的资源是第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的。
    • 三次握手:建立连接。
      • 原因:为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。网络故障时,如果没有三次握手就建立连接容易导致错误。
    • 四次挥手:终止连接。
      • 原因:TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当 Client 发出FIN报文段时,只是表示 Client 已经没有数据要发送了,Client 告诉 Server,它的数据已经全部发送完毕了;但是,这个时候 Client 还是可以接受来自 Server 的数据;当 Server 返回ACK报文段时,表示它已经知道 Client 没有数据发送了,但是 Server 还是可以发送数据到 Client 的;当 Server 也发送了FIN报文段时,这个时候就表示 Server 也没有数据要发送了,就会告诉 Client ,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。如果要正确的理解四次分手的原理,就需要了解四次分手过程中的状态变化。
  • tcp和udp

    • TCP提供面向连接的、可靠的数据流传输,UDP提供的是非面向连接的、不可靠的数据流传输。
      • tcp:提供可靠交付的服务(无差错,不丢失,不重复,且按序到达)(校验和、重传控制、序号标识、滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。)。
      • udp:尽最大努力交付(不保证可靠交付)。
    • TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
      • TCP面向字节流,UDP面向报文。
    • TCP传送数据之前建立连接,传送结束后释放连接,UDP传送数据之前不建立连接,收到后不给出任何确认。
    • TCP适用于大文件,UDP适用于小文件。
    • 每一条TCP连接只能是点对点的(一对一),UDP支持一对一、一对多、多对一和多对多的交互通信。
      • TCP提供全双工通信,UDP无拥塞控制。
    • TCP注重数据安全性,传输慢;UDP数据传输快,但是其安全性却一般。
    • TCP对应的协议和UDP对应的协议不同。
      • TCP:HTTP,ftp,smtp(邮件传送协议),pop3
      • UDP:DNS(域名解析),SNMP(简单网络管理协议),TFTP(简单文件传输协议)
    • 丢包:
      • 采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大。
      • UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。
  • 视频面试用的是TCP还是UDP

    • udp:没有拥塞控制,强调实时性。
    • UDP 没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。
    • 这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。
  • 应用层协议

    • 域名系统DNS:(输入网址显示网站主页,非连接,可能收不到)UDP连接,端口53
    • 文件传输协议FTP:(交作业系统,保证作业已提交)TCP连接,端口21
      • 注:简单文件传输协议TFTP:(发送一条聊天“在吗?”,不必保证必须收到)UDP连接,用于传送小文件。
    • 简单邮件传送协议SMTP:(收发邮件,要保证送到)TCP连接,端口25,客户/服务器(C/S)
      • SMTP的三个阶段:建立连接 -- 邮件传送 -- 连接释放
    • 多用途网际邮件扩充MIME:
      • 针对SMTP的缺点进行优化,使得传输内容丰富多彩。
      • SMTP的缺点:传送仅限于7位ASCII码,不能传送其他国家文字,不能传送可执行文件、二进制文件,对长度有限制等。
    • 邮件协议POP3:TCP连接,端口110,客户/服务器(C/S);两种工作方式:下载并保留,下载并删除。
    • 网际报文存取协议IMAP:比POP3更复杂,可以先看首部,需要下载时再下载到用户计算机等。
    • 基于万维网的电子邮件:关联用户的部分改为HTTP,邮件服务器交互还是SMTP

  • 怎么让udp实现可靠连接

    • TCP如何实现可靠性传输? 校验,序号,确认机制、重传机制、滑动窗口。
      • 确认重传不分家
      • 重传:超时和冗余ACK
    • UDP实现可靠连接:最简单的方式是在应用层模仿传输层TCP的可靠性传输。
      • 1、添加seq/ack机制,确保数据发送到对端
      • 2、添加发送和接收缓冲区,主要是用户超时重传。
      • 3、添加超时重传机制。
  • TCP流量控制

    • tcp提供一种基于滑动窗口协议的流量控制机制。滑动窗口动态变化。
      • 接收方的接受窗口rwnd告诉发送方,自己所接受的缓存大小。
      • 发送方的拥塞窗口swnd根据当前网络的拥塞状态确定窗口值。
    • 在rwnd为0后,重新开始传递数据但rwnd数据丢失时,容易引发A、B主机相互等待的死锁局面:
      • 解决:探测报文段+持续计时器。
      • 一方收到零窗口通知时,启动持续计时器,时间到后发送探测报文段,仍是0时,重置持续计时器。
  • TCP拥塞控制和快重传

    • 拥塞控制:
      • 防止过多数据注入网络,以使网络中的路由器或链路不致过载。
      • 出现拥塞的条件:对资源需求的总和>可用资源。
    • 拥塞控制与流量控制:
      • 拥塞控制:全局性;流量控制:点对点。
    • 拥塞控制的算法:慢开始、拥塞避免,快重传,快恢复。
    • 慢开始和拥塞避免:慢开始 -- 拥塞避免算法 -- 网络拥塞的处理 -- 慢开始 -- 拥塞避免算法 -- ...
      • 慢开始:拥塞窗口cwnd从1开始,指数增大,直到慢开始门限ssthread,之后改用拥塞避免算法。
      • 拥塞避免:加法增加,乘法减小 -- 拥塞窗口每次增加1,直到一次超时即网络拥塞时,然后门限ssthread减小为当前cwnd的一半
      • 网络拥塞的处理:ssthread更新后,拥塞窗口减小为1,并重新开始慢开始阶段。
    • 快重传和快恢复:慢开始 -- 快重传 -- (跳过慢开始)快恢复 -- 拥塞避免 --
      • 快重传:使用了冗余ACK来检查丢包的发生。当发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待重传计时器超时。
      • 快恢复:当发送端收到连续三个冗余ACK(即重复确认)时,先乘法减小,把慢开始门限ssthread减小为出现拥塞时发送方cwnd的一半;然后跳过cwnd=1起始的慢开始过程,而是将cwnd的值设置为慢开始门限ssthread改变后的值,然后开始执行拥塞避免算法(加法增大)。
    • 综述:
      • 拥塞控制中,发送方发送窗口的大小 = min(接收端窗口rwnd, 拥塞窗口cwnd)
      • 慢开始、拥塞避免、快重传、快恢复是同时应用在拥塞控制机制之中的
        • 当发送方检测到超时:慢开始和拥塞避免;
        • 当发送方接受到冗余ACK时:快重传和快恢复。
  • HTTP和HTTPS

    • 小结:证书;明文暗文;连接方式;端口;连接状态等。
    • https协议需要到CA(Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。
    • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    • http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
      • (无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
  • HTTP请求行、请求头、请求体

    • HTTP请求报文由3部分组成(请求行+请求头+请求体):
    • HTTP的响应报文也由三部分组成(响应行+响应头+响应体):
    • 请求HTTP报文和响应HTTP报文都拥有若干个报文头属性,它们是为协助客户端及服务端交互的一些附属信息
    • 请求头:说明浏览器、服务器和报文主体的一些信息。通常用于说明是谁或什么在发送请求、请求源于何处,或者客户端的喜好及能力。
      • 服务器可以根据请求头部给出的客户端信息,试着为客户端提供更好的响应。
      • 请求头域可能包含下列字段Accept、Accept-Charset、Accept- Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If-Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、Proxy-Authorization、Range、Referer、User-Agent。
      • 对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。
    • 响应头向客户端提供一些额外信息,比如谁在发送响应、响应者的功能,甚至与响应相关的一些特殊指令。
      • 这些头部有助于客户端处理响应,并在将来发起更好的请求。
      • 响应头域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、Warning、WWW-Authenticate。
      • 对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。
  • HTTP的请求类型和状态码

    • http请求方式有哪些:GET、POST、HEAD、PUT、PATCH、DELETE、CONNECT、OPTIONS、TRACE。
    • HTTP1.0和HTTP1.1的区别:
      • HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
      • HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
    • 重定向:常常用于自动跳转,从活动空间来看大概分两类:服务器内部跳转和服务器之间跳转。
      • 服务器会在需要指示浏览器进行重定向的时候返回这些状态码给浏览器,且大多数3XX状态码都会附上Location字段,其中的值则是服务器要求浏览器转向的URL的值。
      • 浏览器接受到重定向响应以后,会根据Location字段的值,自动的将请求转向其中的URL。
  • 常见的状态码(共33种):

    • 概述:1** 信息;2** 请求成功;3** 资源重定向;4** 客户端错误;5** 服务器错误
    • 100 继续、200 OK,请求成功,相应成功(get post中发送tcp用到)、
    • 202 已经接受请求,但未处理完成;206 服务器成功处理了部分GET请求
    • 301 永久重定向,资源(网页等)被永久转移到其它URL;303 查看其它地址,与301类似,使用GET和POST请求查看
    • 302 临时重定向,与301类似,但资源只是临时被移动,客户端应继续使用原有URL;307 临时重定向,与302类似,使用GET请求重定向。
    • 304 未修改,请求的这个资源至你上次取得后,并没有更改,你直接用你本地的缓存吧
    • 400 客户端请求的语法错误,服务器无法理解;401 用户未授权,请求要求用户的身份认证
    • 403 资源不可用,服务器理解请求客户端的请求,但是拒绝执行此请求;404 请求的资源(网页等)不存在
    • 500 内部服务器错误,501 服务器不支持请求的功能,无法完成请求,
    • 503 服务器不可用,抱歉在忙,由于超载或系统维护,服务器暂时的无法处理客户端的请求。
    • 502 网关错误 (Bad gateway)、504 网关超时 Gateway Time-out。
  • http中get和post的区别

    • 概述:
      • GET和POST是什么?HTTP协议中的两种发送请求的方法。
      • HTTP是基于TCP/IP的万维网通信协议,所以GET和POST的底层也是TCP/IP链接。
    • (1)Get方法会将提交的数据放在URL中,即以明文的方式传递参数数据; Post方法会将提交的数据放在请求体中
      • URL:以?分割URL地址和传输数据,参数间以&相连。eg:http://localhost:8080/.../Login.aspx?name=user&pwd=123456
      • 注:以此为基础,get和post产生以下区别,分别从存储和安全性两个角度考虑。
    • (2) URL和请求体导致的区别:
      • 数据量:Get方法传递的数据量较小,受URL长度限制,最大不超过2KB;Post方法传递的数据量较大,一般不受限制,大小取决于服务器的处理能力,(大多数服务器最多处理64K大小的url)
      • 可见性:get是明文传输,post的传输数据不可见;
      • 参数的数据类型限制:GET是ASCII字符,而POST没有限制。
      • 缓存:GET请求会被浏览器主动cache缓存,而POST不会,除非手动设置。
      • 历史记录:GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
      • 收藏书签:GET产生的URL地址可以被Bookmark,而POST不可以
      • 安全性和效率:Get方法安全性低,效率高;Post方法安全性高,效率低(耗时稍长)
      • 后退刷新时:GET在浏览器回退时是无害的,而POST数据会被重新提交。
    • (3) tcp数据包:
      • Get方法会产生一个TCP数据包,浏览器会把Header和Data一并发送出去,服务器响应200(OK),并回传相应的数据。
      • Post方法会产生两个TCP数据包,浏览器会先将Header发送出去,服务器响应100(Continue)后,浏览器再发送Data,服务器响应200(OK),并回传相应的数据。
  • 无效链接

    • 死链接(Dead Links)指的是无效链接,也就是那些不可到达的链接。
    • 通俗地理解是以前可以通过点击这个链接到达网站页面,后续可能由于网站迁移、改版或操作不当等原因,使得链接指向的目标页面不存在而无法访问所遗留的链接,即称为死链接。
    • 访问死链接时,一般会出现“抱歉,您所访问的页面不存在”的提示信息或者 404 状态页面。
  • 死链接 VS 错误链接

    • 错误链接是由于用户的疏忽造成(如用户不小心输错字母等)所请求的链接不存在。
    • 与死链接不同的是,错误链接是根本不存在的链接,而死链接是原本存在的页面,由于站长操作方面的原因,造成无法访问。
    • 造成错误链接的原因如下:
      • 用户将域名拼写错误。
      • 用户输错 URL 地址。
      • 用户输入 URL 时后缀多余或缺少斜杠。
      • URL 地址中出现的字母大小写不完全匹配。
  • 数据传输方式

    • 并行串行;同步异步;单工半双工全双工
  • socket编程

  • session与cookies区别,以及分别存储在什么地方

    • cookie-客户端;session-服务器端
    • Cookie和Session

      • cookie:因为HTTP请求是无状态的,它不会认识当前的用户是谁。cookie的出现就为了解决这个问题。用户第一次请求服务器时,服务器会返回一些数据(cookie)给浏览器,浏览器保存到本地,等下一次再请求服务器时就会自动带上本地的cookie数据,服务器拿到这个数据就知道该请求用户是谁了。但是cookie只能存少量数据,不同浏览器存储大小不同,但一般不超过4KB。
      • session:session和cookie的作用类似,都是为了保存用户相关的信息,但是不同的是:session是保存在服务器上的,cookie保存在本地浏览器。保存在服务器上的session数据不容易被窃取,更加安全,但弊端是占用了服务器的资源。
    • session与cookie的联系

      • Cookie和Session都是会话技术
      • session是需要借助cookie才能正常工作的,如果客户端完全禁止cookie,session将失效。
    • Cookie和Session的区别

      • 1、Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端。
      • 2、Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制
        • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
        • session是没有大小限制,和服务器的内存大小有关。
      • 3、Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击。
        • 别人可以分析存放在本地的cookie并进行cookie欺骗
        • 考虑到安全应当使用session。
      • 4、Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
        • 考虑到减轻服务器性能压力方面,应当使用cookie。
      • 5、session中保存的是对象,cookie中保存的是字符串。
  • CDN

  • APR协议

    • ARP协议 (在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。)
      • 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
      • 地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。
      • ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。
    • 其他
      • ARP分层的位置是TCP/IP的网络层
      • ARP报文是由以太网帧进行封装传输的,没有封装进IP包
      • 实际上,对网络接口层的以太网帧来讲,它们同样是帧的上层协议,当收到以太帧时,根据帧的协议字段判断是送到ARP还是IP
      • 之所以不把它放在数据链路层,是因为它并不具备数据链路层的功能,它的作用是为数据链路层提供接收方的帧地址
    • RARP协议
      • 反向地址转换协议(RARP:Reverse Address Resolution Protocol)RARP允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。网络管理员在局域网网关路由器里创建一个表以映射物理地址(MAC)和与其对应的 IP 地址。当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器,此机器就会存储起来以便日后使用。
  • 注:另一个版本的ARP协议概述

    • 由于在实际网络的链路上传送数据帧时,最终必须使用MAC地址。
    • ARP协议:完成主机或路由器的IP地址到MAC地址的映射,即解决吓一跳走哪的问题。
    • ARP协议的使用过程:
      • 检查ARP高速缓存,有对应表项则写入MAC帧,没有则用目的MAC地址为FF-FF-FF-FF-FF-FF(全1)的帧封装并广播ARP请求分组,同一局域网中所有主机都能收到该请求。目的主机收到请求后就会向源主机单播一个ARP相应分组,源主机收到后将此映射写入ARP缓存(10-20min更新一次)
    • ARP协议的4中典型情况:
      • 主机A发给本网络上的主机B:用ARP找到主机B的硬件地址;
      • 主机A发给另一网络上的主机B:用ARP找到本网络上一个路由器(网关)的硬件地址;
      • 路由器发给本网络的主机A:用ARP找到主机A的硬件地址;
      • 路由器发给另一网络的主机B:用ARP找到本网络上的一个路由器的硬件地址。
  • 浏览器中输入一个URL后,按下回车后发生了什么

    • 浏览器输入域名发生了什么?(Web页面请求过程)
      • DNS域名解析得到IP地址;浏览器与服务器简历TCP连接;发送HTTP请求报文;服务器响应;收到响应,html代码;(释放连接);渲染页面;
    • 浏览器会从主机的Hosts文件中查看是否有该域名和IP地址的映射;
    • 如果Hosts文件没有,浏览器会查看自己的缓存;
    • 当上面两个方法都行不通时,只能去请求DNS服务器来获取IP地址;
    • 获取到IP地址后,建立TCP连接、三次握手;
    • 确认连接后发送一个HTTP请求报文;
    • 服务器处理请求,并对请求做出响应;
    • 浏览器收到服务器响应,得到html代码;
    • 渲染页面。(浏览器根据响应报文来解析CSS样式、JS交互等等)
  • APP链接点进后加载一段时间后仍无内容,分析可能的情况

    • 网络信号差
    • DNS解析慢
    • 建立链接慢
      • 当我们获取到服务器IP后,客户端和服务器建立连接,这个链接的速度与质量取决于线路的优劣。最常见的问题就是跨线路访问,地理位置相差很远的访问,中继网络异常等。排查方法:如果ping一个网址,存在大量丢包或者很高延迟(国内ping延迟超过50ms),就会导致访问的连接线路异常。
    • 服务器响应慢
      • 当一个服务器健康运行,这个时间几乎可忽略,但是如果服务器不那么健康,比如CPU,内存,磁盘,带宽,只要一个达到瓶颈的服务器就是亚健康,将直接影响访问速度。排查方法:如果此前访问很快的网站访问突然变慢了,在网络无问题的情况下,云主机可查看内部资源使用情况;虚拟主机则可通过执行简单命令或直接访问图片来判断服务器资源占用情况。
    • 本身问题,加载速度慢
      • 加载时间慢可以说是最明显、最大程度影响访问速度的因素了。当用户访问一个网站时候,服务器会向客户端发送大量的内容,这会占用大量的服务器带宽。带宽就是最常见也是最直接影响打开的因素。
  • DNS域名解析

  • HTTPS抓包原理与charles抓包

    • 相比HTTP的明文传输,HTTPS进行了加密
    • 非对称加密算法(公钥和私钥)交换对称密钥+数字证书验证身份(验证公钥是否是伪造的)+利用对称密钥加解密后续传输的数据=安全

END

posted @ 2022-04-19 21:14  hanease  阅读(304)  评论(0编辑  收藏  举报