技术岗面试基础知识复习——计算机网络

  • 互联网 (Internet):特指Internet,起源于美国,现已发展成为世界上最大的、覆盖全球的计算机网络。
  • 计算机网络 (简称为网络):由若干结点(node)和连接这些结点的链路(link)组成。
  • 互连网 (internetwork 或 internet):可以通过路由器把网络互连起来,这就构成了一个覆盖范围更大的计算机网络,称之为互连网。

计算机网络的性能指标

  • 速率:比特(bit)是计算机中数据量的单位,也是信息论中使用的信息量的单位。一个比特就是二进制数字中的一个 1 或 0。速率是计算机网络中最重要的一个性能指标,指的是数据的传送速率,它也称为数据率 (data rate)或比特率 (bit rate)。速率的单位是 bit/s,或 kbit/s、Mbit/s、 Gbit/s 等。速率往往是指额定速率或标称速率,非实际运行速率。

  • 带宽:在计算机网络中,带宽用来表示网络中某通道传送数据的能力。表示在单位时间内网络中的某信道所能通过的“最高数据率”。单位是 bit/s ,即 “比特每秒”

     注:在时间轴上信号的宽度随带宽的增大而变窄。
    

在这里插入图片描述

  • 吞吐量:吞吐量 (throughput) 表示在单位时间内通过某个网络(或信道、接口)的数据量。吞吐量更经常地用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。吞吐量受网络的带宽或网络的额定速率的限制。

  • 时延:时延 (delay 或 latency) 是指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。由四种时延组成:

     1、发送时延:传输时延。从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。
    		发送时延 = 数据帧长度(bit)/ 发送速率(bit/s)
     2、传播时延:电磁波在信道中需要传播一定的距离而花费的时间。
     		传播时延 = 信道长度(米)/ 信号在信道上的传播速率(米/秒)
     3、处理时延:主机或路由器在收到分组时,为处理分组(例如分析首部、提取数据、差错检验或查找路由)所花费的时间。 
     4、排队时延:分组在路由器输入输出队列中排队等待处理所经历的时延。排队时延的长短往往取决于网络中当时的通信量。
    

注:对于高速网络链路,我们提高的仅仅是数据的发送速率而不是比特在链路上的传播速率。 提高链路带宽减小了数据的发送时延。

  • 时延带宽积:链路的时延带宽积又称为以比特为单位的链路长度。
    时延带宽积= 传输时延 * 带宽

  • 往返时间RTT:往返时间表示从发送方发送数据开始,到发送方收到来自接收方的确认,总共经历的时间。在互联网中,往返时间还包括各中间结点的处理时延、排队时延以及转发数据时的发送时延。

  • 利用率:分为信道利用率网络利用率

     信道利用率:指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道的利用率是零。
     网络利用率则是全网络的信道利用率的加权平均值。
     注:信道利用率并非越高越好。当某信道的利用率增大时,该信道引起的时延也就迅速增加。
    

信号(即电磁波)在传输媒体上的传播速率(米/秒,或公里/秒)
计算机向网络发送比特的速率(比特/秒),也叫传输速率。

OSI七层模型

OSI七层模型描述了网络活动的特点。

  1. 物理层:(物理设备)只负责传输01二进制比特流,为设备之间的数据通信提供传输媒体和互连设备,确保原始的数据可在各种物理媒体上传输,为数据链路层提供物理连接
  2. 数据链路层:(提供介质访问和链路管理)在通信实体之间建立数据链路连接,将上层数据封装成帧,以帧为单位传送数据。(封装成帧就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。首部和尾部就是确定帧的界限。)
  3. 网络层:(IP地址和路由选择)负责路由寻址和广播内容,选择合适的网间路由和交换结点,确保数据及时传送(网络层协议有:IP协议,ICMP控制报文协议(控制数据报传送中的差错情况),ARP地址转换协议、RARP逆地址解析协议等)
  4. 传输层:向用户提供可靠的端到端的连接(TCP,UDP)
  5. 会话层:负责建立、维护、拆除会话。组织同步的两个会话用户之间的对话,并管理数据的交换。
  6. 表示层:用于处理两个通信系统间信息交换的表示方式,它包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。
  7. 应用层:每个应用层协议都是为了解决某一类应用问题,而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。应用层的具体内容就是规定应用进程在通信时所遵循的 协议。(应用层协议有:DNS域名系统、FTP文件传输协议,TFTP简单文件传输协议(端口号25)、Http网络传输协议,https、SMTP简单邮件传输协议、POP3读取邮件协议等)

FTP服务有两次连接,通信连接和数据发送连接,端口号分别是20和21

举例理解七层模型:如从广州往北京发快递,必须要有通道,如航运、陆运等,选择陆运,那么从广州到北京的实际存在的公路就是物理层;那么这条公路上存在的各条路与路之间的连接,叫做数据链路层;由于从广州到北京有很多的方式,那么就由网络层来选择用哪种方法;通道连接建立起来后,就要开始发快递了,叫做传输层;北京的快递员收到快递后,需要联系收件人交付快递,叫做会话层;收到快递后,查看快递里的东西是不是要的东西,叫做表示层;确认是自己要的东西之后,就可以用这个东西了,表示应用层。

  注:由于七层模型复杂且不太实用,所以出现了**TCP/IP协议**:网络接口层(组合物理层和数据链路层)、网络层、传输层、应用层(组合会话层、表示层和应用层),但是tcp/ip协议的网络接口层没有什么具体的内容,所以综合两种协议的优点,产生了**五层协议**:物理层、数据链路层、网络层、传输层、应用层。

先依次增加每一层的首部(数据链路层有首部加尾部):(每一个分组的首部都含有地址(诸如目的地址和源地址)等控制信息。)
在这里插入图片描述
然后依次去掉对应层的首部:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

为什么要分层?

分层可以使结构非常清晰,清楚知道各层之间的关系;模块化会使系统的维护、升级更加简化,改变某一层服务的具体实现对其它部分不影响。(但是分层也许会造成每一层都要重复较低层的功能)

IP 网络的重要特点

早期的计算机网络采用电路交换,新型的计算机网络采用基于存储分组转发的方式。
分组交换:
1、 在发送端把要发送的报文分隔为较短的数据块
2、每个块增加带有控制信息的首部构成分组(包)
3、 依次把各分组发送到接收端
4、 接收端剥去首部,抽出数据部分,还原成报文

  • 每一个分组独立选择路由。
  • 发往同一个目的地的分组,后发送的有可能先收到(即可能不按顺序接收)。
  • 当网络中的通信量过大时,路由器就来不及处理分组,于是要丢弃一些分组。
  • 因此, IP 网络不保证分组的可靠地交付。
  • IP 网络提供的服务被称为:尽最大努力服务(best effort service)

IP地址分类

IP地址由4个字段表示,每个字段一个字节,一个字节8位,一共32位。IP地址由两部分组成,网络地址(属于互联网中的哪一个网络)和主机地址(属于其网络的哪一台主机),一共分为5类。

  • A类:表示范围0.0.0.0-127.255.255.255,默认子网掩码255.0.0.0,第一个字节为网络号,后三个字节为主机号。网络号第一位为0,剩余7位随便用。一般用于大型网络。
  • B类:表示范围128.0.0.0-191.255.255.255,默认子网掩码255.255.0.0,前两个字节为网络号,后两个字节为主机号。网络号前两位为‘10’,剩余14位随便用。一般用于中等规模网络
  • C类:表示范围192.0.0.0-223.255.255.255,默认子网掩码255.255.255.0,前三个字节为网络号,第四个字节为主机号。网络号前三位为‘110’,剩余21位随便用。一般用于小型网络,如局域网。
  • D类:多播地址。表示范围224.0.0.0-239.255.255.255,最前面四位默认 ‘1110’。一般用于多路广播用户。
  • E类:保留地址。表示范围240.0.0.0-247.255.255.255,最前面四位默认‘1111’。

私有地址:在互联网上不能使用,只能在局域网中使用。

A类:10.0.0.0到10.255.255.255是私有地址。
B类:172.16.0.0到172.31.255.255是私有地址。
C类:192.168.0.0到192.168.255.255是私有地址。·············``·····```····`··················································

无效链接(死链接、不可到达的链接)

从前可到达链接,后可能因为网站迁移、改版或操作不当等,导致链接指向的目标页面不存在而无法访问所遗留的链接。一般会出现“抱歉,您所访问的页面不存在”的提示信息或者404状态页面

网页卡顿、加载很慢的原因

网速慢、带宽不足、硬件配置低、内存被占满。
JS脚本过大,阻塞了页面的加载。
网页资源过多、接受数据时间长、加载某个资源慢。
DNS解析速度。
http请求次数太多。

TCP、UDP

TCP连接

TCP 连接的建立都是采用客户服务器方式。

  • TCP 把连接作为最基本的抽象。

  • 每一条 TCP 连接有两个端点。

  • TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字(socket)或插口。

  • 端口号拼接到(contatenated with) IP 地址即构成了套接字。
    套接字 socket = (IP地址: 端口号)

  • 每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
    TCP 连接 ::= {socket1, socket2} = {(IP1: port1), (IP2: port2)}

TCP和UDP的区别

传输控制协议TCP、用户数据协议UDP

  1. tcp提供面向对象的连接,通信前需要建立三次握手机制的连接,udp提供无连接的传输(体现在发送者和接收者不需要握手,且每一个udp处理数据段都是独立的,即多种通信方式),传输前不用建立连接(可以减少延迟)。

  2. Tcp提供全双工通信(同一个连接上的双向数据流,可以同时发送和接收),只能一对一连接(一个发送方,一个接收方),udp可以一对一、一对多、多对一、多对多方式数据通信。

  3. Tcp提供可靠交付的通信,udp尽最大努力交付(不保证可靠交付)。

  4. Tcp面向字节流(把数据看成仅仅是一连串无结构的字节流,流是指流入或流出进程的字节序列。TCP根据当前窗口大小和网络拥塞程度决定一个报文应包含多少个字节,数据太长可以划短一些再发送,也可等待积累足够的字节后再构成报文段发送出去),udp面向报文(报文长度由应用程序给出,不做拆分也不合并,将收到的报文,添加首部后直接向下交付给IP层)。

  5. Tcp有流量控制和拥塞控制,udp没有(可以尽可能快的速度传输),首部开销小(很小的数据段首部)。

    流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收
    
  6. 传输丢包时,tcp会将后续的包缓存,等前面的包重传并接收后,再继续发送,延时会越大;udp考虑时间限制,会采用自定义重传机制。
    TCP使用场景:当对网络通讯质量有要求的时候 。HTTP协议,QQ传文件,邮件,登陆
    UDP使用场景:当对网络通讯质量要求不高的时候。 DNS协议(因为用UDP快),看视频、发语音、QQ聊天、多媒体教室屏幕广播

TCP三次握手

在这里插入图片描述
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,请求连接,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态(收到SYN报文);
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

TCP四次挥手

在这里插入图片描述
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。四次挥手过程:
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。此时客户端进入FIN_WAIT_1等待对方确认状态
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。(发送确认收到关闭请求),此时服务端进入close_wait半连接状态,等待关闭,客户端进入FIN_WAIT_2等待终止状态。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A,进入last_ack最后确认状态。
(4)客户端A发回ACK确认关闭报文,并将确认序号设置为收到序号加1。此时客户端进入TIME_WAIT状态,服务端进入closed状态,若客户端在2MSL(最长报文段寿命)内没有再收到来自服务端的FIN报文后,就进入closed状态。
注:TIME_WAIT状态是为了当服务器在处于last_ack最后确认状态下未收到来自客户端的ACK确认关闭报文而重发FIN关闭报文时,客户端可以重发可能丢失的ACK报文。

为什么TCP连接需要三次握手,两次不可以么,为什么?四次或者五次不可以吗?

为了防止已失效的链接请求报文突然又传送到了服务端,因而产生错误。客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留了,以致延误到链接释放以后的某个时间才到达Server。这时,Server误以为这是Client发出的一个新的链接请求,于是就向客户端发送确认数据包,同意建立链接。若不采用“三次握手”,那么只要Server发出确认数据包,新的链接就建立了。由于client此时并未发出建立链接的请求,所以其不会理睬Server的确认,也不与Server通信;而这时Server一直在等待Client的请求,这样Server就白白浪费了一定的资源。若采用“三次握手”,在这种情况下,由于Server端没有收到来自客户端的确认,则就会知道Client并没有要求建立请求,就不会建立连接。如果是两次,可能服务器发的信息,客户端接收不到,服务器也不能确定自己发的信息客户端是否能收到。
若是四次五次就会造成浪费,因为经过三次,通信双方就已经确定了各自都可以发送消息,且能收到对方的消息。

为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。2MSL是两倍的MSL(Maximum Segment Lifetime),MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

发送FIN终止字段表明没有数据可发了,那为什么还要发送指示数据的序号字段呢?

因为当客户机/服务器发送FIN字段后,它还希望收到服务器/客户端发来的确认信息,那么如何指定接收的那条确认信息的序号呢?就得先在发送FIN时就初始化本数据段的序号,而这个数据段里面的数据部分是特殊的一字节。

如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

为什么tcp可靠,哪些方法保证tcp的可靠

  1. 对失序数据包重排序:TCP 给发送的每⼀个包进⾏编号,TCP报文段的到达也可能会失序,接收方将对失序数据进行重新排序,然后才交给应用层;
  2. 数据包校验: 目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;
  3. 丢弃重复数据:TCP 的接收端会丢弃重复的数据。
  4. 流量控制: TCP 连接的每⼀⽅都有固定⼤⼩的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收⽅来不及处理发送⽅的数据,能提示发送⽅降低发送的速率,防⽌包丢失。TCP 使⽤的流量控制协议是可变⼤⼩的滑动窗⼝协议。 (TCP 利⽤滑动窗⼝实现流量控制:流量控制是为了控制发送⽅发送速率,保证接收⽅来得及接收。 接收⽅发送的确认报⽂中的窗⼝字段可以⽤来控制发送⽅窗⼝⼤⼩,从⽽影响发送⽅的发送速率。将窗⼝字段设置为 0,则发送⽅不能发送数据。)
  5. 拥塞控制: 当⽹络拥塞时,减少数据的发送。
  6. 确认应答机制:每发完⼀个分组就停⽌发送,等待对⽅确认,在收到确认后再发下⼀个分组。
  7. 超时重传: 当 TCP 发出⼀个段后,它启动⼀个定时器,等待⽬的端确认收到这个报⽂段。如果不能及时收到⼀个确认,将重发这个报⽂段。

自动重传请求ARQ实现可靠传输,包含了确认机制和超时自动重传。

TCP拥塞控制

转载原文链接:https://blog.csdn.net/yy2017220302028/article/details/104631286

拥塞控制 ≠ 流量控制
什么是流量控制?
TCP连接的接收方有一个接收缓冲区。应用程序可能从这个缓冲区读出数据很慢,因此需要保证发送速率和接收应用程序的提取速率匹配,发送方不能发送的太多太快,让接收缓冲区溢出。流量控制使用接收窗口(即接收缓冲区的剩余空间),接收方在报文段中宣告接收窗口的剩余空间,发送方需要限制没有被确认的数据不能超过接收窗口,从而保证接收缓冲区不溢出。
滑动窗口:接收数据端使用的窗口大小,用来告知发送端它的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制的目的。(由于TCP是全双工链接,因此发送方和接收方都有滑动窗口)

什么是拥塞控制?
从信息角度看,拥塞是:“太多源主机发送太多的数据,速度太快以至于网络来不及处理”。表现为:丢失分组 (路由器的缓冲区溢出)、长延迟 (在路由器的缓冲区排队)
拥塞窗口:发送数据端使用的窗口大小,拥塞窗口不代表缓存,拥塞窗口指某一源端数据流在一个RTT内可以最多发送的数据包数。

拥塞控制是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,和流量控制不同,流量控制指点对点通信量的控制。

TCP的四种拥塞控制算法:

I. 慢启动:
当主机开始发送数据时,如果立即将大量数据字节注入到网络,那么就有可能因为不清楚当前网络的负荷情况而引起网络阻塞。所以,最好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚发送报文段时,先把拥塞窗口cwnd设置为 1 个最大报文段MSS的数值。而在每收到一个新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值(1个确认报文对应2个MSS,即:呈指数增长)。用这样的方法逐步增大发送方的拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。

注意:慢开始当中的“慢”并不是指cwnd的增长速率慢,而是在TCP开始发送报文段时先设置cwnd = 1,使得发送方在开始时只发送一个报文段。

II. 拥塞避免:
让拥塞窗口cwnd缓慢的增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd + 1,而不是加倍,即:呈线性增长。这样拥塞窗口cwnd按线性规律缓慢的增长,比慢开始算法的拥塞窗口增长速率缓慢的多。

III. 快重传:
所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认;即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传。对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞(进而降低拥塞窗口cwnd为1)。使用快重传可以使整个网络的吞吐量提高约20%。

IV. 快恢复:
发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法;发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;开始执行拥塞避免算法。(阈值ssthresh的作用是:当下一次出现超时,慢启动到阈值后开始启动拥塞避免。)

也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些, 即等于新的ssthresh + 3。因为:既然发送方收到3个重复的确认,就表明有3个数据报文段已经离开了网络;这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中;可见现在网络中不是堆积了报文段而是减少了3个报文段。因此可以适当把拥塞窗口扩大些。

TCP和UDP用一个端口发送信息是否冲突 ?

不会冲突。因为在IP数据报首部有“高层”字段,它定义了传输层的协议。而客户机和服务器会根据IP数据报和TCP/UDP报文段中提供的:传输协议、源IP地址、目的IP地址、源端口、目的端口来判别接收者。
(PS:什么是端口?端口就是一个中间层,光有域名并不知道需要服务端哪个进程去处理,端口就相当于进程id 结局了客户端强依赖服务端,给定端口后,服务端到端口层监听绑定对应进程去处理。深入理解什么是端口(port) - 知乎 (zhihu.com))

DDos (分布式拒绝服务)攻击

三次连接时,最后一次确认数据包没有发送,导致服务器一直等待来自客户端的确认。(即占用但不做处理,比如饭店全部坐满人了,但是不点菜吃饭)

http请求报文

请求行+请求头+请求主体
1、请求行:请求方法 URL http协议类型及版本号(HTTP1.1 或HTTP1.0)
注:请求方法共8种
GET:请求获取Request——URL所标识的资源
POST:在Request——URL所标识的资源后附加资源
HEAD:请求获取由Request——URL所标识的资源的响应消息报头
PUT:请求服务器存储一个资源,由Request——URL作为其标识
DELETE:请求服务器删除由Request——URL所标识的资源
TRACE:请求服务器回送收到的请求信息(用于测试和诊断)
CONNECT:保留
OPTIONS:请求查询服务器性能
2、请求头:头部字段:值(希望对请求文件的操作信息)
主要字段有
Host:接受请求的服务器地址,可以是IP或者是域名
User-Agent:发送请求的应用名称
Connection:指定与连接相关的属性,例如(Keep_Alive,长连接)
Accept-Charset:通知服务器端可以发送的编码格式
Accept-Encoding:通知服务器端可以发送的数据压缩格式
Accept-Language:通知服务器端可以发送的语言
Referer: 让服务器判断当前正在访问的URL是从哪个页面URL跳转过来的, 如果不是在本域中, 则认为是非法访问资源, 用来防止盗链
3、请求主体:包含数据的主体部分(传递给后台的参数)

http响应报文

状态行+响应头+响应体(响应正文)
1、状态行:协议类型及版本号 状态码 状态码描述
状态码:5大类
100~199表示请求已收到继续处理
200~299表示成功
300~399表示资源重定向
400~499表示客户端请求出错
500~599表示服务器端出错
如:100继续
200:响应成功
301资源被永久转移到其它url 302:跳转,重定向到临时的url 304:请求资源未更新
400:客户端有语法错误,非法请求 401:未授权 403:服务器拒绝提供服务 404:请求资源不存在,没有找到,页面不存在
500:服务器内部错误 501:服务器无法识别 502:错误网关 503服务出错,服务器超载或停机维护 504:网关超时
2、响应头:头部字段:值
主要字段有:
Server:服务器应用软件的名称和版本
Content-Type:响应正文的类型
Content-Length:响应正文的长度
Content-Charset:响应正文所使用的编码
Content-Encoding:响应正文使用的数据压缩格式
Content-Language:响应正文使用的语言
Location:重定向,让客户端跳转到新的URL进行访问
Last-Modified:服务器发来的当前资源的最后一次修改时间,如果下一次请求时,服务器上当前资源的修改时间比这个大(更晚),就返回新的资源内容。
3、响应正文:客户端所请求的文件

Get和Post区别

GET:从指定的资源请求数据。POST:向指定的资源提交要被处理的数据。
后退按钮/刷新:get无害,post重新发送请求
缓存:get会被浏览器主动缓存,post不能(只能手动设置)
书签:get产生的url可以被收藏为书签,post不行
编码:get只能url编码,post支持多种
参数:get参数长度有限且只接收ASCII字符,post没有限制
历史性:get请求能保存在历史记录中,post不会
可见性:get参数通过url传递,可见;post在request body中,不可见
安全性:post比get更安全,因为get请求参数暴露在url中

http和https的区别

1、费用不一样:https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、传输协议不一样:http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、连接方式不一样:http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、安全性不一样:http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

PS:其实安全性中,get和post是一样的,因为post请求参数放body中,按F12就会直接暴露,而且若两者传输数据时都没有加密的话,使用抓包工具都可以获取数据,重大区别:GET产生一个TCP数据包;POST产生两个TCP数据包。(对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

无状态:数据包的发送,传输和接收都是相互独立的(无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。)
无连接:指通信双方都不能长久的维持对方的任何信息(无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。)

http为什么是无状态的?

无状态是指协议对于事务处理没有记忆能力,因为http协议目的在于支持超文本的传输,更加广义一点就是支持资源的传输,那么在客户端浏览器向服务器发送请求,继而服务器将相应的资源发回客户这样一个过程中,无论对于客户端还是服务器,都没有必要记录这个过程,因为每一次请求和响应都是相对独立的,一般而言,一个url对应唯一的超文本,正因为这样的唯一性,所以http协议被设计为无状态的链接协议符合他本身的需求。

注:http运行于tcp之上,https运行于ssl之上,ssl运行于tcp之上。HTTPS协议并非是应用层的一种新的协议,只是在HTTP通信接口部分用SSL协议代替而已。原本HTTP与TCP之间直接进行通信,但加入SSL后就先是HTTP与SSL进行通信,再是SSL与TCP进行通信。

SSL协议

SSL:位于TCP/IP协议与各种应用层协议之间。
SSL协议基本内容:
1、SSL记录协议:建立在可靠传输协议的基础之上(如TCP),为高层协议提供数据封装、压缩、加密等基本功能。
2、SSL握手协议:建立在SSL记录协议之上,在数据传输之前,双方进行身份验证、协商加密算法、交换加密密钥等。
SSL协议原理:公钥加密法,结合非对称加密和对称加密算法。
(1)客户端向服务端索要公钥,服务端发送一个证数,包含公钥。
(2)通过证书进行身份验证,合法后,生成一个随机数,并用公钥加密,发送给服务端
(3)服务端用自己的私钥进行解密,并告诉客户端可以解密成功。
(4)之后客户端和服务端通过该随机数进行加密,解密进行数据传输。
PS:通过公钥和私钥确认身份,加密解密随机数 是非对称加密。通过随机数进行数据传输是对称加密。

https加密原理:https://coffee.pmcaff.com/article/13736428_j
https://www.jianshu.com/p/f0b64eaec7f0

第一,为什么使用HTTPS之后,通信就安全了?
第二,HTTPS实现通信安全的原理是什么?
第三,使用了HTTPS就绝对安全了吗?

http请求响应中断的原因

网断了、网络阻塞、请求超时、浏览器出问题、服务器出问题

打开一个网页,整个过程会使用哪些协议

整个过程大致如下:

  1. 查找域名得IP地址:DNS解析
  2. TCP连接
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报⽂
  5. 浏览器解析渲染⻚⾯
  6. 连接结束
    涉及的协议有:DNS(获取域名对应IP),TCP(与服务器建立连接),IP(建立TCP协议时,需要发送数据,发送数据在网络层使用IP协议),OPSF(IP数据包在路由器之间,路由器选择OPSF协议),ARP(路由器与服务器通信时,需要将IP地址转换为MAC物理地址),HTTP(在TCP建立完成后,使用HTTP访问网页)

在浏览器中输入一个网址它的运行过程是怎样的?

1、查询DNS,获取域名对应的IP。
( 浏览器会从主机的Hosts文件中查看是否有该域名和IP地址的映射;如果Hosts文件没有,浏览器会查看自己的缓存;当上面两个方法都行不通时,只能去请求DNS服务器来获取IP地址;)
2、得到目标服务器的IP地址及端口号(http 80端口,https 443端口),会调用系统库函数socket,请求一个TCP流套接字。客户端向服务器发送HTTP请求报文:
(1)应用层:客户端发送HTTP请求报文。
(2)传输层:(加入源端口、目的端口)建立连接。实际发送数据之前,三次握手客户端和服务器建立起一个TCP连接。
(3)网络层:(加入IP头)路由寻址。
(4)数据链路层:(加入frame头)传输数据。
(5)物理层:物理传输bit。
3、服务器端经过物理层→数据链路层→网络层→传输层→应用层,解析请求报文,发送HTTP响应报文。
4、关闭连接,TCP四次挥手。
5、客户端解析HTTP响应报文,浏览器开始显示HTML
注:html页面渲染过程:
1)构建DOM树(从上到下解析html文件,生成dom树,即构建结点,把所有结点构建出来)
2)构建CSSOM树:解析css构建cssom树
3)构建渲染树:使用CSSOOM+DOM构建渲染树
4)布局:根据渲染树,浏览器开始计算各个节点的样式及位置
5)绘制:遍历渲染树,在页面上绘制各个节点
6)重排:js改变样式或添加节点,渲染树重新计算
7)重绘

DNS的查找过程(应用层)

DNS :计算机域名。用于将用户提供的主机名解析为ip地址 (根据域名查找对应的ip地址)。

名字到 IP 地址的解析是由若干个域名服务器程序完成的。域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器。
任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。

域名采用层次树状结构的命名方法:
域名的结构由标号序列组成,各标号之间用点隔开:
… . 三级域名 . 二级域名 . 顶级域名
各标号分别代表不同级别的域名。

  • 域名只是个逻辑概念,并不代表计算机所在的物理地点。
  • 变长的域名和使用有助记忆的字符串,是为了便于人来使用。而 IP 地址是定长的 32 位二进制数字则非常便于机器进行处理。
  • 域名中的“点”和点分十进制 IP 地址中的“点”并无一一对应的关系。点分十进制 IP 地址中一定是包含三个“点”,但每一个域名中“点”的数目则不一定正好是三个。

四种域名服务器:

  • 根域名服务器:
    (1) 根域名服务器是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的 域名和 IP 地址。
    (2)不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析, 就首先求助于根域名服务器。
    (3) 因特网上有13个根DNS服务器,其中大部分分布在美洲。
  • 顶级域名服务器:
    (1)负责顶级域名edu, gov, org, com等和所有国家的顶级域名 uk, fr, cn, jp(edu教育机构域名,gov政府部门域名,org非盈利性的组织,com企业域名,uk英国,fr法国,cn中国,jp日本)
    (2)这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。
    (3)当收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找 的域名服务器的 IP 地址)。
  • 权限域名服务器: 在因特网上具有公共可访问主机(如Web服务器和邮件服务器)的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。组织机构的权限DNS服务器负责保存这些DNS记录。多数大学和公司维护它们的基本权限DNS服务器。(当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的 DNS 客户,下一步应当找哪一个权限域名服务器。)
  • 本地域名服务器: 严格来说并不属于DNS服务器的层次结构,它起到一个代理的作用,将主机提交的请求转发到层次结构中。

主机向本地域名服务器的查询一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。
本地域名服务器向根域名服务器的查询通常是采用迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。
在这里插入图片描述

ARP协议

地址解析协议,用于实现IP地址到mac地址的映射,即询问目标IP对应的mac地址(物理地址)。工作过程如下:
1.查源主机的缓存里的ARP列表中是否有这个IP地址及其mac地址的对应
2.若有,则发送数据。若没有,则向本网段所有主机发送广播,发送自己的IP地址和mac地址,询问谁是这个IP,其mac地址是什么
4.其它主机对照查看,是的话从数据包中提取源主机的IP地址和mac地址写入到自己的ARP列表中,并将自己的mac地址写入响应包,回复源主机。
5.源主机发送数据
注:在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。)
注:为什么要用ARP地址解析协议:
因为osi把网络分为7层,每层之间不直接交流(除非特定接口),IP是第3层网络层,mac工作在第2层数据链路层。协议发包时,需封装IP和mac地址,但只知道IP,又不能跨层找,所以用ARP协议帮助获取目的节点的mac地址.(ARP协议是第三层协议,工作在第二层)

socket编程和http协议

由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

socket用于描述IP地址和端口,是一个通信链的句柄
socket客户端的端口是不固定的,但服务端的端口是固定的。

http缓存问题,缓存寿命,以及怎么判断文件在服务器是否更改的

缓存是一种保存资源副本并在下次请求中直接使用该副本的技术,缓存能够节约网络资源,提升页面响应速度。常见的缓存类型分为共享缓存和私有缓存。

  • 私有缓存:私有缓存只能用于单独用户,常见的浏览器缓存便是私有缓存。私有缓存能够存储用户通过http下载过的文档,从而在用户再次访问时直接提供给用户,而不用向服务器发送请求。
  • 共享缓存:共享缓存能够被多个用户使用,常用的web代理中便使用的共享缓存
    缓存寿命:缓存寿命的计算的依据依次是:
    请求头中的Cache-Control: max-age=N。相应的缓存寿命即为 N,从设置开始,N秒之后过期。
    Expires属性,Expires属性的值为过期的时间点,在这个时间点后,该缓存被认为过期。
    Last-Modified信息。缓存的寿命为头里面 Date表示的时间点减去 Last-Modified的时间点的结果乘以 10%。
    判断文件是否更改可以看文件时间戳

搜索敏感词汇时,页面被重置的原理

根据TCP协议的规定,用户和服务器建立连接需要三次握手:第一次握手用户向服务器发送SYN数据包发出请求(SYN, x:0),第二次握手服务器向用户发送SYN/ACK数据包发出回应(SYN/ACK, y:x+1),第三次握手用户向服务器发送ACK数据包发出确认(ACK, x+1:y+1),至此一个TCP连接建立成功。其中x为用户向服务器发送的序列号,y为服务器向用户发送的序列号。
关键字检测,针对明文或者base64等弱加密通讯内容,与准备好的敏感词库进行匹配,当发现敏感词时,将服务器发回的SYN/ACK包改成SYN/ACK, Y:0,这代表TCP连接被重置,用户便主动放弃了连接,提示连接失败。让用户误认为服务器拒绝连接,而主动放弃继续与服务器连接,自动阻断记录含有敏感词的网页。

Session和cookie

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

  • cookie数据存放在客户的浏览器上,session数据放在服务器上。
  • Cookie不是很安全,别人可以分析存放在本低的cookie并进行cookie欺骗,考虑到安全,应使用session。
  • Session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器的性能,考虑到减轻服务器性能方面,应使用cookie。
  • 单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie
  • 建议将登录等重要信息存放为session,其它信息如果需要保留,可以放在cookie中。
    (开发人员可以调用request对象的getsession方法得到session对象)

172.16.100.5/255.255.255.252 的网络地址和主机号是多少?
IP地址172.16.100.5与子网掩码255.255.255.252写成32位的二进制,做“与”运算,得到网络地址。
将子网掩码取反之后,与IP地址做“与”运算,得到主机号。
(根据子网掩码携程11111111.11111111.11111111.11111100,网络号前3个字节,主机号最后一个字节,最后一个字节中前6位也属于网络地址,最后两位是主机地址。)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值