这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记
概述
-
- 网络接入协议
-
- 网络传输协议
网络接入协议/概念
- MAC地址
MAC地址就像身份证一样,用来证明身份的,
长度为48bit,由12位的16进制数表示。
- 路由协议
我们知道不同网段的路由就是指导IP数据包发送的路径,而路由协议就是在路由指导IP数据包发送过程中事先约定好的规定和标准。
常见的路由协议分为两大类:内部网关协议和域间路由协议。
内部网关路由协议有RIP和OSPF、ISIS等,域间路由协议BGP。
- ARP协议
OSI模型把网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。
在通过以太网)发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的包头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。
- IP协议
实际的互联网络是错综复杂的,物理设备通过使用IP协议,屏蔽了物理网络之间的差异,网络中的主机使用IP协议连接时,就无需关注网络细节。
1、使复杂的实际网络变成一个虚拟互联网络。
2、使网络层可以屏蔽掉底层细节,专注于网络层的数据转发。
3、解决了在虚拟网络中数据报传输路径的问题。
-
NAT NAT的作用:数据包在内网与外网间互通时,对数据包中的源目ip进行转换
由内部到外部时修改源ip地址,由外部到内部时修改目标ip地址
NAT协议分类:
动态、静态 一对一、一对多、多对多 一对一属于静态,固定将一个ip转换为另一个ip;
一对多属于动态,将多个ip转换为同一个ip;
多对多既可以动态又可以静态,将多个ip转换为多个ip;
网络传输协议
- DNS
DNS是一个非常重要而且常用的系统。主要的功能是将人易于记忆的DomainName与人不容易记忆的IPAddress作转换。而上面执行DNS服务的这台网络主机,可以称之为DNSServer。
DNS服务器是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入DNS名称时,DNS服务可以将此名称解析为与之相关的其他信息,如IP地址。因为你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。
- UDP
UDP是一种用户数据报协议,又成为用户数据报文协议,是一种报文的协议,不是面向连接的协议,TCP是基于连接的
是一个简单的面向数据报的传输层协议,正式规范为RFC 768
不可靠的原因有五点:
-
1、它一但把数据发送给网络的数据发送出去,就不保留备份数据
-
2、在UDP的数据层面,只管发送或者是接受数据,而不对这个数据进行保存备份重发等等
-
3、UDP在IP数据报的头部仅仅加入了复用和数据校验
-
4、发送端生产数据、接受端从网络中抓取数据,发送的时机和抓取的时机不想等,可能会导致客户端发送的数据服务器端没有接受到,在UDP中其实是没有标准的客户端和服务器端的,
-
5、UDP结构简单,无校验,速度快,容易丢包、可广播
-
TCP
TCP(Transmission Control Protocol,传输控制协议),是一个传输层协议。TCP 提供客户与服务器之间的连接。TCP 客户先与某个给定的服务器建立一个连接,再通过该连接与服务器交换数据,最后再终止该连接。\
- 1.可靠性 TCP 在向对端传输数据时,要求对方收到数据后返回一个确认。如果在等待一定时间后没有收到确认,则自动重传该数据并等待更长的时间。只有在数次重传都失败后,TCP 才会放弃这次传输同时告知用户。
TCP 的可靠性并不意味着数据一定会被对端接受
-
2.RTT估算 RTT(Round-trip time),TCP 会动态估算客户和服务器之间的往返时间,以便它了解在特定的网络状况下等待一个确认需要花费多久的时间。
-
3.序列号 TCP 通过对不同 TCP 分节的数据字节进行编号,来确认数据的先后顺序和漏发、重发的情况。
-
4.流量控制 TCP 总是告知对端在任何时刻它一次能够从对端接受的数据,这称为通告窗口。通告窗口的大小会随着发送端数据接受和接收端应用读取数据的发生而变化。
-
5.全双工 建立 TCP 连接后,能够同时在该连接上发送、接受数据。
全双工不意味着连接是反向相等的,两端数据的传输可能经过不同的路由
- 6.面向流 TCP 传输数据不会保留 TCP 数据报的边界信息
- HTTP
-
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同, 用于客户端和服务器之间的通信。请求访问文本或图像等资源的一端称为客户端, 而提供资源响应的一端称为服务器端。
-
http1.0的主要特点:
-
- 简单快速:当客户端向服务器端发送请求时,只是简单的填写请求路径和请求方法即可,然后就可以通过浏览器或其他方式将该请求发送就行了 。
-
- 灵活: HTTP 协议允许客户端和服务器端传输任意类型任意格式的数据对象
-
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。(当今多数服务器支持Keep-Alive功能,使用服务器支持长连接,解决无连接的问题)
-
- 无状态:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即客户端发送HTTP请求后,服务器根据请求,会给我们发送数据,发送完后,不会记录信息。(使用 cookie 机制可以保持 session,解决无状态的问题)
-
HTTPS
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTP+加密+认证+完整性保护 = HTTPS
HTTPS和HTTP的区别主要如下:
-
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
-
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
-
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
-
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
-
HTTP2.0 HTTP2.0特性
-
1、完全采用二进制格式
HTTP2.0主要改动HTTP2.0作为新版协议,改动细节必然很多,不过对应用开发者和服务提供商来说,影响较大的就几点。
新的二进制格式(Binary Format)http1.x诞生的时候是明文协议,其格式由三部分组成:start line(request line或者status line),header,body。要识别这3部分就要做协议解析,http1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑http2.0的协议解析决定采用二进制格式,实现方便且健壮。
有人可能会觉得基于文本的http调试方便很多,像firebug,chrome,charles等不少工具都可以即时调试修改请求。实际上现在很多请求都是走https了,要调试https请求必须有私钥才行。http2.0的绝大部分request应该都是走https,所以调试方便无法作为一个有力的考虑因素了。curl,tcpdump,wireshark这些工具会更适合http2.0的调试。
http2.0用binary格式定义了一个一个的frame,和http1.x的格式对比如下图:
- 2、多路复用 根据request的 id将request再归属到各自不同的服务端请求里面,即单个连接上同时进行多个业务单元数据的传输。
- 3、头部压缩
假定一个页面有100个资源需要加载(这个数量对于今天的Web而言还是挺保守的), 而每一次请求都有1kb的消息头(这同样也并不少见,因为Cookie和引用等东西的存在), 则至少需要多消耗100kb来获取这些消息头。HTTP2.0可以维护一个字典,差量更新HTTP头部,大大降低因头部传输产生的流量。 使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
HTTP1.X的头部越来越膨胀,很多都是重复且多余的,HTTP2.0可以压缩头部的大小,并且避免了重复的传输,可以大大降低延迟。
- 4、服务端推送
服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度。
- 5、请求优先级
- QUIC
QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于 UDP 的传输协议,它实现了 TCP + HTTPS + HTTP/2 的功能,目的是保证可靠性的同时降低网络延迟。
因为 UDP 是一个简单传输协议,基于 UDP 可以摆脱 TCP 传输确认、重传慢启动等因素,建立安全连接只需要一的个往返时间,它还实现了 HTTP/2 多路复用、头部压缩等功能。
众所周知 UDP 比 TCP 传输速度快,TCP 是可靠协议,但是代价是双方确认数据而衍生的一系列消耗。
其次 TCP 是系统内核实现的,如果升级 TCP 协议,就得让用户升级系统,这个的门槛比较高,而 QUIC 在 UDP 基础上由客户端自由发挥,只要有服务器能对接就可以。
到这里就先结束啦!
翻过这座山,他们就会听到你的故事!加油!