前言
ps:计算机或电子专业的伙伴当年一定都学习过计算机网络基础,今天让我们带大家重温一下,这个在面试中也是必考内容。。
一、初识http、https?
1.http: 超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当【摘自百度百科http】。
2.https:(全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面【摘自百度百科HTTPS】。
PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。
3.TCP/IP: ①tcp、ip协议,是一个协议族,我们通常见到的协议基本上均会在TCP/IP协议族的基础上运作,譬如1中提到的HTTP就是他内部的一个子集。
②协议:计算机与网络间需要相互通信,如果实现相互间的通信,如何进行通信目标的检测,由哪边先发起并由哪种语言进行通信、且怎样结束通信均需要进行确定。且不同的硬件、操作系统,所有的一切均需要一种共性且相同的规则,我们就将这种规则称呼为协议。
图1.1 互联网各类协议
③ TCP/IP协议:像图中各类协议将其整合起来,集合起来,总称为TCP/IP。
4.网络协议的分层管理
①协议模型概念
五层协议模型:五层体系的协议结构是综合了OSI和TCP/IP的优点的一种协议,包括(从下到上):物理层、数据链路层、网络层、运输层、应用层。(最底下两层可以称为网络接口层)
OSI参考模型:(Open System Interconnect),即开放式系统互连。 一般都叫OSI参考模型,是ISO组织在1985年研究的网络互连模型。该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),即OSI开放系统互连参考模型
TCP/IP参考模型:TCP/IP是一个四层的体系结构,他包括(从下到上顺序):网络接口层、网际层(用网际层这个名字是强调这一层是为了解决不同的网络的互联问题)、运输层、应用层。不过从实质上讲,TCP/IP只有最上面的三层,因为最下面的网络接口层并没有具体内容。
②网络协议结构体系图
上述是三种网络协议以及对应的体系结构,通常情况下,我们的TCP/IP协议使用的是四层网络协议结构,HTTP协议使用的是五层协议体系结构,这一块的知识我们了解即可。
那么接下来,带着大家了解一下他们之间的关系以及相应的区别和常常面试中遇到的问题呗
二、各类协议的不同之处
1.HTTP、HTTPS
①http是明文进行数据传输,因此安全性较差。https(ssl+http)进行加密的,安全较高
②HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包
③http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443
④HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源
2.TCP与UDP(了解)
①基于连接与无连接;
②对系统资源的要求(TCP较多,UDP少);
③UDP程序结构较简单;
④流模式与数据报模式 ;
⑤TCP保证数据正确性,UDP可能丢包;
⑥TCP保证数据顺序,UDP不保证。
⑦两个不同的数据包头协议结构如下,对应的是③
TCP包头结构:
源端口 16位;目标端口 16位;序列号 32位;回应序号 32位;TCP头长度 4位;reserved 6位;控制代码 6位;窗口大小 16位;偏移量 16位;校验和 16位;选项 32位(可选)
UDP包头结构:
源端口 16位;目的端口 16位;长度 16位;校验和 16位
3.TCP的三次握手与四次挥手(重点考察)
字段以及含义
URG :紧急指针是否有效。为1,表示某一位需要被优先处理
ACK :确认号是否有效,一般置为1。
PSH :提示接收端应用程序立即从TCP缓冲区把数据读走。
RST :对方要求重新建立连接,复位。
SYN :请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1
FIN :希望断开连接。
三次握手:
第一次握手:客户端发起建立连接请求,发送建立连接syn(syn=x)包到服务器,进入SYN_SENT状态,等待服务器确认。
第二次握手:服务器收到syn包,确认客户端的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
三次握手的图如下所示:
四次挥手整体过程:
①客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态
②服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已无数据发送,但服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间
③服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)
④服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认
⑤客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCP后,才进入CLOSED状态
⑥服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
总结
1.三次握手与四次挥手总结
三次握手:
第一次握手:客户端发起建立连接请求,发送建立连接syn(syn=x)包到服务器,进入SYN_SENT状态,等待服务器确认。
第二次握手:服务器收到syn包,确认客户端的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
四次挥手:
第一次挥手:客户端发送释放请求,停止发送数据,进入等待
第二次挥手:服务器收到请求,发出确认报文,且服务器发送确认请求后,客户端进入等待以及终止等待时间
第三次挥手:服务器发送玩最后的数据,发送释放请求,客户端进入时间等待,连接未释放
第四次挥手:客户端收到服务器发送的释放请求后,发出确认,进入时间等待,服务器端接收到客户端发出的请求,立即进入closed状态,结束此次连接
2.常见的面试题
1)为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为服务端收到客户端发送的SYN连接请求报文后,可以直接发送SYN+ACK报文。
当服务器端收到客户端发来的FIN报文时,可能不会立即关闭,只能先回复客户端:“铁子,你发的FIN我收到了”,只有等待服务器端将所有报文处理完成后,才能发送FIN给客户端,因此不能同时发送,只能四次挥手
2)为什么不能用两次握手进行连接?
3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认
3)文中说到了http以及https,那么http的无状态连接是什么?如何解决无状态连接呢?
详情见下篇文章