计算机网络基础

85 阅读11分钟

TCP/IP 网络通常是由上到下分成 4 层,分别是应用层,传输层,网络层和网络接口层

应用层:HTTP

应用层定义应用进程间的通信规则,不同主机的应用进程间如何相互传递报文

HTTP

HTTP 是超文本传输协议,它定义了客户端和服务器之间交换报文的格式和方式,使用TCP作为传输层协议 HTTP是无状态协议,服务器不保存客户信息 HTTP有非持续连接和持续连接,1.1后建立持续连接,一个TCP连接可以被多个请求复用

HTTP报文

1。 请求报文 //TODO看一个具体的 请求行+首部行+空行+实体主体

  • 空行用来划分首部与实体
  • 请求行:方法+URL+http版本

GET / HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*

  1. 响应报文 状态行 + 首部行+实体主体
  • 状态行:协议版本字段+状态码+状态信息
  • 实体:请求的对象
HTTP/1.0 200 OK   //状态行:协议版本字段+状态码+状态信息
Content-Type: text/plain  
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84

<html>
  <body>Hello World</body>
</html>

200-请求成功、202-服务器端已经收到请求消息,但是尚未进行处理 301-永久移动、302-临时移动、304-所请求的资源未修改、 400-客户端请求的语法错误、404-请求的资源不存在 500-服务器内部错误。

首部行//TODO 解析请求报文

  • 请求首部:Accept 可接收媒体资源的类型、Accept-Charset可接收的字符集、Host 请求的主机名
  • 响应首部:ETag 资源的匹配信息,Location 客户端重定向的 URL
  • 通用首部:通用首部有 Cache-Control 控制缓存策略、Connection 管理持久连接
  • 实体首部:Content-Length 实体主体的大小、Expires 实体主体的过期时间、Last-Modified 资源的最后修 改时间。

http1.0 缺点

  • “列头阻塞”:默认使用了持久连接,同一个 TCP 连接里面,数据请求的通信次序 是固定的。服务器只有处理完一个请求的响应后,才会进行下一个请求的处理

http/2

  • 二进制
    • HTTP/2 是一个二进制协议,头信息和数据体都是二进制,并且统称为"帧"。帧的概念是它实现多路复用的基础。
  • 多路复用
    • HTTP/2 实现了多路复用,HTTP/2 仍然复用 TCP 连接,但是在一个连接里,客户端和服务器都可以同时发送多个请求或回应,而且不用按照顺序一一发送,避免了"队头堵塞"
  • 数据流
    • HTTP/2同一个连接里面连续的数据包可能属于不同请求,通过在数据包发送时标记数据流的ID来区分
  • 头信息压缩
    • http1不带状态,每次都带上所有信息。客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,只发送服务器推送头信息索引号
  • 服务器推送
    • HTTP/2 允许服务器未经请求,主动向客户端发送资源,http2 下服务器主动推送的是静态资源

http/3

https

  • http存在问题:
    • 报文明文发送
    • 可被第三方截获修改内容
    • 存在认证问题

https

https是超文本传输协议,基于http协议,使用TLS/SSL对数据进行加密,防止第三方窃听。 https提供校验机制,信息篡改后双方会立刻发现

TLS/SSL

transport layer

TLS握手

身份验证-》密钥协商-> 加密算法协商

  1. 客户向服务器发起请求,请求包含:协议版本,一个随机数,客户端支持的加密方法
  2. 服务端接受请求,确认加密方法,返回:加密方法,服务器证书,一个随机数
  3. 客户端确认服务器证书有效,发送:新的随机数(用服务器证书里的公钥加密),前面内容的hash值
  4. 服务器用私钥解密随机数,提供hash值给客户端校验
  5. 客户端和服务器使用三个随机数生成对话密钥,以后用于对称加密对话信息;对话密钥通过各自的私钥解密

SSL恢复

  • sessionID恢复:每一次对话都有一个编号(session ID)。如果对话中断,下次重连的时候,只要客户端给出这个编号,且服务器有这个编号的记录,双方就可以重新使用已有的"对话密钥"。session ID往往只保留在一台服务器上。所以,如果客户端的请求发到另一台服务器,就无法恢复对话。
  • 客户端发送服务器在上一次对话中发送过来的session ticket,session ticket是加密的,只有服务器才能解密。

DNS协议,域名系统

DNS(Domain Name System) 协议提供的是一种主机名到 IP 地址的转换服务。域名系统是由分层的DNS服务器组成的分布式数据库,DNS定义了主机查询这个数据库的方式

域名结构

根据域名的层级结构,管理不同层级域名的服务器

主机名.次级域名.顶级域名.根域名
host.sld.tld.root

有域名的起点都是根域名,写作一个点.,放在域名的结尾,通常省略不写

DNS查询:由域名查询IP地址

www.baidu.com

  1. 发送DNS请求到本地DNS服务器,本地判断是否有该域名的缓存,存在则直接返回
  2. 不存在缓存,服务器则从根域名服务器查到根域名(.)的顶级域名(.com)服务器的NS地址和IP地址
  3. 顶级查到次级/一级域名(baidu)的权威域名服务器IP地址列表,向其中一个列表发送请求

我们向本地 DNS 服务器发送请求的方式是递归查询,本地DNS服务器向其他域名服务器请求是迭代查询 图示:

image.png

传输层:TCP

image.png 传输层协议为不同主机上的不同进程间提供了逻辑通信的功能,为应用层提供网络支撑。传输层只工作在端系统中。

传输层TCP

transmission control protocol TCP是面向连接的、提供可靠数据服务的传输层协议

传输层的数据包大小超过 MSS(TCP 最大报文段长度),就会将数据分成TCP段,中途有分块丢失只需重新发送一个分块

  • 端口:传输层对应用接受和传输数据通道的独立标识。对于浏览器(客户端)中的每个标签栏都是一个独立的进程,操作系统会为这些进程分配临时的端口号
  • 传输层的报文中会携带端口号,因此接收方可以识别出该报文是发送给哪个应用

TCP报文

  1. 源端口号,目标端口号
  2. 数据包序号
  3. 确认序列号:确认对方收到(ack+1)
  4. 状态位:SYN,ACK,RST,FIN。TCP 是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更
  5. 窗口大小:用于做流量控制

三次握手的过程

  1. 客户端、服务端处于CLOSE状态 -> 服务端主动监听某个端口,处于LISTEN状态
  2. 客户端主动发起连接SYN,之后处于SYN-SET状态
  3. 服务端收到后,并且ACK客户端的SYN,并返回,之后处于SYN-RCVD
  4. 客户端收到SYN和ACK后,为连接分配缓存,发送对SYN确认的ACK,之后处于ESTABLISHED状态
  5. 服务端收到SYN和ACK后,进入EATABLISHED状态

为什么三次?

三次握手中双方都一发一收,TCP的可靠连接是靠seq(序列号)达成的,三次中,保证双方都会有一次发送自己的、确认对方的序列号

  1. A发送seqA
  2. B收到seqA,发送ackA(seqA+1),seqB
  3. A收到ackA,seqB,发送ackB(seqB+1)

特点

  1. 面向连接:通信前,双方进行三次握手建立连接
  2. 通过校验机制提供可靠的数据传输
  3. 点对点服务:TCP是单个发送方和单个接收方之间的连接
  4. 全双工服务:通信双方都能收发消息
  5. 拥塞控制机制:在网络堵塞时TCP会控制发送数据的速率
  6. 流量控制机制:通信双方发送和接受的数据相同,避免缓存填满造成数据包丢失
  • 报文结构:首部+数据

网络层:IP协议

internet protocol

IP协议是网络层协议,负责将数据从一个设备传输到另一个设备,设备用IP地址编号

  • IP地址:网络号+子网掩码

    • 网络号:标识IP地址数据哪个子网
    • 主机号:标识同一子网下的不同主机
  • 将IP地址和子网掩码进行按位与运算,得到网络号

  • 将子网掩码取反后,和IP地址进行按位与运算,得到主机号

IP协议将传输层报文作为数据部分,加上IP包头组装成IP报文 寻址过程中,先寻找网络号,然后由路由寻找主机

IP包头 源地址IP和目标服务器IP 协议号:06,标识为TCP

image.png

网络接口层:ARP协议,mac地址

网络接口层为网络层提供链路级别的传输服务,负责在底层网络上发送数据包,使用MAC地址来标识网络上的设备

网络接口层在 IP 头部的前面加上 MAC 头部,并封装成数据帧(Data frame)发送到网络上 MAC头部包含了接收方和发送方的mac地址信息(通过ARP协议获得),用于以太网进行寻址

MAC包头 发送方MAC地址,接收方MAC地址

image.png

网路接口层单位是帧,网络层是包,TCP是段,HTTP是消息/报文

从键入URL到网页显示

当用户在浏览器输入URL后,首先触发DNS协议解析域名获取服务器IP。DNS查询通过UDP发起,经过递归查询最终返回IP地址。 浏览器随即通过TCP三次握手与目标IP的80端口建立连接。 TCP连接建立后,HTTP协议生成GET请求报文,经TCP分段、添加序列号等处理后,由IP协议封装成数据包进行路由转发。 服务器响应HTML内容通过TCP可靠传输回到客户端,浏览器渲染页面。 应用层(HTTP/DNS)→传输层(TCP)→网络层(IP)。

  1. 浏览器解析URL www.server.com/目录名/file.ht…... http: 访问数据的协议 //后:web服务器名称 /后:数据源(文件)的路径名

当没有路径名时,就访问根目录下设置的默认文件 image.png

  1. 浏览器根据解析的信息生成http请求(报文)

image.png

  1. DNS解析服务器域名对应IP 首先发送给本地DNS服务器(客户端的 TCP/IP 设置中填写的 DNS 服务器地址),本地DNS服务器查询缓存,有则直接返回,无则递归查询根域服务器-> 顶层域名 -> 权威DNS服务器 -> 最终IP

  2. 通过ARP协议获取目标IP地址的MAC地址

如果本地ARP缓存中有IP对应mac,则使用;没有,ARP在以太网中以广播的形式向所有的设备查询IP地址对应的MAC地址

image.png 6. 浏览器委托操作系统协议栈通过三次握手与端口建立TCP连接

应用程序调用Socket库委托操作系统的协议栈工作

协议栈TCP,UDP负责接受应用层的委托执行收发数据的操作 协议栈IP控制网络包收发操作

HTTP 是基于 TCP 协议传输的,浏览器通过三次握手与目标IP的端口建立连接

image.png

  1. 如果是HTTPS,通过四次挥手建立TLS连接

  2. 网卡将网络包转为电信号,通过网线发送

  3. 交换机根据MAC地址查找端口,发送给路由器;路由器查询路由表,根据IP头部将包转发到服务器

  4. 服务器查询确认数据包的MAC地址、IP地址、TCP序列号、端口号,将包发送给对应的HTTP进程,返回请求的数据

  5. 客户端向服务器发起TCP四次挥手,双方断开连接

image.png