TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,同时是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。
我的理解: 互联网中的设备要相互通信,必须基于相同的方式,比如由哪一方发起通讯,使用什么语言进行通讯,怎么结束通讯这些都要事先确定,不同设备之间的通讯都需要一种规则,我们将这种规则成为协议。
TCP/IP协议中最重要的特点就是分层。由上往下分别为 应用层,传输层,网络层,数据链路层,物理层。当然也有按不同的模型分为4层或者7层的。
为什么要分层呢?在设计的角度来讲变得灵活了,当某一层需要修改时,只需要拿掉对相应的层,实现可拔插,无需变动所有层。对于使用者来讲,屏蔽了底层复杂的传输过程。
TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。这一层主要的代表有DNS域名解析/http协议
在TCP/IP模型中,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议。即:传输控制协议TCP和用户数据报协议UDP.
网络层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。网络层定义了分组格式和协议,即IP协议(Internet Protocol )。
该层负责 比特流在节点之间的传输,即负责物理传输,这一层的协议既与链路有关,也与传输的介质有关。通俗来说就是把计算机连接起来的物理手段。
控制网络层与物理层之间的通信,主要功能是保证物理线路上进行可靠的数据传递。为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的帧。帧是用来移动数据结构的结构包,他不仅包含原始数据,还包含发送方和接收方的物理地址以及纠错和控制信息。其中的地址确定了帧将发送到何处,而纠错和控制信息则确保帧无差错到达。如果在传达数据时,接收点检测到所传数据中有差错,就要通知发送方重发这一帧。
UDP的首部格式:
用户数据报有两个字段:数据字段和首部字段,数据字段很简单,只有8个字节,由四个字段组成,每个字段的长度都是两个字节。各字段意义如下:
源端口和目的端口: 各占两个字节,分别写入源端口号和目的端口号。
序号 : 占4个字节;用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。
确认号 : 占4个字节;期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。
数据偏移 : 占4位;指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
确认 ACK : 当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。
同步 SYN :在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。
终止 FIN : 用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。
窗口 : 占2字节;窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。
检验和: 占2个字节;检验和字段检验的范围包括首部和数据这两个部分。在计算检验和时,在TCP报文段的前面加上12字节的伪首部。
套接字: TCP连接的端点叫做套接字或插口。端口号拼接到IP地址即构成了套接字。
TCP的三次握手与四次挥手:
为什么要进行三次握手呢? 第三次握手是为了防止失效的连接请求到达服器,让服务器错误打开连接。客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。
如果此时变成两次挥手行不行?举个打电话的例子,比如:第一次握手:A给B打电话说,你可以听到我说话吗?第二次握手:B收到了A的信息,然后对A说:我可以听得到你说话啊,你能听得到我说话吗?第三次握手:A收到了B的信息,然后说可以的,我要给你发信息啦!结论:在三次握手之后,A和B都能确定这么一件事:我能听到你,你也能听到我。这样,就可以开始正常通信了。如果是两次,那将无法确定。
当数据传送完毕,断开连接就需要进行TCP的四次挥手:
最后完整的过程图
为什么要四次挥手?
客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
HTTP持久连接
如果有大量的连接,每次在连接,关闭都要经历三次握手,四次挥手,这显然会造成性能低下。因此。Http 有一种叫做 长连接(keepalive connections) 的机制。它可以在传输数据后仍保持连接,当客户端需要再次获取数据时,直接使用刚刚空闲下来的连接而无需再次握手。
什么是HTTP?
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
HTTP特点:
HTTP报文组成:
HTTP的缺点:
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。通常,HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL通信,再由 SSL和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披SSL协议这层外壳的 HTTP。
HTTPS通讯方式:
加密方法
对称加密:加密和解密同用一个密钥的方式称为共享密钥加密(Common keycrypto system),也被叫做对称密钥加密.
对成加密的方式效率比较低,加密速度慢。另外对称加密存在安全隐患的问题,堆成加密的密钥必须要传到对方对方才能解密,要是对方在密钥传输的过程获取到密钥,那不是密钥失去了加密的意义,所以完全使用对称加密也是不安全的。
非对称加密:公开密钥加密使用一对非对称的密钥。一把叫做私有密钥(private key),另一把叫做公开密钥(public key)。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。公钥加密,私钥解密使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。
那么非对称个加密就一定安全吗?非对称加密也不安全,为什么呢?因为存在中间伪造公钥和私钥,假如在公钥传给对方的时候,有人获取到公钥,虽然她不能用你的公钥做什么,但是它截获公钥后,把自己伪造的公钥发送给对方,这样对方获取的就不是真正的公钥,当对方用公钥进行加密文件,再将文件发送给对方,这样即使截获人没有获取到真正的私钥,但是加密时的公钥是截获人的,他获取到加密文件,只需要用自己的私钥进行解密就成功获取到文件了。
混合加密机制(对称加密与非对称加密结合的方式)顾名思义也就是对称加密和非对称加密的方式相结合。
如何证明公开没要本身的真实性。因为在公开秘钥传输的过程中,可能真正的公开秘钥已经被攻击者替换掉了。
为了解决上述问题,于是除了CA认证证书。服务器将CA证书发送给客户端,以进行公开密钥加密方式通信。接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:
那么公开密钥如何交接给客户端是一件非常重要的事,因此多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥,这样就确保公钥是使用认证机构的公钥避免了公钥伪造的过程,进而确保了安全。
作者:非科班的科班
来源:微信公众号