tcp/ip网络基础

1、传输层

1、OSI七层模型和TCP/IP四层模型 五层协议

1、五层协议
  • 应用层
    • 提供用户接口,特指能够发起网络流量的程序数据单位为报文,如客户端:QQ、浏览器等,服务端:web服务器,邮件服务器等
  • 传输层
    • 提供进程间的通用数据传输服务,由于应用层的协议很多,定义通用传输层协议就可以支持不断增多的应用层协议
    • 传输层包括两种协议
      • 传输控制协议TCP,提供面向连接,可靠的数据传输服务,数据单位为报文段
      • 用户数据报协议UDP,提供无连接,尽最大努力的数据传输服务,数据单位为用户数据报
      • TCP主要提供完整性服务,UDP主要提供及时性服务
  • 网络层
    • 为主机间提供数据传输服务,而传输层协议是为主机的进程提供服务,网络层把传输层传递下来的报文段或者用户数据报封装成分组(负责选择最佳路径,规划IP地址)
      • 路由器查看数据包目标IP地址,更具路由表为数据包选择路径。路由表中的类目可以由人工添加(静态路由)也可以动态生成(动态路由)
  • 数据链路层
    • 不同的网络类型,发送数据的机制不同。数据链路层就是将数据包封装成能在不同网络传输的帧,能进行差错检验,但不纠错,监测出错误丢掉该帧
      • 帧的开始和结束,透明传输、差错校验
  • 物理层:解决如何在连接各种传输媒体上的传输数据比特流,而不是指具体的传输媒体。物理场的主要任务描述为:确定与传输媒体的接口的一些特性
    • 机械特性:接口形状、大小、引线数目
    • 电气特性:规定电压范围
    • 功能特性:例如固定-5v为0,+5v为1
    • 过程特性(规程特性):规定建立连接时各个相关部件的工作步骤
2、OSI七层模型中表示层和会话层功能
  • 表示层:数据压缩、加密以及数据描述。使得应用程序不必担心在各台主机中表示/存储的内部格式不同的问题(比如乱码)
  • 会话层:建立会话,比如session认证、断点续传等。通信的应用程序之间建立、维护和释放面向用户的连接。通信的应用程序之间建立会话,需要传输层建立1个或者多个连接

五层协议没有会话层和表示层,而是将这些功能留给开发者处理

3、数据在各层之间的传递过程
  • 在向下的过程中,需要添加下层协议所需要的首部或者尾部,而在向上的过程中不断拆开首部或尾部
    • 路由器只有下面三层协议,因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要传输层和应用层
    • 交换机只有下面两层协议
4、TCP/IP四层模型

只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层

2、TCP报头格式和UDP报头格式

网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。传输层提供了进程之间通信的逻辑,传输层向高层用户屏蔽了下面网络层的核心细节,使整个程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道

1、UDP和TCP的特点
  • 用户传输报协议UDP,是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不拆分也不合并,只是添加在UDP首部),支持一对一,一对多,多对一和多对多的交互通信,如实时通信
  • 传输控制协议TCP,面向连接,提供可靠交付。有流量控制、拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条TCP连接只能是点对点的
2、UDP首部格式
  • 首部字段只有8个字节,包括源端口、目的端口、长度、校验和。12字节的伪首部是为了计算校验和临时添加的
3、TCP首部格式
  • 序号seq:用于对字节流进行编号,如序号为101,表示第一个字节的编号为101,若携带的数据长度为100字节,那末下一个报文段的序号应为201。[101,200]为序号101的数据长度,下一个则为201
  • 确认号ack:期望收到的下一个报文段的序号。如B正确收到A发送来的一个报文段,序号为201,携带的数据长度为200字节,因此B期望下一个报文段的序号为401,B发送给A的确认报文段这讴歌的确认号就是401
  • 数据偏移:数据部分距离报文段起始处的偏移量,实际上指的是首部的长度
  • 确认ACK:当ACK=1时确认号字段有效,否则无效。TCP规定,在连接建立后所有传送的报文段都必须吧ACK设为1
  • 同步SYN:在连接建立时用来同步序号,当SYN=1时,ACK=0时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文段中SYN=1,ACK=1
  • 终止FIN:用来释放一个连接,当FIN=1时,表示此报文段的发送方的数据已发送完毕,并要求释放连接
  • 窗口:窗口值作为i接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的

3、TCP三次握手/四次挥手如何保证可靠传输

1、三次握手
  • 假设A为客户端,B为服务端
    • 首先B处于LISTEN状态,等待客户端的连接请求
    • A向B发送连接请求报文段SYN=1,ACK=0,选择一个初始的序号seq=x
    • B收到连接请求报文段,若同意连接,则向A发送连接确认报文段SYN=1,ACK=1,确认序号为x+1,同时也选择一个初始的序号为seq=y
    • A收到B的确认连接报文段后,向B发出确认,确认号为ack=y+1,序号为seq=x+1
    • A的TCP通知上层应用进程,连接已经建立
    • B收到A的确认后,连接建立
    • B的TCP收到主机A的确认后,也通知其上层应用进程,连接已建立
2、为什么需要三次握手,两次不可以吗,为啥?

为了防止已失效的连接请求报文段突然又传送到了服务端,占有服务器资源

  • 假设A发出的第一个连接请求报文段没有丢失,而是在某些网络节点长时间滞留,以至于延误到连接是释放以后的某个时间才到B.本来这是一个失效的报文段。但是B收到此失效的连接请求报文段后,就误认为是A发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了
  • 由于A并没有发出新的连接请求,因此不会理睬B的确认,也不会向B发送数据。但B却以为新的传输连接已经建立了,并一直等待A发送数据,这样就会浪费B的许多资源
  • 采用三次握手可以避免上述情况,在刚才情况下,A不会向B发出确认,B由于收不到确认,就会知道A并未要求建立连接
3、四次挥手
  • 数据传输结束后,通信的双方都可以释放连接,现在A的应用进程先向其TCP发出连接释放报文段,并停止再次发送数据,主动关闭TCP连接
    • A把连接释放报文段首部的FIN=1,其序号seq=u,等待B的确认
    • B发出确认,确认号为ack=u+1,而这个报文段自己的序号seq=v(TCP服务器进程通知高层应用进程)
    • 从A到B这个方向的连接就释放了,TCP连接处于半关闭状态。A不能向B发送数据,B若发送数据,A仍要接收
    • 当B不再需要连接时,发送连接释放请求报文段,FIN=1
    • A收到后发出确认,进入TIME_WAIT状态,等待2MSL时间后释放连接
    • B收到A的确认后释放连接
4、四次挥手的原因

客户端发送FIN连接释放报文后,服务器收到这个报文,进入CLOSED_WAIT状态,此状态是为了让服务端发送还未传送完毕的数据,传送完毕之后,服务器会发送GIN连接释放报文

5、TIME_WAIT

MSL(Maximum Segment Lifetime),报文最大生存时间,是任何报文在网络上存在的最长时间,超过这个时间将会被丢弃,2MSL = 2*2 = 4mins

  • 客户端收到服务端的FIN报文后进入此状态,此时并不是直接进入CLOSED状态,还需要等待一个时间计时器设置的时间2MSL,理由
    • 确保最后一个确认报文能够到达,若B没收到A发送来的确认报文,那么就会重新发送连接释放请求报文段,A等待一段时间就是为了处理这种情况的发生
    • 等待一段时间是为了让本连接持续时间内所产生的所有报文段都从网络上消失,使得下一个新的连接不会出现旧连接的请求报文段
6、如何保证可靠传输
  • 应用数据被分割成TCP认为最适合发送的数据块
  • 超时重传:当TCP发出一个段后,启动一个定时器,等待目的端确认收到这个报文段,若不能及时收到一个确认,将重发这个报文段
  • TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层
  • 校验和:TCP将保持它首部和数据的校验和。这是一个端到段的校验和,目的是检测数据在传输过程中的任何变化,若收到段的校验和有错,TCP将丢弃这个报文段和不确认收到这个报文段
  • TCP接收端会丢弃重复数据
  • 流量控制:TCP连接的每一房都有固定大小的缓冲空间。TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据,能提示发送发降低发送的速率,防止包丢失,TCP使用流量控制协议是可变大小的滑动窗口协议
  • 拥塞控制:当网络拥塞时,减少数据的发送
7、TCP连接状态
  • CLOSED:初始状态
  • LISTEN:服务器处于监听状态
  • SYN_SEND:客户端socket执行CONNECT连接,发送SYN包,进入此状态
  • SYN_RECV:服务端收到SYN包并发送服务端SYN包,进入此状态
  • ESTABLISH:表示连接建立。客户端发送最后一个ACK包进入此状态,服务端收到ACK包进入此状态
  • FIN_WAIT_1:终止连接的一方(通常是客户机),发送FIN报文之后进入,等待对方FIN
  • CLOSED_WAIT:接收到客户机FIN包之后等待关闭的阶段。在接收到对方的FIN包之后。自然是需要立即回复ACK包的,表示已经知道断开请求。但是本方是否立即断开连接取决于是否还有数据需要发送给客户端,若有,则在发送FIN包之前均为此状态
  • FIN_WAIT_2:此时是半连接状态,即有一方要求关闭连接,等待另一方关闭,客户端接收到服务器ACK包,但并没有立即接收到服务端的FIN包,进入此状态
  • LAST_ACK:服务端发动最后的FIN包,等待最后的客户端ACK响应,进入此状态
  • TIME_WAIT:客户端收到服务端的FIN包,并立即发出ACK包做最后的确认,在此之后的2MSL时间称之为此状态
8、TCP和HTTP

4、TCP连接中如果断电怎么办

  • TCP是一种有连接的协议,但这个连接并不是指有一条实际的电路,而是一种虚拟的电路。
    • TCP的建立连接和断开连接都是通过发送数据实现的。
    • TCP两端保存了一种数据状态,就代表这种连接,TCP两端之间的路由设备只是将数据发送到目的地,并不知道这些数据的含义,也没有在其中保存任何的状态信息,也就是说中间的路由设备没有什么连接的概念,只是将数据转发到目的地,只有数据的发送者和接收者两端真正的知道传输的数据代表着一条连接
  • 使用keep_live心跳

5、TCP和UDP区别

  • 区别
    • UDP是无连接的,即发送数据之前不需要建立连接
    • UDP使用尽最大努力交付,不保证可靠交付,不使用拥塞控制
    • UDP面向报文,适合多媒体通信
    • UDP支持一对一,一对多,多对一,多对多的交互通信
    • UDP的首部开销小,只有8个字节
    • TCP是面向连接的传输层协议
    • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
    • TCP提供可高交付的服务
    • TCP提供全双工通信
    • TCP面向字节流
    • TCP首部最少20字节

6、TCP滑动窗口

  • 窗口是缓存的一部分,用来暂时存放字节流,发送方和接收方各有一个窗口,接收方通过TCP报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其他信息设置自己的窗口大小
  • 发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。若发送窗口的左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口的左部字节已经发送确认并交付主机,就向右滑动窗口
  • 接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为{12,34,56},其中{12}按序到达,而{34,56}不是,因此只对12进行确认。发送方得到一个字节的确认之后,知道这个字节之前的所有字节都已被接收
  • 滑动窗口是为了实现流量控制,若对方数据方式过快,接收方来不及接收,接收方就需要告知对方,减慢数据的发送

7、TCP流量控制

  • 为了控制发送方发送的速率,保证接收方来得及接收
  • 接收方发送的确认报文中的窗口字段可以用来控制发送窗口大小,从而影响发送方的发送速率,将窗口字段设置为0则发送方不能发送数据

8、TCP拥塞处理(Congestion Handling)

  • 原理
    • 在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏——产生拥塞
    • 出现资源拥塞的条件,对资源需求的总和>可用资源
    • 若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将岁输入负荷的增大而下降
  • 若网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率
  • 控制拥塞的算法:慢开始、拥塞避免、快重传、快恢复
  • 发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口
1、慢开始与拥塞避免
  • 发送的最初执行慢开始,令cwnd=1,发送方只能发送一个报文段;当收到确认后,将cwnd加倍,因此之后发送方能够发送的报文段数量为:2、4、8…
  • 注意到慢开始的每个轮次都将cwnd翻倍这样会让cwnd的增长速度非常快,从而使发送方发送的速度增长过快,拥塞的可能性也就越高
  • 设置一个慢启动阈值ssthresh,当cwnd>=ssthresh时,进入拥塞避免,每个轮次将cwnd+1,若出现超时,将ssthresh = cwnd/2,然后重新执行慢开始
2、快重传与快恢复
  • 在接收方,要求每次接收到的报文段都应该对最后一个已收到的有序报文段进行确认
  • 在发送方,若收到三个重复确认,就可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段
  • 在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复,令 ssthresh = cwnd/2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。
3、发送窗口的上限值
  • 应当取为接收方窗口rwnd和拥塞窗口cwnd这两个变量中较小的一个
    • 当rwnd<cwnd时,是接收方的接收能力限制发送窗口的最大值
    • 当rwnd>cwnd时,是网络的拥塞限制发送窗口的最大值

9、如何区分流量控制与拥塞控制

  • 拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷
  • 拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路有趣,以及降低网络传输性能有关的所有因素
  • 流量控制往往指在给定的发送端和接收端之间点对点通信量的控制
  • 流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收
  • 流量控制属于通信双方协商;拥塞控制涉及通信链路全局
  • 流量控制需要通信双方各自维护一个发送窗、一个接收窗,对任意一方,接收窗的大小由自身决定,发送窗的大小由接收方响应的TCP报文段中窗口值确定
  • 拥塞控制的拥塞窗口大小变化由试探性发送一定数据量数据探查网络状况后而自适应调整
  • 实际最终发送窗口 = min{流控发送窗口。拥塞窗口}

10、RTO、RTT、停止等待和超时重传

  • 超时重传:发送端发送报文后若长时间未收到确认的报文则需要重发该报文,可能的情况
    • 发送的数据没能到达接收端,所以未响应
    • 接收端接收到数据,但是ACK报文在返回过程中丢失
    • 接收端拒绝或者丢弃数据
  • 停止等待:每发送完一个分组就停止发送,等待对方确认后在发送下一个分组
  • RTO:从上一次发送数据,因为长期未收到ACK响应,到下一次重发之间的时间,就是重传间隔
    • 通常每次重传RTO是前一次重传间隔的两倍,计量单位通常是RTT
    • 设置过大或过小都会造成不利影响
      • 设长了,重发就慢,没有效率,性能差
      • 设短了,重发就快,会增加网络拥塞,导致更多的超时,将导致更多的重发
  • RTT:数据从发送到接收到对方响应之间的时间间隔,即数据报在网络中一个往返用时,大小不稳定

11、从输入网址到获得页面的网络请求过程

  • 查询DNS
    • 浏览器搜索自己的DNS缓存
    • 搜索操作系统的DNS缓存,本地host文件查询
    • 若DNS服务器和主机在一个子网内,系统会按照下面的ARP过程对DNS服务器进行ARP查询
    • 若DNS服务器和主机不再一个子网内,系统会按照下面的ARP过程对默认网关进行查询
  • 浏览器获得域名对应的IP地址后,发起http三次握手
  • TCP/IP连接建立后,浏览器就可以向服务器发送http请求
  • TLS握手
    • 客户端发送一个 ClientHello 消息到服务器端,消息中同时包含了它的 Transport Layer Security (TLS) 版本,可用的加密算法和压缩算法.
    • 服务器端向客户端返回一个 ServerHello 消息,消息中包含了服务器端的TLS版本,服务器所选择的加密和压缩算法,以及数字证书认证机构.(Certificate Authority,缩写 CA)签发的服务器公开证书,证书中包含了公钥。客户端会使用这个公钥加密接下来的握手过程,直到协商生成一个新的对称密钥.
    • 客户端根据自己的信任CA列表,验证服务器端的证书是否可信。如果认为可信,客户端会生成一串伪随机数,使用服务器的公钥加密它。这串随机数会被用于生成新的对称密钥.
    • 服务器端使用自己的私钥解密上面提到的随机数,然后使用这串随机数生成自己的对称主密钥.
    • 客户端发送一个 Finished 消息给服务器端,使用对称密钥加密这次通讯的一个散列值.
    • 服务器端生成自己的 hash 值,然后解密客户端发送来的信息,检查这两个值是否对应。如果对应,就向客户端发送一个 Finished 消息,也使用协商好的对称密钥加密.
    • 从现在开始,接下来整个 TLS 会话都使用对称秘钥进行加密,传输应用层(HTTP)内容.
  • http服务器处理请求
    • HTTPD(HTTP Daemon)在服务器端处理请求/响应。最常见的 HTTPD 有 Linux 上常用的 Apache 和 nginx,以及 Windows 上的 IIS。
  • 浏览器接收这个请求,根据路径参数,经过后端的一些处理生成html页面代码返回给浏览器
  • 浏览器拿到完整的html代码开始解析和渲染
  • 浏览器根据拿到的资源对页面进行渲染,最终呈现一个完整的页面

2、应用层

1、URL、URI、URN的区别

  • URI:统一资源标识符
  • URL:统一资源定位符
  • URN:统一资源名称

2、HTTP的请求和响应报文

1、请求报文
2、响应报文

3、HTTP状态

状态码类别原因
1xxinformational(信息性状态码)接收的请求正在处理
2xxsuccess(成功)请求正常处理完毕
3xxredirection(重定向)需要进行附加操作以完成请求
4xxclient error(客户端错误)服务器无法处理请求
5xxserver error(服务端错误)服务器处理请求出错
1、1xx信息
  • 100 continue:表示到目前为止,客户端可以继续发送请求或者忽略这个响应
2、2xx成功
  • 200 ok
  • 204 no content:请求已成功处理,但返回的响应报文不包含实体的主体部分,在只需要从客户端往服务器发送数据,而不需要返回数据时使用
  • 206 partial content:客户端进行了范围请求。响应体包含由content-range指定范围的实体内容
3、3xx重定向
  • 301 move permanently:永久重定向
  • 302 found:临时重定向
  • 303 see other:和302类似,但客户端必须采用get方法
  • 307 temporay redirect:临时重定向,不需要将post改为get请求
  • 304 not modified:若请求首部包含一些条件,若不满足条件,服务器会返回304
4、4xx客户端错误
  • 400 bad request:请求报文中存在语法错误
  • 401 unauthorized:发送的请求需要有认证信息,若之前请求过,表示认证失败
  • 403 forbidden:请求被拒绝
  • 404 not found:资源不存在
5、5xx服务端错误
  • 500 internal server error:服务器正在执行请求时发生错误
  • 502 bad gateway:代理或网关在处理请求时出错
  • 503 server unavailable:服务器暂时处于超负载或正在进行停机维护,无法处理请求
  • 504 gateway timeout:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上有服务器或辅助服务器收到响应

4、HTTP方法

1、get
  • 获取资源
2、post
  • 传输实体主体
  • 主要用于传输数据
3、put
  • 上传文件,由于自身不带验证机制,任何人都可以上传文件,不建议使用
4、delete
  • 删除文件
5、head
  • 获取报文首部,不返回报文实体主体部分
  • 用于确认URL的有效性记忆资源更新的日期时间等
6、patch
  • 对资源进行部分修改,允许部分修改
7、options
  • 查询指定URL支持的方法
8、connect
  • 要求在与代理服务器通信时建立隧道
9、trace
  • 追踪路径,服务器会将通信路径返回给客户端

5、get和post的区别

  • get被强制服务器支持,用于信息获取
  • 浏览器对URL的长度有限制,所以get请求不能代替post发送大量数据
  • get发送数据量小(不超过2k),请求不安全,幂等的
    • 幂等的意味对同一URL的多个请求应该返回同样的结果
  • post请求不能被缓存、相对于get是安全的,用于修改服务器上的资源的请求
  • 发送包含未知字符的用户输入时,post比get更高效

6、如何理解http协议是无状态的

  • 协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。打开一个服务器上的网页和上一次打开这个服务器上的网页之间是没有任何联系的
  • 缺少状态意味着若后续处理需要前面的信息,则必须重传,可能导致每次连接传送的数据量增大。在服务器不需要先前信息时它的应答就快

7、长连接和短链接

  • 短连接:客户端和服务端每进行一次http操作就会建立一次连接,任务结束就中断连接
  • 长连接:保持连接的特性
  • 在使用长连接的情况下,当一个网页打开完成后,和护短和服务器之间用于传输http数据的tcp连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。keep-alive不会保持永久连接,他有一个保持时间,可以在不同的服务器软件中设定。实现长连接需要客户端和服务端都支持长连接

8、cookie

是服务器发送到用户浏览器并保存在本地的一小块数据,他会在浏览器下次向同一服务器在发起请求时被携带并发送到服务器上,用于告知服务端两个请求是否来自同一个浏览器,并保持用户的登录状态

1、用途
  • 会话状态管理(用户登录状态、购物车等)
  • 个性化设置
  • 浏览器行为跟踪
2、创建过程
  • 服务器发送的响应报文包含set-cookie首部字段,客户端得到响应报文后将cookie内容保存到浏览器
  • 客户端之后对同一个服务器发送请求时,会从浏览器中读出cookie信息通过cookie请求首部字段发送给服务器
3、分类
  • 会话期cookie:浏览器关闭之后自动删除,也就是仅在会话期内有效
  • 持久性cookie,指定一个特定的过期时间和有效期之后就成为持久性的cookie
4、secure和httponly
  • 标记为secure的cookie只应通过被https加密过的请求发送给服务端,但即使设置了secure标记,敏感信息也不应通过cookie传输,因为其不安全
  • 编辑为httponly的cookie不能被javascript脚本调用
5、作用域
  • Domain 标识指定了哪些主机可以接受 Cookie。如果不指定,默认为当前文档的主机(不包含子域名)。如果指定了 Domain,则一般包含子域名

  • Path 标识指定了主机下的哪些路径可以接受 Cookie(该 URL 路径必须存在于请求 URL 中)。以字符 %x2F (“/“) 作为路径分隔符,子路径也会被匹配

9、session

  • session可以存储在服务器上的文件、数据库或者内存中

10、浏览器禁用cookie

无法使用cookie保存用户信息,只能通过session,不能将session id放到cookie中,而是使用URL重写技术,将session id作为URL参数进行传递

11、cookie与session的选择

  • cookie只能存储ascii码字符串,session可以存储任意类型数据
  • cookie只能存储在浏览器,容易被恶意查看
  • 对于大型网站,若用户的所有信息都存储在session中,开销将会非常大,不建议将用户信息都存储到session中

12、https的安全性

1、对称密钥加密
  • 加密和解密使用同一密钥
    • 优点:运算速度快
    • 缺点:无法安全地将密钥传输给通信方
2、非对称密钥加密
  • 加密和解密不使用同一密钥
    • 公开密钥所有人都可以获取,通信发送获得接收方的公钥后,就可以使用公钥进行加密,接收方收到通信内容后使用私钥解密
  • 优点:更安全的将公钥传输给通信发送方
  • 缺点:运算速度慢
3、https采用的加密方式
  • 采用混合加密机制,使用非对称密钥加密用于传输对称密钥保证安全性,之后使用对称密钥加密进行通信保证效率

13、数字签名、数字证书、SSL、https是什么关系

  • 密码
    • 用于对消息进行加密和解密的一套算法,从明文到密文的过程成为加密,反之为解密,加解密算法合在一起成为密码算法
  • 密钥
    • 使用密码算法过程中输入的一段参数。同一个明文在相同的密码算法和不同的密钥计算下会产生不同的密文,通常密钥越长,破解难度越大
  • 对称加密
    • 又称为共享密钥加密,加解密使用相同密钥,常见的有RC5、RC6等,
  • 非对称加密
    • 常见加密算法有RSA
  • 消息摘要
    • 用于判读数据完整性的算法,也称为散列函数或hash函数,函数返回值为散列值,散列值又称为消息摘要或指纹,是一种不可逆算法,常见MD5、SHA
    • 散列函数可以保证数据完整性,识别数据是否被篡改,并不能识别出数据是否是伪装的
  • 消息认证码
    • 可以确定数据完整性并进行认证的技术,简称MAC
  • 数字签名
    • 发送者 Alice 把消息哈希函数处理生成消息摘要,摘要信息使用私钥加密之后生成签名,连同消息一起发送给接收者 Bob。
    • 数据经过网络传输,Bob收到数据后,把签名和消息分别提取出来。
    • 对签名进行验证,验证的过程是先把消息提取出来做同样的Hash处理,得到消息摘要,再与 Alice 传过来的签名用公钥解密,如果两者相等,就表示签名验证成功,否则验证失败,表示不是 Alice发的
  • 公钥证书
    • 认证机构(Certification Authority)CA,CA 把用户的姓名、组织、邮箱地址等个人信息收集起来,还有此人的公钥,并由 CA 提供数字签名生成公钥证书(Public-Key Certificate)PKC,简称证书。

14、http和https的区别

  • http是http协议运行在tcp之上,所有传输内容都是明文,客户端和服务端都无法验证对方身份
  • https是http运行在ssl/tls之上,ssl/tls运行在tcp之上,所有传输内容都经过加密,采用对称加密但对称加密密钥用服务器方的证书进行了非对称加密。客户端可以验证服务端身份,若配置了客户端验证,服务端也是可以验证客户端身份的
  • https协议需要向ca申请证书,收费
  • 两者使用的是完全不同的连接方式,http端口80,https端口443

15、http2的新特性

HTTP/2的通过支持请求与响应的多路复用来减少延迟,通过压缩HTTP首部字段将协议开销降至最低,同时增加对请求优先级和服务器端推送的支持。

1、二进制分帧
  • 帧:HTTP/2数据通信的最小单位消息,指HTTP/2中逻辑上的http消息,消息由一个或多个帧组成
  • 流:存在于连接中的一个虚拟通道,可以承载双向消息,每个流都有一个唯一的整数ID
  • HTTP/2采用二进制传输格式,而非文本格式,二进制协议解析更高效
  • HTTP/2中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流,每个数据流都是以消息的形式发送,而消息又由多个或一个帧组成,多个帧只见可以乱序发送,根据帧首部的标识可以重新组装
2、多路复用
  • 代替原来的序列和阻塞机制,所有的请求都是通过一个TCP连接并发完成
  • 同个域名只需占用一个TCP连接,消除了因多个TCP连接而带来的延时和内存消耗
  • 单个连接上可以并行交错的请求和响应,之间不互相干扰
3、服务器推送
  • 服务端可以在发送页面html时主动推送其他资源,不用等到浏览器解析到相应位置,发起请求在响应
  • 服务端可以主动推送,客户端也有权利选择是否接收,若服务器推送的资源已被浏览器缓存过,浏览器可以通过发送rst_stream帧来拒收
4、头部压缩
  • HTTP/2对消息头采用hpack进行压缩传输,能够节省消息头占用的网络的流量

3、传输层

1、mac和ip怎样转换

  • ARP协议
    • 将ip地址通过广播目标mac地址是aa:aa:aa:aa:aa:aa解析目标IP地址的mac地址,扫描本网段的mac地址
  • DHCP协议
    • 动态获取IP地址,过程
      • 客户机请求IP
      • 服务器响应
      • 客户端选择IP
      • 服务器确定租约

2、IP地址子网划分

3、交换机和路由器区别

  • 路由器可以给你的局域网自动分配IP,虚拟拨号,就像一个交通警察,指挥着你的电脑该往哪走,你自己不用操心那么多了。交换机只是用来分配网络数据的。
  • 路由器在网络层,路由器根据IP地址寻址,路由器可以处理TCP/IP协议,交换机不可以。
  • 交换机在中继层,交换机根据MAC地址寻址。路由器可以把一个IP分配给很多个主机使用,这些主机对外只表现出一个IP。交换机可以把很多主机连起来,这些主机对外各有各的IP。
  • 路由器提供防火墙的服务,交换机不能提供该功能。集线器、交换机都是做端口扩展的,就是扩大局域网(通常都是以太网)的接入点,也就是能让局域网可以连进来更多的电脑。路由器是用来做网间连接,也就是用来连接不同的网络。
  • 交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址。而路由器则是利用不同网络的ID号(即IP地址)来确定数据转发的地址。IP地址是在软件中实现的,描述的是设备所在的网络,有时这些第三层的地址也称为协议地址或者网络地址。MAC地址通常是硬件自带的,由网卡生产商来分配的,而且已经固化到了网卡中去,一般来说是不可更改的。而IP地址则通常由网络管理员或系统自动分配。
  • 区别
    • 交换机是一根网线上网,但是大家上网是分别拨号,各自使用自己的宽带,大家上网没有影响。而路由器比交换机多了一个虚拟拨号功能,通过同一台路由器上网的电脑是共用一个宽带账号,大家上网要相互影响。
    • 交换机工作在中继层,交换机根据MAC地址寻址。路由器工作在网络层,根据IP地址寻址,路由器可以处理TCP/IP协议,而交换机不可以。
    • 交换机可以使连接它的多台电脑组成局域网,如果还有代理服务器的话还可以实现同时上网功能而且局域网所有电脑是共享它的带宽速率的,但是交换机没有路由器的自动识别数据包发送和到达地址的功能。路由器可以自动识别数据包发送和到达的地址,路由器相当于马路上的警察,负责交通疏导和指路的。
    • 举几个例子,路由器是小邮局,就一个地址(IP),负责一个地方的收发(个人电脑,某个服务器,所以你家上网要这个东西),交换机是省里的大邮政中心,负责由一个地址给各个小地方的联系。简单的说路由器专管入网,交换机只管配送,路由路由就是给你找路让你上网的,交换机只负责开门,交换机上面要没有路由你是上不了网的。
    • 路由器提供了防火墙的服务。路由器仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和未知目标网络数据包的传送,从而可以防止广播风暴。

4、子网掩码作用

不是某个IP的网络号和主机号决定子网掩码是什么,而是子网掩码决定了某个IP地址的网络号与主机号是什么,IP地址是要搭配子网掩码使用的

  • 子网掩码的作用就相当于这个大家公认的国际千克原器,是我们测量两个IP是否属于同一个网段的一个工具(应该说是让你知道某个IP地址的网络号与主机号分别是什么)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值