飞道的博客

计算机网络相关重点问题

263人阅读  评论(0)

1 基础

1. ★★★ 各层协议的作用,以及 TCP/IP 协议的特点。

详细可见我的csdn

TCP/IP 协议:
(1)协议标准是完全开放的,并且独立于特定的计算机硬件与操作系统。
(2)独立于网络硬件系统,可以运行在广域网,更适合于互联网。
(3)网络地址统一分配,网络中每一设备和终端都具有一个唯一地址。
(4)高层协议标准化,可以提供多种多样可靠网络服务。

TCP/IP模型将网络分为四层。TCP/IP模型不关注底层物理介质,主要关注终端之间的逻辑数据流转发。
TCP/IP模型的核心是网络层和传输层:网络层解决网络之间的逻辑转发问题,传输层保证源端到目的端之间的可靠传输。

2. ★★☆ 以太网的特点,以及帧结构。

以太网中大多数的数据帧使用的是Ethernet II格式。

以太帧中还包括源和目的MAC地址,分别代表发送者的MAC和接收者的MAC,此外还有帧校验序列字段,用于检验传输过程中帧的完整性。

Ethernet_II 帧类型值大于等于1536 (0x0600)

以太网数据帧的长度在64-1518字节之间

Ethernet_II的帧中各字段说明如下:

  • DMAC(Destination MAC)是目的MAC地址。DMAC字段长度为6个字节,标识帧的接收者。
  • SMAC(Source MAC)是源MAC地址。SMAC字段长度为6个字节,标识帧的发送者。
  • 类型字段(Type)用于标识数据字段中包含的高层协议,该字段长度为2个字节。类型字段取值为0x0800的帧代表IP协议帧;类型字段取值为0806的帧代表ARP协议帧。
  • 数据字段(Data)是网络层数据,最小长度必须为46字节以保证帧长至少为64字节,数据字段的最大长度为1500字节。
  • 循环冗余校验字段(FCS)提供了一种错误检测机制。该字段长度为4个字节。

3. ★★☆ 集线器、交换机、路由器的作用,以及所属的网络层。

  • 集线器-------集线器也叫Hub,工作在物理层(最底层),没有相匹配的软件系统,是纯硬件设备。集线器主要用来连接计算机等网络终端。
    集线器为共享式带宽,连接在集线器上的任何一个设备发送数据时,其他所有设备必须等待,此设备享有全部带宽,通讯完毕,再由其他设备使用带宽。正因此,集线器连接了一个冲突域的网络。所有设备相互交替使用,就好象大家一起过一根独木桥一样。集线器不能判断数据包的目的地和类型,所以如果是广播数据包也依然转发,而且所有设备发出数据以广播方式发送到每个接口,这样集线器也连接了一个广播域的网络。
  • 交换机-------交换机Switch,工作在数据链路层(第二层),稍微高端一点的交换机都有一个操作系统来支持。和集线器一样主要用于连接计算机等网络终端设备。
    交换机比集线器更加先进,允许连接在交换机上的设备并行通讯,好比高速公路上的汽车并行行使一般,设备间通讯不会再发生冲突,因此交换机打破了冲突域,交换机每个接口是一个冲突域,不会与其他接口发生通讯冲突。并且有系统的交换机可以记录MAC地址表,发送的数据不会再以广播方式发送到每个接口,而是直接到达目的接口,节省了接口带宽。但是交换机和集线器一样不能判断广播数据包,会把广播发送到全部接口,所以交换机和集线器一样连接了一个广播域网络。
  • 路由器-------路由器Router,工作在网络层(第三层),所有的路由器都有自己的操作系统来维持,并且需要人员调试,否则不能工作。路由器没有那么多接口,主要用来进行网络与网络的连接。
    简单的说路由器把数据从一个网络发送到另一个网络,这个过程就叫路由。路由器不仅能像交换机一样隔离冲突域,而且还能检测广播数据包,并丢弃广播包来隔离广播域,有效的扩大了网络的规模。在路由器中记录着路由表,路由器以此来转发数据,以实现网络间的通讯。路由器的介入可以使交换机划分的VLAN实现互相通讯。

4. ★★☆ IP 数据数据报常见字段的作用。

IP数据包格式及首部中的各字段

5. ★☆☆ ARP 协议的作用,以及维护 ARP 缓存的过程。

ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。其作用是在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。
在Linux上如果你想设置你的ARP缓存老化时间,那么执行sysctl -w net.ipv4.neigh.ethX=Y即可,如果设置别的,只是影响了性能,在Linux中,ARP缓存老化以其变为stale状态为准,而不是以其表项被删除为准,stale状态只是对缓存又进行了缓存;

6. ★★☆ ICMP 报文种类以及作用;和 IP 数据报的关系;Ping 和 Traceroute 的具体原理。

ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。
(1)差错报告报文
类型值为3时:表示终点不可达
类型值为4时:表示源点抑制
类型值为5时:表示改变路由(Redirect)
类型值为11时:表示超时
类型值为12时:表示参数问题
(2)询问报文
类型值为8或者0时:表示回送(Echo)请求或应答
类型值为13或14时:表示时间戳(Timestamp)请求或应答

当目标主机或中间设备发现数据报文在传输中出现错误不能达到目的地址后,会触发ICMP模块,同时产生一个ICMP报文向源主机发送出错情况报告。源IP地址和目的IP地址封装在IP数据报里,所以ICMP报文要封装在IP数据报中被传输,才可向源主机发送出错误情况报告。

ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送icmp回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。
Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。
Traceroute收到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。

7. ★★★ UDP 与 TCP 比较,分析上层协议应该使用 UDP 还是 TCP。

8. ★★★ 理解三次握手以及四次挥手具体过程,三次握手的原因、四次挥手原因、TIME_WAIT 的作用。

9. ★★★ 可靠传输原理,并设计可靠 UDP 协议。

10. ★★☆ TCP 拥塞控制的作用,理解具体原理。

详细可见我的csdn
计算机网络-传输层

11. ★★☆ DNS 的端口号;TCP 还是 UDP;作为缓存、负载均衡。

DNS端口为53 UDP,是用来做DNS解析的。

2 HTTP

1. ★★★ GET 与 POST 比较:作用、参数、安全性、幂等性、可缓存。

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

  1. GET与POST都有自己的语义,不能随便混用。
  2. 在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
  3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

2. ★★☆ HTTP 状态码。

1xx - 信息提示
这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。
2xx - 成功
这类状态代码表明服务器成功地接受了客户端请求。
3xx - 重定向
客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。
4xx - 客户端错误
发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。
5xx - 服务器错误
服务器由于遇到错误而不能完成该请求。

3. ★★★ Cookie 作用、安全性问题、和 Session 的比较。

  1. session 在服务器端,cookie 在客户端(浏览器)
  2. session 默认被存在在服务器的一个文件里(不是内存)
  3. session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
  4. session 可以放在 文件、数据库、或内存中都可以。
  5. 用户验证这种场合一般会用 session

4. ★★☆ 缓存 的Cache-Control 字段,特别是 Expires 和 max-age 的区别。ETag 验证原理。

Cache-Control 的含义
可缓存性

  • public,http 请求返回的过程当中,在 cache-control 中设置这个值,代表 http 请求返回的内容所经过的任何路径当中(包括中间一些http代理服务器以及发出请求的客户端浏览器),都可以对返回内容进行缓存操作。
  • private,代表只有发起请求的浏览器才可以进行缓存
  • no-cache,可以在本地进行缓存,但每次发请求时,都要向服务器进行验证,如果服务器允许,才能使用本地缓存。

max-age(HTTP/1.1):web中的文件被用户访问(请求)后的存活时间,是个相对的值,相对Request_time(请求时间).
Expires(HTTP/1.0):1.相对文件的最后访问时间(Atime)-与age相同
2.绝对修改时间(MTime)-时间由文件建立时间来决定

Etag是服务端的一个资源的标识,在 HTTP 响应头中将其传送到客户端。客户端在向服务端请求资源的时候,通过If-None-Match请求头带上了之前服务端返回的Etag的值。服务端收到第二次请求的时候,发现携带了If-None-Match字段,就重新计算服务器对应资源的Etag,如果二者匹配了,就认为资源没有发生变化,直接给客户端相应304,让客户端读取缓存中的数据。
通过Etag来利用浏览器的缓存,降低我们服务器的带宽压力。这是可以提升服务端的性能的(数据传输上)。

5. ★★★ 长连接与短连接原理以及使用场景,流水线。

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

6. ★★★ HTTP 存在的安全性问题,以及 HTTPs 的加密、认证和完整性保护作用。

http容易被网络劫持导致用户被骗。
https:

  • 内容加密。浏览器到百度服务器的内容都是以加密形式传输,中间者无法直接查看原始内容。
  • 身份认证。保证用户访问的是百度服务,即使被 DNS 劫持到了第三方站点,也会提醒用户没有访问百度服务,有可能被劫持
  • 数据完整性。防止内容被第三方冒充或者篡改。
    HTTPS是安全的,因为有证书和加密机制做保障!(DNS劫持绕过HTTPS,采用了SSL层剥离的技术,黑客阻止用户和使用HTTPS请求的网站之间建立SSL连接,使用户和代理服务器(攻击者所控制的服务器)之间使用了未加密的HTTP通信。)

7. ★★☆ HTTP/1.x 的缺陷,以及 HTTP/2 的特点。

http1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑http2.0的协议解析决定采用二进制格式,实现方便且健壮。
TTP2.0最大的亮点在于多路复用,而多路复用的好处只有在http请求量大的场景下才明显,所以有人会觉得只适用于浏览器浏览大型站点的时候。这么说其实没错,但http2.0的好处不仅仅是multiplexing,请求压缩,优先级控制,server push等等都是亮点。对于内容型移动端app来说,比如淘宝app,http请求量大,多路复用还是能产生明显的体验提升。(HTTP/2有:二进制帧,多路复用,请求优先级,流量控制,服务器端推送以及首部压缩等新改进)

8. ★★★ HTTP/1.1 的特性。

  • HTTP1.1默认使用长连接,可有效减少TCP的三次握手开销。
  • HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求
  • 支持只发送header信息(不带任何body信息)
  • bytes是HTTP/1.1新增内容,HTTP/1.0每次传送文件都是从文件头开始,即0字节处开始。RANGE:bytes=XXXX表示要求服务器从文件XXXX字节处开始传送,这就是我们平时所说的断点续传!
  • host请求头:提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。

9. ★★☆ HTTP 与 FTP 的比较。

  • HTTP是超文本传输协议,它是互联网中数据通信的基础,数据通信以客户端发送的请求开始,并以从Web服务器接收的响应结束。FTP是文件传输协议,用于使用TCP在FTP服务器和网络中的客户端计算机之间上传和下载文件,可以将文件从一个主机复制到另一个主机。
  • 功能上的区别:HTTP用于访问Internet上的不同网站,将网页内容从Web服务器传输到客户端的Web浏览器,被称为单向系统。FTP用于在FTP服务器和FTP客户端之间上传和下载文件,可以将文件从一个主机传输到另一个主机,被称为双向系统。
  • 连接上的区别:HTTP仅建立一个链接:数据连接。FTP建立两个链接:数据连接和控制连接。
  • 端口的区别:HTTP使用TCP的80端口,而FTP使用TCP的20和21端口。
  • 传输的文件大小的区别
  • 验证区别
  • 显示的区别(url/ftp)
  • 数据储存的区别:HTTP传输到设备的网页或数据内容不会保存在该设备的内存中,而使用FTP传送到设备的数据会保存在该设备的内存中。

3 Socket

1. ★★☆ 五种 IO 模型的特点以及比较。

  • 阻塞IO:从等待对方发送数据到接收数据,并把数据从内核空间复制到用户空间的这段时间内,recv函数是阻塞的。
  • 非阻塞IO:应用范围较窄,因为当数据没有到来时需要不断的循环测试recv的返回值和返回码,这会消耗CPU资源,于是把这种循环测试称作忙等待。
  • IO复用:阻塞的位置提前到select函数。
  • 信号驱动IO:操作系统以信号的方式来通知用户态程序,用户态程序跳转到自定义的信号处理函数。这种方式使异步处理成为可能,信号是异步处理的基础。
  • 异步IO:效率是最高的。异步IO已经把数据从内核空间拷贝到用户空间了,而信号驱动IO的数据还在内核空间,等着recv函数把数据拷贝到用户态空间。
    异步IO主动把数据拷贝到用户态空间,主动推送数据到用户态空间,不需要调用recv方法把数据从内核空间拉到用户态空间。异步IO是一种推数据的机制,相比于信号处理IO拉数据的机制效率更高。
    推数据时直接完成的,而拉数据时需要调用recv函数,调用函数会产生额外的开销,故效率低。
    原文csdn

2. ★★★ select、poll、epoll 的原理、比较、以及使用场景;epoll 的水平触发与边缘触发。

  • select:时间复杂度:O(n),fd_set(监听的端口个数):32位机默认是1024个,64位机默认是2048。
  • poll:和select不同的地方:采用链表的方式替换原有fd_set数据结构,而使其没有连接数的限制
  • epoll:时间复杂度:O(1)

epoll的两种工作方式:1.水平触发(LT)2.边缘触发(ET)
LT模式:若就绪的事件一次没有处理完要做的事件,就会一直去处理。即就会将没有处理完的事件继续放回到就绪队列之中(即那个内核中的链表),一直进行处理。
ET模式:就绪的事件只能处理一次,若没有处理完会在下次的其它事件就绪时再进行处理。而若以后再也没有就绪的事件,那么剩余的那部分数据也会随之而丢失。
由此可见:ET模式的效率比LT模式的效率要高很多。只是如果使用ET模式,就要保证每次进行数据处理时,要将其处理完,不能造成数据丢失,这样对编写代码的人要求就比较高。
注意:ET模式只支持非阻塞的读写:为了保证数据的完整性。
原文csdn


转载:https://blog.csdn.net/wantLight/article/details/105091766
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场