文章目录
- 1. HTTP 状态码
- 2. Http 请求的过程
- 3. Http 方法
- 4. HTTPS 对称加密和非对称加密
- 5. HTTPS 通信步骤
- 6. 描述 IP 协议
- 7. IP 数据报的格式
- 8. 分类的 IP 地址
- 9. 路由转发
- 10. UDP 和 TCP 的特点
- 11. TCP 首部格式
- 12. TCP 的三次握手
- 13. TCP 连接的释放
- 14. 为什么 A 在 TIME-WAIT 阶段必须等待 2MSL 的时间呢?
- 15. TCP 如何保障可靠性
- 16. TCP 丢包如何处理
- 17. Mac 协议【数据链路层】
- 18. Web 页面请求过程
- 19. DNS 解析的过程
1. HTTP 状态码
-
2XX 成功
响应结果表明请求被正常处理
-
3XX 重定向
3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求
- 301 永久性重定向
该状态码表示请求的资源已被分配到了新的URI,以后应使用资源现在所指的URI。
- 302 临时性重定向
该状态码表示请求的资源已被分配到了新的URI,希望用户本次使用新的URI访问
- 303
由于请求对应的资源存在另外一个URI,应使用GET方法定向获取请求资源
-
4XX 客户端错误
4XX 的响应结果表明客户端是发生错误的原因所在。
- 400 请求报文中存在语法错误
- 401
发送的请求需要有通过HTTP认证的认证信息
- 403
表明对请求资源的访问被服务器拒绝了
- 404
服务器上无法找到请求的资源
-
5XX 服务器错误
该状态码表明服务器端在执行请求时发生了错误。
2. Http 请求的过程
http请求的过程
- 对 www.baidu.com 进行 DNS 域名解析,得到对应的 IP 地址。
- 根据这个 IP 找到对应的服务器,发起 TCP 三次握手。
- 建立TCP连接后发起HTTP请求
- 服务器响应HTTP请求,浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源
- 浏览器对页面进行渲染呈现给用户
3. Http 方法
- GET:获取资源
- POST:传输实体主体
- PUT:传输文件
- HEAD:获取报文首部
HEAD 与 GET 方法一样,只是不返回报文主体部分。
- DELETE:删除文件
DELETE 按请求 URL 删除指定的资源。
4. HTTPS 对称加密和非对称加密
- 加密和解密用同一个密钥的方式称为共享密钥加密,也叫做对称密钥加密。以对称密钥方式加密时必须将密钥也发送给对方,如果通信被监听,密钥可能会落入他人之手,同时也就失去了加密的意义。如果密钥能够安全到达,那么数据也应该能安全到达。
- 公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,另一把叫做公开密钥。使用公开密钥加密的方式是这样的,发送密文的一方使用对方的公开密钥进行加密处理,对方受到加密信息后,再使用自己的私有密钥进行解密。利用这种方式不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
- HTTPS 采用混合加密机制,采用共享密钥加密和公开密钥加密两者并用的混合加密机制。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
5. HTTPS 通信步骤
HTTPS安全通信过程
HTTPS的信任基于预先安装在操作系统中的证书颁发机构(CA)。可实现防篡改和中间人攻击。它的简易安全通信过程如下:
6. 描述 IP 协议
一、作用
使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。
二、IP 数据报格式
三、IP 地址编址方式
7. IP 数据报的格式
一个IP数据包由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,后一部分是可选字段。
IP 数据报首部的固定部分中的各字段
- 版本
占4位,指IP协议的版本。如IPv4,IPv6。
- 首部长度
占4位,首部长度所表示的单位是4字节,因此首部长度字段的最小值为5,最大值为15。
- 区分服务
占8位,用来获得更好的服务,在一般情况下不适用这个字段。
- 总长度
总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报最大长度为2^16-1=65535。在IP层下的每一种数据链路层协议都规定了一个数据帧中数据字段的最大长度,称为最大传送单元MTU。当一个IP数据报封装成连路层的帧时,一定不能超过下面的数据链路层所规定的MTU值。例如,最常用的以太网规定其MTU值是1500字节。若超过,就必须把过长的数据报进行分片处理。
每一个IP数据报越短,路由器转发的速度就越快。因此,在互联网上的路由器和主机必须能够接收长度不超过576字节的数据。
在分片时,数据报首部中的总长度字段指分片后的每一分片的首部长度与该分片的数据长度的总和。
- 标识
占16位,每产生一个数据报,计数器就加1,并将此数赋值给标识字段。
- 标志
占3位
- 最低位为MF(more fragment)。MF=1表示后面还有分片的数据报。MF=0表示这已是若干数据报片中最后一个。
- 中间一位是DF(Don’t fragment),意思是不能分片。只有当DF=0时才允许分片。
- 片偏移
占13位,较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8字节为单位。经过某网络时就有可能需要分片。
- 生存时间
占8位,缩写为TTL。每经过一个路由器TTL的值就减1,当TTL的值为0就丢弃这个数据报。
- 协议
占8位,协议字段指出数据报携带的数据是使用何种协议的,以便使目的主机的IP层直到应将数据部分上交到那个协议进行处理。
- 首部校验和
占16位,只检验数据报的首部。
- 源地址
- 目的地址
8. 分类的 IP 地址
常用的三种类别的 IP 地址
网络类别 |
最大可指派网络数 |
第一个可指派的网络号 |
第一个可指派的网络号 |
每个网络中最大的主机数 |
A |
2^7 - 2 |
|
right-aligned 居右 |
|
B |
2^14 - 1 |
- |
-aligned 居 |
|
C |
2^21 - 1 |
-aligned |
right-文本居右 |
|
9. 路由转发
(1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。
(2)若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付给目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧);否则就要执行(3)进行间接交付。
(3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器,否则执行(4)。
(4)若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器,否则执行(5)。
(5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的下一跳路由器,否则执行(6)。
(6)报告转发分组出错。
10. UDP 和 TCP 的特点
- 用户数据报协议(User Datagtam Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。
- 传输控制协议(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条TCP 连接只能是点对点的(一对一)。
11. TCP 首部格式
- 序号 :用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。
- 确认号 :期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。
- 数据偏移 :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
- 确认 ACK :当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。
- 同步 SYN :在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。
- 终止 FIN :用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。
- 窗口 :窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。
12. TCP 的三次握手
假设 A 运行的是TCP客户程序,B 运行的是TCP服务程序。
最初,两端的 TCP 进程都处于 closed 状态。
- 首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。
- 在打算建立 TCP 连接时,A 向 B 发送连接请求报文,SYN = 1, ACK = 0, 选择一个初始的序号 seq = x,SYN 报文段不能携带数据,但要消耗一个序号。这时 TCP 客户端进入 SYN-SENT(同步已发送)状态。
- B 收到连接请求报文,如果同一连接,则向 A 发送连接确认报文,SYN=1, ACK=1, 确认号为 x+1,同时也选择一个初始的序号 y,这个报文段也不能携带数据。这时,TCP 服务器进程进入 SYN-RCVD(同步收到)状态。
- A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。ACK 报文段可以携带数据。
- B 收到 A 的确认后,连接建立。
第三次握手的原因:
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。
A 不会向 B 的确认发出确认,B 由于收不到确认,就知道 A 并没有要求建立连接。
13. TCP 连接的释放
- A 的应用进程先向 TCP 发出连接释放报文段,并停止发送数据,主动关闭 TCP 连接,置 FIN = 1,此时 A 进入 FIN-WAIT1 状态,等待 B 的确认。
- B 收到连接释放报文后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据,但是 A 不能向 B 发送数据
- A 收到 B 的确认后,就进入 FIN-WAIT2(终止等待2)状态,等待 B 发出连接释放报文段
- 若 B 没有要向 A 发送的数据,其进程就通知 TCP 释放连接。现在假定 B 的序号为 w(在半关闭状态 B 可能又发送了一些数据)。这时 B 进入(LAST-ACK)最后确认状态,等待 A 的确认
- A 发出去确认,之后,进入 TIME-WAIT 状态,等待 2MSL后释放连接。MSL 叫做最长报文段寿命。
14. 为什么 A 在 TIME-WAIT 阶段必须等待 2MSL 的时间呢?
-
为了保证 A 发送的最后一个 ACK 报文段能够到达 B。
这个 ACK 报文段可能丢失,如果丢失,B 会重传 FIN+ACK,而 A 在2MSL 时间内能够收到这个报文段。然后 A 重传一次确认,等待 2MSL。最后 A 和 B 都能进入 CLOSED 状态。如果 A 在 TIME-WAIT 不等待一些时间,那么就无法收到 B 重传的 FIN+ACK 报文段,因此也就不会重发确认报文段,B 就无法按照正常步骤进入 CLOSED 状态。
-
等待一段时间是为了让本次连接所产生的所有报文都从网络中消失,是的下一次新的连接不会出现旧的连接请求报文。
15. TCP 如何保障可靠性
- 超时重传
如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段
- 三次握手建立连接,保障建立连接的可靠性
- 四次挥手释放连接,保障连接释放的可靠性
16. TCP 丢包如何处理
TCP 使用超时重传来实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。
在 TCP 首部中,有四样很重要的东西:
- 序号:用来解决网络包乱序的问题
- ACK:用于确认收到,用来解决不丢包的问题
- 滑动窗口:用于解决流控
17. Mac 协议【数据链路层】
一. 数据链路层组成结构
- 介质访问控制(Mac):主要用来解决多个站点公用一个链路,信道资源如何分配,如何划分的。
二、链路分类
广播信道、点对点信道
三、Mac 协议分类
- 信道划分:频分复用、时分复用、码分复用
- 随机访问:ALOHA
- 轮询访问:令牌
四、ALOHA 协议
工作原理:任何一个站点,一有数据,就立即发送;然后检测是否产生冲突,有冲突,随机等待一段时间,再次重新发送。
缺点:有数据立马发送,也不管别人是不是在发送,造成冲突概率太大。
五、CSMA/CD 【载波监听多点接入/碰撞检测】
工作原理
- 多点接入 :说明这是总线型网络,许多主机以多点的方式连接到总线上。
- 载波监听 :每个主机都必须不停地监听信道。在发送前,如果监听到信道正在使用,就必须等待。
- 碰撞检测 :在发送中,如果监听到信道已有其它主机正在发送数据,就表示发生了碰撞。虽然每个主机在发送 数据之前都已经监听到信道为空闲,但是由于电磁波的传播时延的存在,还是有可能会发生碰撞。
记端到端的传播时延为 τ,最先发送的站点最多经过 2τ 就可以知道是否发生了碰撞,称 2τ 为 争用期 。只有经过争 用期之后还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
当发生碰撞时,站点要停止发送,等待一段时间再发送。这个时间采用 截断二进制指数退避算法 来确定。从离散的 整数集合 {0, 1, …, (2k-1)} 中随机取出一个数,记作 r,然后取 r 倍的争用期作为重传等待时间。
18. Web 页面请求过程
- DHCP 配置主机信息
- 假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。
- DNS 域名解析
- 为了访问到该网站,主机需要直到该网站域名对应的 IP 地址
- 这里就是使用应用层的 DNS 解析域名
- 在解析域名的时候,首先主机生成一个 DNS 查询报文,该报文放到一个以太网帧中,如果想要将这个帧发送到网关中,则需要使用 ARP 协议来获取网关的 Mac 地址
- 知道了网关路由器的 Mac 地址以后,我们就可以把这个数据帧发送给网关路由器了
- 网关路由器的到这个帧后,抽取出里面的 IP 数据报,并根据路由表进行 IP 数据报的转发
- 到达 DNS 服务器后,DNS 服务器抽取出 DNS 查询报文,并在 DNS 服务器中查找带解析的域名
- DNS 服务器找到以后,向主机发送 DNS 回答报文,将相关信息传给主机
- HTTP 请求页面
- 有了 HTTP 服务器的 IP 地址以后,就可以向 HTTP 服务器发送 HTTP GET 报文了
- 在发送 HTTP 报文之前,必须使用 TCP 协议三次握手来和主机建立连接
- 建立连接之后,就可以传送 HTTP 数据了
- HTTP 服务器收到 HTTP 请求报文以后,生成一个 HTTP 相应报文,发送给主机
19. DNS 解析的过程
什么是 DNS?
DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。
DNS 的过程?
- 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。
- 如果浏览器缓存中没有,浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫hosts的文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。
- 如果至此还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析这个域名。
- 如果LDNS仍然没有命中,就直接跳到根域名服务器请求解析。
- 根域名服务器返回给本地域名服务器一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址。
- 此时LDNS再发送请求给上一步返回的gTLD。
- 接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器。
- Name Server根据映射关系表找到目标ip,返回给LDNS。
- LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束。