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


当应用层准备好了这个包以后 , 会把它发往**目标地址** 。那么第一个问题来了 , 当我在应用层准备好数据包之后 , 我是直接发送么?还是要做什么准备工作?
首先 , 在准备发起真正的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去建立传输的通道 。也就是说 , 没有应用层咯?嗯 , **简单说就是 , 网络传输中 , 可以有下层 , 没上层 , 但是不可能有上层 , 没下层 。** 这个一定要注意 。

经验总结扩展阅读