本文转载自微信公众号「sowhat1412」,作者sowhat1412 。转载本文请联系sowhat1412公众号。
1 TCP/IP
1.1 TCP/IP 定义
TCP/IP 协议族是一组协议的集合,也叫互联网协议族,计算机之间只有遵守这些规则,才能进行通信。TCP 和 IP 只是其中2个重要的协议,所以用 TCP/IP 来命名这个互联网协议族,实际上他大致包括四层协议。
1.2 TCP/IP 功能
上文说过 TCP/IP 宏观上分为四层,接下来说下四层的具体作用。
1.2.1. 应用层
应用层 为用户直接提供不同的网络服务协议,比如 HTTP、Email、FTP 等,这些协议都是为了解决实际生活中不同的需求而产生的协议。用户大部分时间也是在此层操作跟组装数据,说白了就是socket 编程!至于具体的数据是如何进行网络传输的,是由下面的三层负责的。
1.2.2. 传输层
传输层为应用层提供通信服务,属于面向通信部分的最高层,也是用户功能中的最底层。传输层为相互通信的应用进程提供了逻辑通信。主要包括 TCP 协议和 UDP 协议。
TCP 提供面向连接的数据流支持、可靠性、流量控制、多路复用等服务。
UDP 不提供复杂的控制机制。
传输层的作用:
1.2.3. 网络层
网络层功能是实现数据包的选路和转发。广域网通常使用众多分级的路由器来连接分散的主机或局域网,因此,通信的两台主机一般是通过多个中间节点路由器连接的。网络层的任务就是选择这些中间节点,以确定两台主机之间的通信路径。同时对上层协议隐藏了网络拓扑连接的细节,使得在传输层和网络应用程序看来,通信的双方是直接相连的。
IP 协议即处于这一层,提供路由和寻址的功能,使两终端系统能够互连且决定最佳路径,並具有一定的拥塞控制和流量控制的能力。
1.2.4. 链路层
数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输。数据链路层两个常用的协议是ARP协议(Address Resolve Protocol,地址解析协议)和 RARP 协议(ReverseAddress Resolve Protocol,逆地址解析协议)。它们实现了 IP 地址和机器物理 MAC 地址之间的相互转换。
1.2.5 数据传输
但是需注意一点, IP 层是有 Maximum Transmission Unit 最大传输单元 MTU 限制的,同理一次数据传输时 TCP 层是有 Maximum Segment Size 最大报文段长度 MSS 限制的,
以太网的MTU是1500,基本IP首部长度为20,TCP首部是20,所以MSS的值最大可达1460(MSS不包括协议首部,只包含应用数据)。
所以一个大的应用层信息传输时候可能会被切分若干块然后逐个传输。接收方收到每个包的应用层数据再组装成应用层数据,然后一个请求才算接收完成,这也是 Content-Length 字段存在的意义。
数据分包发送
1.3 OSI 跟 TCP/IP
OSI
OSI又称 开放式系统互联通信参考模型 ,是由国际标准化组织提出的一种概念模型,一个试图使各种计算机在世界范围内互连为网络的标准框架,它注重通信协议必要的功能是什么。
TCP/IP
现实生活中真正的网络传输通讯协议,注重在计算机上实现协议应该开发哪种程序。
OSI 跟 TCP/IP 区别
介绍完宏观的TCP/IP 协议簇后,接下来让我们从上到下进入网络的世界吧。
2 应用层 HTTP
2.1 HTTP 简单了解
2.1.1 HTTP 定义
HyperText Transfer Protocol,又名 超文本传输协议。HTTP 是对计算机世界里任意两点之间传输文字、图片、音视频等超文本数据的约定和规范。
HTTP
2.1.2 URI、 URN 、URL
URI:Uniform Resource Identifier 统一资源标志符,表示的是web上每一种可用的资源,URI只是一种概念,怎样实现无所谓,重点在于标识一个资源。
URN :Universal Resource Name 统一资源名称,通过特定命名空间中的唯一名称或ID来标识资源。
URL:Universal Resource Locator 统一资源定位符,URL 其实是 URI 的一种子集,不仅标识了一个资源还告诉了你如何访问它,一个标准的URL必须包括:protocol、host、port、path。
URL模板
举例三者关系:
2.2 HTTP 报文格式
请求 和 响应 报文都由 起始行、头部、空行、实体四个部分组成,只不过 起始行 稍有不同。
2.2.1 请求
请求报文格式
2.2.1.1 请求行
请求行又包含3个部分:请求方法、URL、协议版本。它们之间用空格分开,请求行最后以一个回车符 + 一个换行符结尾。
请求方法:表明想对目标资源进行何种操作,HTTP1.1 定义了下表中列出的 8 种请求方法,其中最常用的是 GET 和 POST。
URL:指定就是本次访问的目标地址。
协议版本:指定了客户端当前支持的 HTTP 版本,HTTP 目前通用的有 1.1、 2.0、3.0 三个版本,如果请求方指定了 1.1,应答方收到之后也会使用 HTTP 1.1 协议进行回复。
2.2.1.2 请求头
请求头部 用来告知服务器该请求和客户端本身的一些额外信息,每个请求头都是一个键值对,键和值之间用英文冒号隔开。每个请求头单独形成一行,它们的末尾都是一个回车符和换行符。在所有的请求头中,只有 Host 是必需的,其它请求头都是可选的,列举一些常见请求头:
2.2.1.3 空行
只包含一个回车符和一个换行符,不包含其它任何内容。这个空行用于标记请求头部已结束,它是必须要有的。
2.2.1.4 请求体
一般就是用户自定义的 信息体了,在消息头中可以通过 Content-Type 指定类型。
2.2.1.5 请求样例
请求样例
2.2.2 响应
响应报文格式
2.2.2.1 响应行
指定返回信息对应的 HTTP 版本、响应信息状态码、简单原因。
2.2.2.2 响应头
至于空行跟消息体几乎跟跟请求类似,而消息体类型是由 Content-Type 指定的。
2.2.2.4 响应样例
响应样例
2.3 HTTP 头字段
HTTP 协议规定了非常多的头字段,可以实现各种各样的功能,但基本上可以分为以下四类:
通过对 HTTP 头字段的设置,HTTP 提供了如下几个重要功能:
2.4 HTTPS 跟 HTTP
HTTP 是明文传输的,存在如下几个风险:
2.4.1 SSL/TLS 概述
SSL/TLS
为了保证安全性 HTTPS 应运而生,HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 加密协议,可以解决上述三个问题。
这里需注意一般 HTTP 默认是 80 端口,而 HTTPS 默认 443 端口。
2.4.2 加密算法
加密算法 分为 对称加密 跟 非对称加密。
HTTPS 采用的是 对称加密 + 非对称加密 = 混合加密方式:
2.4.3 摘要算法
摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,目前可以被解密逆向的只有CRC32算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。
消息摘要算法主要应用在数字签名领域,作为对明文的摘要算法。著名的摘要算法有RSA公司的MD5算法和 SHA-1 算法及其大量的变体。
校验完整性
2.4.4 CA 证书
非对称加密时,客户端保存公钥,如何确保公钥的准确性是个难题,如果有人窃取服务器公钥搞事情,那么整个数据传输过程中客户端跟服务器是感知不到第三方存在,但信息却早就泄露了!
非对称加密信息泄露
问题的关键就是如何保证客户端收到的是服务器的公钥!此时 数字证书就出现了,它就是基于上上面所说的私钥加密数据,公钥解密来验证其身份。
CA确保公钥正确传输
2.4.5 SSL/TLS 建立流程
先进行 TCP 的三次握手,然后准备加密通信,开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手 HandShake,也就是前面一直说的SSL/TLS模块,那么它的主要工作流程是啥呢,你可以认为是 ClientHello、ServerHello、Finish。
SSL/TLS 建立流程
客户端向服务器发起加密通信请求 : 客户端给出SSL/TLS协议版本号 + 一个客户端生成的随机数Random1 + 客户端支持的加密方法。
服务器端确认SSL/TLS版本是否支持,确认使用的加密算法,生成随机数Random2 (用来生成会话秘钥),生成服务器数字证书。
至此,双方已安全地协商出了同一份秘钥, SSL/TLS 的握手阶段全部结束。所有的应用层数据都会用这个秘钥加密后再通过 TCP 进行可靠传输。
2.4 HTTP 发展史
目前 HTTP 版本分为 HTTP/1.1、HTTP/2、HTTP/3 三个版本,主流用的是前面俩。
HTTP版本对比
2.4.1 HTTP/1.1
HTTP/1.1 相比于老版本优缺点如下:
优点:
缺点:
2.4.1 HTTP/2
HTTP/2 协议是基于 HTTPS 的,做了向下兼容同时还有如下优化。
缺点:
阻塞问题:HTTP/2 的分帧传输是在应用层进行的,最终数据要经过 TCP 传输,而 TCP 是可靠性连接,有丢包重传功能。如果有包丢失会导致所有的 HTTP 请求在等待被丢的包被重传回来。
2.4.1 HTTP/3
HTTP/3 把 TCP 协议改成了UDP,因为 UDP 是不管顺序、不管丢包的, 同时 Google 在 UDP 的基础上也加了 TCP 的连接管理、拥塞窗口、流量控制等机制,这套协议我们称之为 QUIC 协议。整体来说 HTTP/3 优化点如下:
2.5 HTTP 特性
HTTP 牛逼之处在于他只是规定了 header + body 的基本框架,里面具体填写啥用户可自定义,同时它的底层都是插拔式的组件,比如 SSL/TLS 的添加,二进制帧传送,UDP替换TCP等等。
不管是 TCP 还是 QUIC 都保证了 数据传输的可靠性。
HTTP 是 基于-请求 应答模型实现数据传输的。
HTTP 的每一个请求-应答都是无状态的,所以每次收发报文都是完全独立的,如果要实现一些连锁反应需要用到 Session 跟 Cookie 机制。
HTTP 只是一个在应用层规定好的传输协议而已,它的底层用的是 TCP 协议传输数据。
2.6 HTTP 常见状态码
常见的 HTTP 状态码 有五种类型。
3 附录
只大致讲解了TCP/IP协议的应用层跟传输层,网络层下篇见,看个更详细版本的 TCP/IP 协议。
TCP/IP协议
4 参考
SSL/TLS:https://www.bilibili.com/read/cv1003133
HTTP万字讲义:https://t.1yb.co/gcKW
小林网络专题:https://t.1yb.co/fQG3
HTTP状态码:http://tools.jb51.net/table/http_status_code
TCP/IP讲解:https://developer.51cto.com/art/201906/597961.htm
据外媒报道,俄罗斯电信运营商MTS日前宣布,其部分客户将能够在俄罗斯首都周边十...
近年来,在机器人产业发展如火如荼的情况下,餐饮传统行业逐渐焕发第二春。机器...
上一篇文章我们了解了Unix标准的5种网络I/O模型,知道了它们的核心区别与各自的...
今天突然看到一个砌墙机器人的简讯,一小时可以砌200块砖,又不需要吃饭喝水休息...
根据澎湃新闻报道,世界经济论坛公开了一份关于机器人革命的报告,引起了全球范...
近日,微信迎来了8.0版本的更新。在此次更新中,最让人津津乐道的便是聊天框自带...
上世纪,一位名叫尼古拉特斯拉的科学家,预言了100年后的今天,每个人手中都将有...
三大运营商的社交梦想仍未熄灭,趁着5G商用的东风,5G消息已经在为最后商用做准...
昨天微信出现了bug, 很多人无法接收到信息 ,微信刚道完歉,今天企业微信也崩溃...
1.你永远都不会知道,为你胡思乱想的人有多么爱你。 2.因为我有一个很爱我的他...