计算机网络面试题
http与https的区别:
http运行在tcp上,明文传输,客户端与服务器都无法验证对方身份;https是添加了加密和认证机制的http。有以下不同:
端口不同:http默认80端口,https默认443;
资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
开销:https通信需要证书,而证书一般要向认证机构购买。
对称加密与非对称加密:
https://www.cnblogs.com/sxiszero/p/11133747.html
对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,如何安全地将密钥发给对方;
非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随便发布,但私钥只有自己知道,发送密文的一方使用对方的公钥进行加密处理,对方收到加密信息后,使用自己私钥进行解密。
由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性,但是和对称加密比起来,它非常慢,所以我们使用对称加密传输数据,用非对称加密的方式将对称加密的密钥发送给对方。
三次握手、四次挥手:

  1. 三次握手:
    (1) 客户端将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给服务器,客户端进入SYN_SENT状态,等待服务器确认;
    (2) 服务器收到数据包后,通过标志位SYN=1知道客户端请求连接,服务器将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=k,并将该数据包发送给客户端确认连接请求,服务器进入SYN_RCVD状态;
    (3) 客户端收到确认请求后,检查ack是否是x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=k+1,并将数据包发送给服务器,服务器检查ack是否为k+1,如果是则建立连接成功,客户端服务器进入ESTABILISHED完成三次握手,随后与服务器间开始传输数据。

  2. 四次挥手(我要和你断开连接;好的,断吧;我也要和你断开连接;好的,断吧)
    (1) 客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态;
    (2) 服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1,服务器进入CLOSE_WITE状态。此使TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,客户端仍要接收;
    (3) 服务端发送一个FIN,用来关闭服务器到客户端的数据传输,服务器进入LAST_ACK状态;
    (4) 客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务
    器,确认号为收到序号+1,服务器进入CLOSD状态。

time_wait状态(重要):

  1. time_wait的作用:
    (1)可靠地实现TCP全双工连接的终止:
    在进行关闭连接四次挥手协议时,最后的ACK是由主动关闭端发出的,如果这个最终的ACK丢失,服务器将重发最终的FIN,
    因此客户端必须维护状态信息允许它重发最终的ACK。
    (2)防止上一次连接中的包,迷路后重新出现,影响新连接
    经过2MSL,上一次连接中所有的重复包都会消失
  2. 大量time_wait造成的影响:
    在高并发短连接的TCP服务器上,当服务器处理完请求后立刻主动正常关闭连接。这个场景下会出现大量socket处于TIME_WAIT状态。如果客户端的并发量持续很高,此时部分客户端就会显示连接不上。
    解决方法:
    (1)修改内核参数;(TIMEOUT 时间、开启timeout的快速回收等)
    (2)采用负载均衡策略。
    为什么TCP要三次握手,两次不可以吗:
    为了防止已失效的链接请求报文突然又传送到了服务端,因而产生错误。
    失效的连接请求:若客户端向服务器发送的连接请求丢失,客户端等待应答超时后会再次发送连接请求,此时上一个连接请求就是失效的。
    如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求后会误认为是客户端重新发送的请求连接,随后向客户端发送响应并连接,但此时客户端早已进入CLOSED状态,不会理会服务端发来的数据,服务端将会一直等待下去,这样严重浪费服务端连接资源。
    TCP协议如何保证传输的可靠性:
    TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用在彼此交换数据之前必须建立一个TCP连接。
    对于可靠性,TCP通过以下方式保证:
  3. 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出来数据包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;
  4. 对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;
  5. 丢弃重复数据:对于重复数据,能够丢弃重复数据;
  6. 应答机制:当TCP收到发自TCP连接另一端的数据,他将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;
  7. 超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;
  8. 流量控制:TCP连接的每一方都有固定大小的缓冲空间。接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段, 通过ACK端通知发送端。接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;发送端接受到这个窗口之后, 就会减慢自己的发送速度;
  9. 拥塞控制:拥塞控制是对网络整体的检测。防止过多的数据同时堆积在网络中,这样大家都无法传输数据。
    客户端不断进行请求连接会怎样:
    服务器会回为每一个请求创建一个连接,并向其发送确认报文,然后等待客户端进行确认。
    1. DDos攻击:
    (1) 客户端向服务端发送请求连接数据包;
    (2) 服务端向客户端发送确认数据包;
    (3) 客户端不向服务端发送确认数据包,服务端一直等待来自客户端的确认
    2,DDos预防:
    (1) 限制同时打开SYN半连接的数目;
    (2) 缩短SYN半连接的time out时间;
    (3) 关闭不必要的服务。
    Get、post区别:
  10. 从功能上讲,get从服务器获取资源,post一般用来更新服务器上的资源;
  11. 从请求形式上来看,get请求数据会附在url后面,即将请求数据放在http报文的请求头中,以?分隔,参数间用&分隔;而post请求会将提交的数据放置在http请求报文的请求体中;
  12. 就安全性而言,post的安全性要比get的安全性高,因为get请求提交的数据将明文出现在url上,而post请求则将数据包装到请求体中,相对更安全;
  13. 从请求大小看,get请求长度受限于浏览器对url的长度限制,允许发送的数据量较小,而post请求则没有限制。
    TCP与UDP的区别:
    TCP和UDP协议属于传输层协议,他们之间区别包括:
  14. TCP是面向连接的,UDP是无连接的;
  15. TCP是可靠的,UDP是不可靠的;
  16. TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;
  17. TCP是面向字节流的,UDP是面向报文的;
  18. TCP有拥塞控制机制,UDP没有;
  19. TCP首部开销(20字节)比UDP首部开销大(8字节)。
    Tcp报文段首部:
    TCP报文段首部的前20个字节是固定的(下图),后面有4n字节是根据需要而增加的选项(n是整数)。因此TCP首部的最小长度是20字节。
  1. 源端口和目的端口:占2个字节,分别写入源端口和目的端口;
  2. 序号:占4字节。序号范围是【0,2^32 - 1】,共2^32(即4294967296)个序号。序号增加到2^32-1后,下一个序号就又回到0。也就是说,序号使用mod 2^32运算。TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则是指的是本报文段所发送的数据的第一个字节的序号。例如,一报文段的序号是301,而接待的数据共有100字节。这就表明:本报文段的数据的第一个字节的序号是301,最后一个字节的序号是400。显然,下一个报文段(如果还有的话)的数据序号应当从401开始,即下一个报文段的序号字段值应为401。这个字段的序号也叫“报文段序号”。
  3. 确认号:占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。例如,B正确收到了A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节(序号501~700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701。注意,现在确认号不是501,也不是700,而是701。
    总之:若确认号为= N,则表明:到序号N-1为止的所有数据都已正确收到。
  4. 数据偏移:占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的,但应注意,“数据偏移”的单位是32位字(即以4字节的字为计算单位)。由于4位二进制数能表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大字节(即选项长度不能超过40字节)。
  5. 保留:占6位,
    下面有6个控制位,用来说明本报文段的性质。
  6. 紧急URG:当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快发送(相当于高优先级的数据),而不要按原来的排队顺序来传送。
  7. 确认ACK:仅当ACK = 1时确认号字段才有效,当ACK = 0时确认号无效。TCP规定,在连接建立后所有的传送的报文段都必须把ACK置为1。
  8. 推送PSH:当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应。在这种情况下,TCP就可以使用推送(push)操作。这时,发送方TCP把PSH置为1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快地(即“推送”向前)交付接收应用进程。而不用再等到整个缓存都填满了后再向上交付。
  9. 复位RST:当RST=1时,表示TCP连接中出现了严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。RST置为1还用来拒绝一个非法的报文段或拒绝打开一个连接。
  10. 同步SYN:在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1,因此SYN置为1就表示这是一个连接请求或连接接受报文。
  11. 终止FIN: 用来释放一个连接。当FIN=1时,表明此报文段的发送发的数据已发送完毕,并要求释放运输连接。
  12. 窗口:占2字节。窗口值是【0,2^16-1】之间的整数。窗口指的是发送本报文段的一方的接受窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据。
  13. 校验和:占2字节,检验和字段检验的范围包括首部和数据这两部分。
  14. 紧急指针:占2字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据) 。因此,在紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。值得注意的是,即使窗口为0时也可以发送紧急数据。
  15. 选项:长度可变,最长可达4字节。当没有使用“选项”时,TCP的首部长度是20字节。
    TCP的拥塞控制:
    在某段时间内,如果网络中某一资源的请求超过了该资源所能提供的可用部分,网络性能就会变坏,这种情况就叫拥塞。拥塞控制就是防止过多的数据注入网络中,这样可使网络不致过载。拥塞控制是一个全局性的过程,流量控制是点对点通信量的控制。
  16. 慢启动:
    不要一开始就发送大量数据,而是先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小,这种增加呈指数增长。当前的拥塞窗口cwnd的值已经等于慢开始门限值,之后改用拥塞避免算法;
  17. 拥塞避免:
    拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口加1,这样拥塞窗口按线性规律缓慢增长;
  18. 快重传:
    当接收方收到一个失序序列,意味着可能有数据丢失,此时立即向发送方发送重复确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必等待设置的重传计时器。
  19. 快恢复:
    当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把拥塞窗口减半继续执行拥塞避免算法。
    从输入网址到获得页面的过程:
  20. 浏览器查询DNS,获取域名对应的ip地址:
    具体包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器查询,如果要查询的内容包含在本地配置区域资源中,则返回解析结果给客户机(此解析具有权威性);如果要查询的域名不由本地DNS服务器区域解析,但该服务器已经缓存了此网址映射关系,则调用这个ip地址(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,将发起递归查询或者迭代查询。
  21. 浏览器获得ip地址后向服务器请求建立连接,发起三次握手;
  22. TCP/IP连接建立好后,浏览器向服务器发送http请求;
  23. 服务器接收请求,并根据路径参数映射到特定的请求处理器中进行处理,并将处理结果及相应视图返回给浏览器;
  24. 浏览器解析并渲染视图;
  25. 浏览器根据请求到的资源、数据渲染页面,最终向用户呈现一个完整页面。
    DNS原理:
    一、主机向本地域名服务器的查询采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。这种方式就是递归。
    二、本地域名服务器向根域名服务器的查询采用迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。

Session、cookie、application:
Cookie和session都是客户端与服务器之间保持状态的解决方案,具体来说,cookie机制采用的是在客户端保持状态的解决方案,而session机制采用的是在服务器保持状态的方案。

  1. cookei:
    cookie实际上是一小段的文本信息,客户端请求服务器,如果服务器需要记录该用户的状态,就使用response向客户端浏览器颁发一个cookie,而客户端浏览器会把cookie保存起来。当浏览器再次请求该服务器时,浏览器会把请求的网址连同该cookie一同提交给服务器,服务器检查该cookie,以此来辨认用户状态。服务器还可以根据需要修改cookie内容。
  2. session:
    客户端请求服务器时,如果服务器记录该用户状态,就获取session来保存状态,如果服务器已为客户端创建过session,服务器就按照sessionid把这个session检索出来使用;如果客户端请求不包含sessionid,则此服务器会创建一个session并且生成一个与此session相关联的sessionid,并将这个sessionid在本次响应中返回给客户端保存。保存这个sessionid的方式可以采用cookie机制,这样在交互过程中浏览器可以自动的按照规则把sessionid发回给服务器;若浏览器禁用cookie的话,可以通过url重写机制将sessionid传回给服务器。
  3. session和cookie对比:
    (1) 实现机制:session的实现常常依赖cookie,通过cookie机制传回sessionid;
    (2) 大小限制:cookie有大小限制并且浏览器对每个站点的cookie的数量也有限制,session没有大小限制,理论上只与服务器内存有关;
    (3) 安全性:cookie存在安全隐患,通过拦截或本地文件可找到cookie后进行攻击,而session由于保存在服务端,相对更安全;
    (4) 服务器资源消耗:session保存在服务器端,会存在一段时间才会消失,session过多会增加服务器压力。
  4. Application
    Application:与一个web应用程序相对应,为应用程序提供了一个全局的状态,所有客户都可以使用该状态。
    url重写:

Xss攻击:
Xss是跨站脚本攻击,通过添加一些脚本代码嵌入到web页面中去,使别的用户都会执行相应的嵌入代码,从而达到恶意目的。
Xss类型:
(1) 反射型:一般来说这种类型的XSS,需要攻击者提前构造一个恶意链接,来诱使客户点击,比如这样的一段链接:www.abc.com/?params=
(2) 存储型:这种类型的XSS,危害比前一种大得多。比如一个攻击者在论坛的楼层中包含了一段JavaScript代码,并且服务器没有正确进行过滤输出,那就会造成浏览这个页面的用户执行这段JavaScript代码。
(3) DOMXSS:这种类型则是利用非法输入来闭合对应的html标签。 比如,有这样的一个a标签:<a href='var的内容变为 ’ οnclick=’alert(/xss/) //,这段代码就会被执行。
Osi、tcp/ip:
OSI是一个理论上的网络通信模型,而TCP/IP则是实际上的网络通信标准。

  1. 物理层:
    实现了相邻计算机节点之间比特流的透明传送,并尽可能屏蔽具体传输介质和物理设备的差异。RS232、RS449协议
  2. 数据链路层:
    接收物理层流形式的数据,封装成帧,传送给上一层,同样也将上层数据帧拆装为流形式的数据转发到物理层;PPP、Ethernet——以太网、Frame Relay——帧中继协议
  3. 网络层:
    将网址地址翻译成对应的物理地址,并通过路由选择算法为分组通过通信子网选择最适当的路径。Ip、Arp协议
  4. 传输层:
    在源端与目的端之间提供可靠的透明数据传输。传输层协议为不同主机上运行的进程提供逻辑通信,而网络层协议为不同主机提供逻辑通信。TCP、UDP协议
  5. 会话层:
    是用户应用程序和网络之间的接口,负责在网络中的两节点之间建立、维持和终止通信。
  6. 表示层:
    对来自应用层的命令和数据进行解释,确保一个系统的应用层所发的数据可被另一个系统应用层读取。
  7. 应用层:
    为用户的应用进程提供网路通信服务。
    Tcp/ip协议:
  8. 网络接口层:
    本地网络内寻址(MAC地址)
    根据以太网帧首部中的类型字段进行拆封
  9. 网际层:
    网络间选路(ip地址)
    IP地址由两部分组成,即网络地址和主机地址,二者是主从关系:

(1)网络号 net-id,它标志主机(或路由器)所连接到的网络,网络地址表示其属于互联网的哪一个网络

(2)主机号 host-id,它标志该主机(或路由器),主机地址表示其属于该网络中的哪一台主机。
3. 传输层:
进程寻址(端口号)
传输层提供了两种到达目标网络的方式:

(1)用户数据报协议UDP:

只提供了基本的错误检测,是一个无连接的协议。
特点:把数据打包,数据大小有限制(64k),不建立连接,速度快,但可靠性低。

(2)传输控制协议TCP:

提供了完善的错误控制和流量控制,能够确保数据正常传输,是一个面向连接的协议。
特点:建立连接通道,数据大小无限制速度慢,但是可靠性高。由于传输层涉及的东西比较多,比如端口,Socket等。
4. 应用层:
运行在TCP协议上的协议:
HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
FTP(File Transfer Protocol,文件传输协议),由名知义,用于文件传输。
POP3(Post Office Protocol, version 3,邮局协议),收邮件用。
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件。
TELNET(Teletype over the Network,网络电传),通过一个终端(terminal)登陆到网络。
SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。
运行在UDP协议上的协议:
BOOTP(Boot Protocol,启动协议),应用于无盘设备。
NTP(Network Time Protocol,网络时间协议),用于网络同步。
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。
其他:
DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作(运行在TCP和UDP协议上)。
ECHO(Echo Protocol,回绕协议),用于查错及测量应答时间(运行在TCP和UDP协议上)。
SNMP(Simple Network Management Protocol,简单网络管理协议),用于网络信息的收集和网络管理。
ARP(Address Resolution Protocol,地址解析协议),用于动态解析以太网硬件的地址。

  1. TCP对应的应用协议:
    (1) FTP:定义了文件传输协议,使用21端口。
    (2) Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,
    (3) SMTP:邮件发送协议,端口号25;
    (4) POP3:邮件接收协议,110端口;
    (5) http: 从Web服务器传输超文本到本地浏览器的传送协议。
  2. UDP对应协议:
    (1) DNS:域名解析,53号端口;
    (2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。
    (3) TFTP:简单文件传输协议,该协议在熟知端口69上使用UDP服务。

ARP协议工作原理:
ARP协议完成了ip与物理地址的映射,每台主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示ip和MAC之间的对应关系。当源主机将一个数据包发送到目的主机时,首先会检查自己的ARP列表中是否存在该ip对应的MAC地址,如果没有就像本地网段发起一个ARP请求的广播包,查询目的主机对应的MAC地址。此ARP请求包中包含源主机ip地址、目的主机ip地址、硬件地址。网络中所有主机收到这个ARP请求后,会检查数据包中的目的ip与自己ip是否一致,不相同就忽略。相同的话,该主机首先将发送端的MAC地址和ip地址添加到自己的ARP列表中,如果ARP表中已存在该ip信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它想要查询的MAC地址;源主机收到这个ARP响应数据包后,将得到的目的主机的ip地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据传输。如果源主机一直没收到ARP响应数据包,则查询失败。
Ip地址的分类:
Ip分为网络号和主机号,同一个物理网络的所有主机使用同一个网络号,不同主机使用不同主机号。Ip地址分为A、B、C、D、E 5类。

  1. A类地址:以0开头,0~127;1字节的网络地址加3字节的主机地址。

  2. B类地址:以10开头,128~191;2字节的网络地址加2字节的主机地址。

  3. C类地址:以110开头,192~223;3字节的网络地址加1字节的主机地址。

  4. D类地址:以1110开头,224~239;用于1对多通信。

  5. E类地址:以1111开头,保留地址。
    Ip地址与物理地址:
    物理地址是数据链路层和物理层使用的地址,ip地址是网络层和以上各层使用的地址,是一种逻辑地址,其中ARP协议用于ip地址与物理地址的对应。
    常见状态码:
    http请求结构:请求方式+url+协议及其版本
    http响应结构:状态码+原因短语+协议及其版本
    1xx:请求已被接收,正在处理;
    2XX:请求成功,请求被成功处理;
    3xx:重定向,要完成请求必须进行下一步处理;
    301:永久性转移;
    302:暂时性转移;
    304:已缓存;
    4xx:客户端错误请求不合法;
    400:请求有语法问题;
    403:拒绝请求;
    404:访问页面不存在;
    5xx:服务器错误,服务器不能处理合法请求;
    500:服务器内部错误;
    503:服务器不可用,稍等。
    Tcp/ip协议:
    TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
    应用层:主要完成应用程序之间的网路通信,如电子邮件发送(SMTP)、电子邮件接收(POP3)、文件传输协议(FTP)、网络远程访问协议(Telnet)。
    传输层:它提供了节点之间的数据传送,应用程序之间的通信服务,主要功能是数据格式化、数据确认和丢失重传等。如TCP协议、UDP协议,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层主要负责数据传输,并确定数据已被送达并接收。
    网络层:负责提供基本的数据封包传送功能,让每一块数据包都能到达目的主机(但不检查是否被接收),如ip协议。
    网络接口层:接收ip数据数据报并进行传输,从网络上接收物理帧,抽取ip数据报转交给下一层,对实际的网络媒体的管理,定义如何使用实际网络来传送数据。
    http协议:
    http默认端口是80,https的端口是443.
    http特点:

  6. 简单快速:客户像服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

  7. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

  8. HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。

  9. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

  10. http工作流程:
    一次HTTP操作称为一个事务,其工作过程可分为四步:

  11. 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

  12. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

  13. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

  14. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
    如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,由显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

  15. http的requst:
    客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行、请求头部、空行和请求数据四个部分组成。

  16. 请求行,用来说明请求类型、要访问的资源(get请求才有)以及使用的http版本号。

     2. 请求头部用来说明服务器要使用的附加信息:
     以键值对的形式,包括请求的对象类型、使用的语言种类、页面编码种类、页面字符集、目的主机等。
     3. 空行,请求头部后面的空行是必须的
     4. 请求数据的主体,可以添加任意其他数据
  17. http的response:
    一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。
    HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

    1. 状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
      状态码: 1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急...
      2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.
      200:请求成功;
      3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
      301: 请求的网页已永久移动到新位置;
      302:暂时重定向
      304:自从上次请求后,请求的网页未修改过
      4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
      400:错误请求,语法不正确;
      403:服务器拒绝请求;
      404:请求页面不存在;
      5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。
      500:服务器遇到错误,无法完成请求;
      501:(尚未实施) 服务器不具备完成请求的功能。
      503:服务器不能使用;
      504:(网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
      505:服务器不支持请求中所用的 HTTP 协议版本。
  18. 消息报头,用来说明客户端要使用的一些附加信息,包括响应时间、编码方式、Content_type等

  19. 空行

  20. 响应正文,服务器返回给客户端的文本信息
    SMTP协议端口:25,
    FTP协议端口:21,
    pop3协议端口:110,
    https协议端口:443
    http1.0、http1.1、http2.0的区别:
    http1.0与http1.1的区别:

  21. 长连接;
    HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。
    HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用一个长连接来发多个请求。

  22. 节约宽带;
    HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接收到100,才开始把请求body发送到服务器。
    这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。
    另外HTTP1.1还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础。

  23. HOST域。
    HTTP1.0是没有host域的,HTTP1.1才支持这个参数。

HTTP 2.0的出现,相比于HTTP 1.x,大幅度的提升了web性能。在与HTTP/1.1完全语义兼容的基础上,进一步减少了网络延迟。而对于前端开发人员来说,无疑减少了在前端方面的优化工作。

http1.1和http2.0的区别:

  1. 多路复用;
    HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
  2. 二进制分帧;
    在应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。在不改动HTTP/1.x的语义、语法、状态吗、URI以及首部字段……的情况下,突破HTTP1.1的性能限制,改进传输性能,实现低延迟和高吞吐量。
  3. 首部压缩;
    HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
  4. 服务器推送。
    在HTTP/2中,服务器可以对客户端的一个请求发送多个响应。
    ip协议:

(1)版本:包含IP数据报的版本号:ipv4为4,ipv6为6
(2)首部长度:其中保存的是整个首部中的“32位字”的数量。这个字段正常的值为:5(假设“可选字段长度为0”)。该字段最大值为:15(可选字段长度全满加上原有字段);
(3)区分服务:

优先级(3位)和数据链路层的QoS机制有关,定义了8个服务级别。当Qos选择了某种服务模型后,优先级越高,字段越优先传输。D、T、R分别表示延时、吞吐量、可靠性。当这些值都为1时,分别表示低延时、高吞吐量、高可靠性。
(4)ECN:用于为数据报标记“拥塞标识符”。
当一个带有ECN标记的分组发送后,如果接收端“持续拥塞”且“具有感知ECN的能力”(如TCP),那么接收端会通知发送端降低发送速度。
(5)总长度:该字段指的是IPv4数据报的总长度(以字节为单位)。
通过该字段和“首部长度”字段,我们可以推测出ip数据报中“数据部分”从哪开始以及长度。
(6)标识、标志、分偏移:
该字段帮助标识由IPv4主机发送的数据报。
这个字段对实现分片很重要,大多数数据链路层不支持过长的ip数据报,所以要把ip数据报分片,每一片都是一个独立的ipv4数据报。
发送主机每次发送数据报都讲一个“内部计数器”加1,然后将数值复制“标识”字段中。
(7)生存时间:该字段用于设置一个“数据报可经过的路由器数量”的上限。
发送方在初始发送时设定某个值(建议为64,、128或255),每台路由器再转发时都将其减一,当字段达到0时,该数据报被丢弃,并使用一个ICMP消息通知发送方。
(8)包含一个数字,该数字对应一个“有效载荷部分的数据类型”。比如17代表UDP,6代表TCP。
(9)首部校验和:该字段“仅计算”IPv4首部。也就是说只“校验”首部。并不检查数据报的“数据部分”。
首先将“首部校验和”设置为0,。
然后对首部(整个首部是一个16位字的“序列”)计算16位二进制反码和。该值被存储在首部校验和字段中。
当接收方接收到数据报后,也对其首部进行校验计算,如果结果与“首部校验和”的值不同,就丢弃收到的数据报。
(10)源地址
(11)目的地址
(12)可选字段:IP支持很多可选选项。
如果选项存在的话,它在IPv4分组中紧跟在基本IPv4头部之后。Ipv6原来是用来解决ipv4不够用的,现在通过nat技术解决了这个问题(在局域网内部设置私网)。
Ip数据报的分组转发:

通过目的地址从路由表中获取下一跳。
转发过程:
(1) 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
(2) 若网络 N 与此路由器直接相连。则把数据报直接交付目的主机 D。否则是间接交付,运行(3)。
(3) 若路由表中有目的地址为 D 的特定主机路由。则把数据报传送给路由表中所指明的下一跳路由器。否则,运行(4)。
(4) 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器。否则,运行(5)。
(5) 若路由表中有一个默认路由。则把数据报传送给路由表中所指明的默认路由器;否则,运行(6)。
(6) 报告转发分组出错。
Ip地址按范围划分:
IPV4被分为五大类:ABCDE
A类为:点分四组中的第一组地址范围为0127的IP地址。已二进制来看就是“首位为0”,一个网络号,3个主机号
B类:128
191.二进制首位为10,两个网络号,2个主机号
C类:192223.二进制首位为110,3个网络号,1个主机号
D类:224
239.二进制首位为1110,用于广播
E类:240~255.二进制首位为1111,保留
Ip地址结构:
分为网络号和主机号,就是分配ip地址很麻烦。(即网络信息中心要负责每一台主机的ip地址分配,这样就太繁杂了。)。于是就将ip地址从两级分成了三级:网络号、子网号(子网号和网络号共同组成新的网络号)、主机ID。划分子网ID的方法是从“原有的主机号中借用若干位”作为子网号。(当然,主机号就减少了)
网络信息中心集中分配每一个网络号。
然后各个站点的管理人员再分配他们网络号下的子网ID和对应的主机ID。然后管理员在安排每一个子网下面的主机数。