HTTP/HTTPS TCP/IP 相关知识深入详解

第一部分:应用层HTTP

应用层协议定义了应用进程间交换的报文类型、报文构成部分具体含义以及交换时序等内容。即语法、语义、时序等协议三要素。

典型的网络应用编程接口是套接字(Socket),应用进程可以通过创建套接字实现与底层协议接口,并可以进一步通过套接字实现应用进程和底层协议间的报文交换。因此,套接字是每个应用进程与其他应用进行进行网络通信时,真正收发报文的通道。

HTTP概述:

HTTP是Web应用的应用层协议,定义了浏览器如何向Web服务器发送请求以及Web服务器如何响应浏览器。

历史版本更迭:

HTTP/0.9

1991年发布的原型版本,该版本的设计初衷是为了获取简单的HTML对象,只支持GET请求,没有定义任何首部,不支持多媒体内容的MIME类型和协议版本号。正是由于设计的缺陷,所以该版本只在早期短时使用,很快被HTTP/1.0取代。

HTTP/1.0

是第一个得到广泛应用的HTTP版本。该版本增加了协议版本号,各种首部行,额外的方法以及对多媒体对象的支持。HTTP/1.0使Web页面增添了生动的多媒体内容以及表单,增加了交互能力,因此被人们广泛接受。但是,HTTP/1.0的规范定义做得并不好。20世纪90年代中期,很多流行的Web客户端和服务器都在向HTTP中添加新的特性,以满足不同的需求。如持久连接keep-alive、虚拟主机支持以及代理连接支持等,都被增加到HTTP中,并成为非官方的事实标准。这种非正式的HTTP/1.0扩展版本通常被称为HTTP/1.0+。

HTTP/1.1(目前广泛使用)

是目前Web应用最广泛的HTTP版本,与HTTP/1.0版本相比,该版本支持更多的请求方法、扩展了一些首部、增加了响应状态码、改进了对缓存的支持等。重点是校正了HTTP设计中的结构缺陷,明确了语义,引入了重要的性能优化措施,并删除了一些不良特性。并且还包含了20世界90年代末正在发展的更为复杂的Web应用程序部署方式的支持(如WebDAV)。

HTTP/2.0

目前的最新版本,它最初称为HTTP-NG,是HTTP/1.1后继结构的原型建议,重点关注性能优化以及强大的服务逻辑远程执行框架。HTTP-NG的研究工作终止于1998年。但是,后期某些技术的提出与发展还是推动了2.0的探索和实践,其中最典型的就是SPDY。SPDY是speedy的昵音,意为更快。是Google开发的基于TCP的应用层协议。其目标是优化HTTP性能,通过压缩、多路复用和优先级等技术,缩短页面加载时间并提高安全性。SPDY的核心是减少TCP连接数,而对于HTTP语义并未做太多修改。

通过浏览器查看HTTP版本号:

火狐浏览器

HTTP连接:

概述:HTTP是基于传输层的TCP传输报文。浏览器在向服务器发送请求之前,先和服务器建立TCP连接,然后才能发送请求报文,并接受HTTP响应报文。根据HTTP在使用TCP连接时的策略不同,我们将HTTP分为非持久HTTP连接和持久性HTTP连接。

一:非持久连接

HTTP/1.0默认使用非持久连接

所谓非持久连接是只HTTP客户在和HTTP服务器建立TCP连接后,发送HTTP报文到接收到该请求的响应结果后,断开TCP连接。这就意味着下一次发送HTTP请求又得重新建立TCP请求。

下面我们通过一个例子来看看HTTP在使用TCP连接策略不同时所花费的时间。

例题:

假设用户在浏览器中输入了URL地址为 http://www.abc.com/index.html,该请求的index.html中引用了3个JPEG图像。

弊端

这种串行方式因为每次请求资源前都要单独的建立一次TCP连接,这就意味着每次资源请求都要再经历一次TCP拥塞控制的慢启动阶段,使得TCP连接,工作在较低的吞吐量状态,延迟会更加的明显。

非持久并行连接:

显然为了提高HTTP的性能,所以出现了非持久的并行连接

所谓并行连接,就是通过建立多条并行的TCP连接,并行发送HTTP请求和并行接收HTTP响应。

还是之前的例题,我们来看看在这种TCP连接策略下所花的时间。

注意

并行连接并不一定总能减小延迟,加快网页的加载速度。比如,客户主机接入链路带宽受限等。

另外,并行连接会增加客户端主机的资源开销,如内存开销等。因此系统通常对同时建立的并行TCP连接数是有限制的。同样,服务器也会对来自同一客户的并行TCP连接有限制。

二:持久性连接

1:持久性非管道连接

所谓持久性非管道连接就是客户端在通过持久连接接收到前一个响应报文后,才能发出下一个对象的请求报文。与非持久性连接相比,连接请求多个对象时,只需要建立一次TCP连接。这样,每获取一个对象只需要一个RTT时间。

之前例题在这种TCP连接策略下所花费的时间如下图

2:持久性管道式连接

HTTP/1.1默认情况下是使用这种持久性管道式连接

所谓持久性管道连接就是客户端在通过持久连接接收到前一个对象的响应报文之前,连续依次发送后续对象的请求报文,然后再通过该连接依次接收服务器返回的响应报文。使用持久性管道式连接时,获取一个对象平均时间是远小于1RTT时间的,如果忽略对象的传输时间,连续请求多个对象只需要1个RTT时间。

我们来看看还是之前例题中在这种TCP连接策略下所花的时间

关闭持久连接的方式:

1):客户端在最后一条请求报文中包含connection: close首部行。

2):客户端在收到响应报文中包含connection: close首部行。

3):超过一定时间。

注意:

1:每个持久连接只适用于一跳传输,HTTP/1.1代理必须能够分别管理与客户端和服务端的持久连接。

2:HTTP/1.1代理服务器不应该与HTTP/1.0客户端建立支持连接。

HTTP典型的请求方法:

1:GET 请求读取由URL所标识的信息资源,最常见的的方法。

2:HEAD 请求读取URL所标识的信息的首部,即无须在响应报文中包含对象。

3:POST 给服务器添加信息(例如:注释)

4:OPTION 请求一些选项的信息

5:PUT 在指明的URL下存储一个文档

HTTP状态码

HTTPS概述:

HTTPS = HTTP + SSL 或者 HTTP + TLS

也就是说HTTP协议使用SSL或TLS进行安全通信时,称为安全的HTTP,简记为HTTPS。

SSL英文全称:Secure Socket Layer,安全套接字层。

TLS英文全称:Transport Layer Security,传输层安全。TLS是SSL的变体,差异不大。

SSL/TLS是介于应用层和传输层之间,类似会话层,可作为基础协议栈的一部分,也可以直接嵌入浏览器中使用。

SSL/TLS提供安全套接字接口,数据处理完成后交给TCP传输。可以说,SSL/TLS可以为所有基于TCP的网络应用提供应用编程的接口,具有良好的通用性。SSL需要一组秘钥用于链接,并且需要在握手阶段进行证书交换并作为协议的一部分。

HTTPS与HTTP的区别:

❀ HTTPS需要向CA申请证书,CA免费证书是有限的,所以申请证书需要一定的费用。

❀ HTTP是明文传输,HTTPS是加密传输。且HTTPS在安全加密、解密过程中涉及多种密码和多种加密算法。

❀ HTTP更安全。

第二部分:传输层TCP/UDP

传输层概述:

传输层的核心任务是为应用进程之间提供端到端的逻辑通信。为此,传输层主要实现如下功能:

1:传输层寻址(IP+端口号);

2:对应用层报文进行分段和重组;

3:对报文进行差错检测;实现进程间的端到端可靠传输控制;

4:面向应用层实现复用和分解;

(多路复用和多路分解概念:支持众多应用进程共用同一个传输层协议,并能够将接收到的数据准确交付给不同的应用进程,称为传输层的多路复用和多路分解)

5:实现端到端的流量控制;拥塞控制等;

并不是所有的传输层协议都要实现所有这些功能,通常大部分传输层协议只实现其中一部分功能。

Internet的传输层主要有两个协议:面向连接的TCP协议和无连接的UDP协议。

UDP协议

用户数据报协议UDP是Internet传输层协议,提供无连接、不可靠、数据报尽力传服务。也就是说应用进程将报文发送你进一个UDP套接字时,UDP并不保证能将该报文送达目的地。它是一种轻量级传输层协议,只提供最基本的传输层服务。

DNS就是使用UDP协议的一个例子。

虽然UDP提供的是不可靠传输服务,但是使用UDP的应用依然可以实现可靠数据传输,只要应用层设计可靠传输机制即可。

TCP协议

总述:

传输层控制协议(TCP)是Internet一个重要的传输层协议。

TCP提供面向连接、可靠、有序、字节流传输服务。

TCP提供全双工通信服务,即TCP允许通信双方的应用进程在任何时候都能发送数据和接收数据。

三次握手(建立连接时)

SYN = 1时, 表示该TCP报文段是一个建立新连接请求控制段或者同意建立新连接的确认段

ACK = 1时, 标识确认序号字段有效。

ACK = 0时, 确认序号字段无效。

seq = x时,初始序号为x。

ack_seq = x + 1, 确认序号为x + 1.

为什么一定要三次握手建立连接?

为了确保连接双方彼此完全清楚对方状态(比如初始序列号和接收窗口大小等),从而保证可靠、稳定的建立连接。

同时,通过三次握手建立连接还可以有效预防过期,失效的连接请求到达后,导致无效连接的建立。

四次挥手(关闭连接时)

FIN = 1时,表示发送端数据已发送完毕,请求释放TCP连接。

ACK = 1时, 标识确认序号字段有效。

ACK = 0时, 确认序号字段无效。

seq = w时,初始序号为w。

ack_seq = w + 1, 确认序号为w + 1。

为什么要有TIME_WAIT时间等待状态?

主要原因是为了保证客户端发送的最后一个ACK报文能到达服务器端。

该ACK如果丢失,服务器得不到FIN+ACK的确认,会超时重传。

如果没有TIME_WAIT,那么就无法接收到服务器重传的FIN+ACK。

MSL是最大段生存时间,是任何TCP段被丢弃前在网络内“存活”的最长时间。

TCP规范【RFC793】规定的MSL为2min,但实际系统在实现TCP时设定的时间有所不同,比如BSD/386为30s, Soloris2.2为1min。

在什么情况下二次三次挥手可合并?

如果服务器收到客户端发送的FIN段(第一次挥手)时,刚好服务器向客户发送的最后一个数据段也发送完毕。在这种情况下可以把第二次挥手和第三次挥手合并为一个段落发送。

第三部分:网络层

网络层概述

网络层介于传输层和链路层之间,它关注的是如何将承载了传输层报文段的网络层数据报从源主机送达目的主机。

网络层要实现的主要功能是转发和路由选择。

除此之外,还为提供面向连接服务的网络提供另外一个重要的网络层功能:连接建立。

根据是否在网络层建立连接服务,分组交换网络可以分为仅在网络层建立连接的虚电路网络和仅在网络层提供无连接服务的数据报网络。

数据报网络(IP)

所谓数据报网络就是按照目的主机地址进行路由选择的网络。

因特网的IP都是按照目的主机的地址进行路由选择的,因此因特网是一个数据报网络。属于“无连接”服务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容