【金沙官网线上】一次HTTP请求的背后

TCP三次握手

客户端与服务器之间互相发送HTTP请求响应之前需要先进行TCP连接,因为HTTP是一个无连接、无状态协议,不存在连接的概念,只有请求和响应的概念。而请求和响应实际上只是数据包,他们需要传输通道进行传输,而这个传输通道就是TCP创建的通道。那么这个通道是如何创建的呢?就是通过TCP三次握手。

什么是TCP三次握手?

TCP三次握手的流程如下所示:

从图中可以看出,三次握手分为三步:

1.客户端向服务端发送连接请求报文

2.服务端分配资源,并向客户端发送确认报文

3.客户端分配资源,并向服务端发送确认报文

但是,为什么需要三次握手?因为网络带宽拥有着很大的延时并且不稳定,经常会出现数据包延时到达甚至丢失的情况,而如果没有了三次握手后两步的确认步骤,会出现服务器已经打开端口而客户端一直不连接的情况。而三次握手可以解决这个问题。


基础概念


网络七层模型

应用层

提供网络管理、文件传输、事务处理,Telnet、FTP、HTTP、SNMP、DNS,HTTPS.在这里稍微解释下.

HTTP

  • http0.9 是http协议的第一个版本,只有普通的get请求.

  • http1.0,引入post请求,让HTML的表单可以提交表单.引入加入请求头Header ,让
    既一次TCP连接后,可以多次通信,虽然HTTP1.0 默认是传输一次数据后就关闭。

  • http1.1,加入keep alive等.

HTTPS:加密数据传输

发起请求:通过443端口发起https请求
关于HTTPS,这里有一篇不错的文章[传送门]

宿主host:
(主机名) 加快域名解析,当进行DNS请求时,系统会自动检查host文件是否有这个网络域名映射关系。如果有则,调用这个IP地址映射,如果没有,再向已知的DNS服务器提出域名解析。也就是说Hosts的请求级别比DNS高。
**DNS(Domain Name System) **
域名解析器,将域名和ip绑定

表示层

不同数据编码格式的转换,提供数据压缩、解压缩服务,对数据进行加密、解密。例如图像格式的显示

会话层

将数据组合成数据Data,建立和维持对话.

传输层

将数据组合成段Segment,用tcp,udp等进行数据传输.

网络层

分割和重新组合数据包Packet,基于网络层地址IP,进行路径选择.例如路由器.

当前TCP/IP协议族:

  • IPv4的地址位数是32位,也就是说最多有2^32台电脑可以连接到互联网.

  • IPv6采用128位地址长度,也就是2^128台电脑可以连接.几乎可以不受限制地提供地址.除此之外,还改善了IPv4中解决不好的问题,主要有端到端IP连接、服务质量(QoS)、安全性、多播、移动性、即插即用等

  • ARP(Address Resolution Protocol) 地址解析协议(在IPv4)

数据链接层

在物理层上建立可靠的传输,单位是Frame.功能是:物理地址寻址,数据成帧,流量控制,数据监测等.例如网桥,交换机.
协议包括:SDLC(sychronous Date Line Control),HDLC,PPP(Point-to-Point),STP等

物理层

是数据传递的实体,数据传输单位是bit,例如光纤,电缆等.


在介绍TCP之前,先说一下UDP和TCP的区别

  • UDP传输就类似于写信,接收方事先并不知道你要写信给他;
    即无法判断在传输过程中,会不会发生丢包,阻塞,等情况.

  • TCP传输就像是打电话,必须等对方按了接听键你才能更他通话。
    TCP报文有自己的检测机制,检验、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输.

TCP协议的特点

TCP协议是一种面向连接的,基于字节流的传输层协议.TCP将用户数据打成报文段(如下报文图),在发送的时候启动一个定时器,在另外一端接受的时候,对数据会进行确认,排序,去重复(根据序列号,确认号比较进行确认)等操作.应用层的http,是使用TCP建立连接的.

如果想要充分读懂TCP是如何收发包,以及序列号的,请点击[传送门]

TCP报文首部:

  1. 源端口号:数据发起者的端口号,16bit

  2. 目的端口号:数据接收者的端口号,16bit

  3. 序号:32bit的序列号,由发送方使用,根据发送的字节数据变化

  4. 确认序号32bit的确认号,是接收数据方期望收到发送方的下一个报文段的序号,因此确认序号应当是上次已成功收到数据字节序号加1。

  5. 首部长度:首部中32bit字的数目,可表示15*32bit=60字节的首部。一般首部长度为20字节。

  6. 保留:6bit, 均为0

  7. 紧急URG:当URG=1时,表示报文段中有紧急数据,应尽快传送。

  8. 确认比特ACK:ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包。

  9. 推送比特PSH:当发送端PSH=1时,接收端尽快的交付给应用进程。

  10. 复位比特(RST):当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。

  11. 同步比特SYN:在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。

  12. 终止比特FIN:FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。

  13. 窗口:用来控制对方发送的数据量,通知发放已确定的发送窗口上限。

  14. 检验和:该字段检验的范围包括首部和数据这两部分。由发端计算和存储,并由收端进行验证。

  15. 紧急指针:紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数。

  16. 选项:长度可变,最长可达40字节


HTTP请求流程

时间线流程

这里写图片描述

网络层级关系


请求流程分析

解析域名(HOST/DNS)

  • 一个域名 会首先访问本地的Host文件,查看有没有域名对应的访问ip的映射
  • 如果有,就直接得到IP,如果没有,就通过DNS根服务器,
  • DNS根服务器会询问.net域名服务器,有没有此域名
  • net域名服务器会查找blog.csdn.net是否存在
  • 如果存在,就返回相应的IP地址
  • 金沙官网线上,ARP协议解析ip对应的物理地址,并加入到ARP缓存
  • 进行TCP握手

本文由金沙官网线上发布于Web前端,转载请注明出处:【金沙官网线上】一次HTTP请求的背后

您可能还会对下面的文章感兴趣: