真正“搞”懂HTTP协议02之空间穿梭( 三 )

  • SMTP(简单邮递发送协议:通常用作发送电子邮件信息)
  • POP3(邮局协议:主要用于支持使用客户端远程管理在服务器上的电子邮件)
  • Whois(是用来查询互联网中的域名的ip以及所有者等信息的传输协议)
  • 等等 , 当然还有很多很多 。
    其中有一部分我们会在本系列中粗略的讲讲,比如DNS、SSH啥的,剩下的与HTTP关联性不大的,大家有兴趣可以自行了解 。
    在应用层的阶段,我们讲HTTP嘛,所以就以HTTP为例 , 会形成一个数据包,这个数据包有哪些内容我们暂时可以不去管 。反正就是一个包 。
    当应用层准备好了这个包以后,会把它发往**目标地址** 。那么第一个问题来了,当我在应用层准备好数据包之后,我是直接发送么?还是要做什么准备工作?
    首先,在准备发起真正的HTTP数据包传递之前,浏览器会率先把目标地址也就是一个域名发送给DNS服务器,换取目标IP 。
    然后我们就需要进行下一步,创建TCP通道,也就是通过三次握手建立TCP链接 。
    欸?感觉上面的描述有点问题,我在准备好包以后再去查DNS、建立TCP链接,那如果我TCP链接建立失败了,那我HTTP的数据包不是白处理了么?
    哇^v^,好吧,被你发现了,其实这么说确实不太准确,更准确的应该是,在准备发起HTTP请求时,就会去做准备工作,等准备工作都做好了,才会去构建请求信息,然后传递出去 。
    整个过程,大致如下图所示:
    真正“搞”懂HTTP协议02之空间穿梭

    文章插图
    第四层/传输层:车在路上跑,我在路边瞧一瞧上一小小节,我们停在了与服务器建立链接的部分,这链接还没建立完呢,你就不说话了 。嗯 。。。因为后面的事情其实与应用层的关系不大,所以我们拿到这一小节传输层来聊一聊 。
    传输层的协议数量就要比引用层少的多的多的,有点绕,哈哈哈 。
    传输层协议除了我们最熟悉的TCP与UDP之外,还有诸如:DCCP(数据拥塞控制协议)、SCTP(流控制传输协议)、RSVP(资源预留协议)等协议 。当然这些协议 , 我们了解下就好 。重点还是在TCP和UDP 。
    TCP大名叫做传输控制协议 , 英文名叫做Transmission Control Protocol,TCP是传输控制协议的英文名的缩写 。它是一种面向连接的、可靠的、基于字节流的传输层通信协议 。
    可靠和基于字节流都比较好理解 , 面向连接是怎么个意思?我听说过面向对象,面向过程,怎么还有面向连接?怎么个面向法?我在大马路上看车来车往算是面向连接么?(不好意思,一不小心点了一下题) 。
    假如你在大马路上看车跑来跑去,那如果这个车到了某个目的地又返回到出发点,来来回回,来来回回,那就算是面向连接,如果这车从你面前过去,不回来了,跑没影了,那就不算 。
    好啦 , 通过一个小栗子,我们大概理解了什么是面向连接 , 简单说就是有来有回呗 。那么有来无回呢?巧了,就是UDP协议 。
    UDP的全称是用户数据报协议,英文名叫做**U**ser **D**atagram **P**rotocol,它是一个简单的面向数据包的协议 , 换句话说,就是我只负责传输数据包,在传输的过程中跑丢了 , 那就不归我管了 。
    简单介绍了点概念哈,我们继续上一小节中的图 , 在真正发送HTTP数据包之前,最重要的就是要创建TCP连接 , 但是,要注意,我们创建TCP连接时,实际上并不关应用层什么事,只是应用层需要这个连接,所以才告知TCP去建立传输的通道 。也就是说,没有应用层咯?嗯 , **简单说就是,网络传输中,可以有下层,没上层,但是不可能有上层,没下层 。** 这个一定要注意 。
    那么创建通道的第一步,大家一定耳熟能详,就是TCP的三次握手 。欸?为啥是三次,不是一次,不是三十次?嗯,因为三次,是双方可以最小确认彼此的次数 。再解释下,也就是说,是客户端与服务器各自都可以收到一个来回的信息 , 还记得面向连接不?
    我们来看看三次握手是咋握的 。
    真正“搞”懂HTTP协议02之空间穿梭

    文章插图
    欸?你这不对啊,你这哪有握手的过程,"与服务器建立连接"这几个字,就代表了三次握手的内容 。当然,真正的三次握手是这样的:
    真正“搞”懂HTTP协议02之空间穿梭

    文章插图
    我们来看上图哈,里面还有点东西的 。在最开始的时候,客户端和服务器都处于关闭的状态,然后服务器会处于监听的状态 。当客户端发起第一次握手连接请求时,客户端会设置当前的状态为SYN_SEND的状态 , 注意这里发送的seq=x,**这个x并不是一个随机数,而是当前的TCP包的序号**,注意这一点,我们描述完整个过程会在说说这个序号 。

    推荐阅读