1.网络模型结构
2.IP TCP的层次
3.HTTP和HTTPS区别
首先对于网络的七层结构
主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。
- IP TCP的层次
4层是指TCP/IP四层模型,主要包括:应用层、传输层、网络层和物理链路层。
TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层
TCP三次握手:
如果TCP连接保持,第二个请求发送就没有这“三次握手”的消耗,HTTP/2中同一个TCP连接里还可以并发地传输http请求。
所谓的三次握手即TCP连接的建立。这个连接必须是一方主动打开,另一方被动打开的。以下为客户端主动发起连接的图解:
第一次握手:建立连接,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1), 同时自己也发送一个SYN包(syn=k), 即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1) , 此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功) 状态, 完成三次握手。
完成三次握手,客户端与服务器开始传送数据,这样就保证了,每次传送数据都会准备到达目标设备了
三次握手的过程:
(1)男孩喜欢女孩,于是写了一封信告诉女孩:我爱你,请和我交往吧!;写完信之后,男孩焦急地等待,因为不知道信能否顺利传达给女孩。
(2)女孩收到男孩的情书后,心花怒放,原来我们是两情相悦呀!于是给男孩写了一封回信:我收到你的情书了,也明白了你的心意,其实,我也喜欢你!我愿意和你交往!
(3)男孩收到回信之后很开心,因为发出的情书女孩收到了,并且从回信中知道了女孩喜欢自己,并且愿意和自己交往。然后男孩又写了一封信告诉女孩:你的心意和信我都收到了,谢谢你,还有我爱你!
三次握手的原因
一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。
TCP四次挥手
当数据包发送完毕需要断开连接的时候, 就需要TCP的四次挥手来保证链接的合理断开,再次以浏览器和服务器的通信打比方:
主动结束方: 你好,我的数据发送完毕了,我要进入准备断开的状态了。(此时它虽然不再发送数据了,但是可以接受数据)
另一方:我知道了,我还没有发送完毕的,你等着吧
另一方:我也发送完毕了,可以断开链接了。(此时它也进入准备断开的状态)
主动结束方:好的,那断开吧
官方描述:
TCP四次挥手
1.客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送
2.服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号
3.服务器B关闭与客户端A的连接,发送一个FIN给客户端A
4.客户端A发回ACK报文确认,并将确认序号设置为收到序号加1
TCP为什么建立连接是三次,关闭连接是四次呢?
这是前端面试中在设计HTTP协议问题时,经常会被问的一个问题。其实也不难理解,因为服务端的listen状态下的socket当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
通过TCP协议使得两台设备成功链接,并成功发送了数据,接下来,就需要服务器端来处理数据了。
- HTTP和HTTPS区别
HTTP协议的特点:
HTTP超文本传输协议,是短连接,是客户端主动发送请求,服务器做出响应,服务器响应之后,链接断开。HTTP是一个属于应用层面向对象的协议,HTTP有两类报文:请求报文和响应报文
HTTP请求报文:一个HTTP请求报文由请求行、请求头部、空行和请求数据4部分组成
HTTP响应报文:由三部分组成:状态行、消息报头、响应正文
HTTPS:
安全超文本传输协议(Secure Hyertext transfer Protoccol), 它是一个安全通信通道,基于HTTP开发,用于客户计算机和服务器之间交换信息,使用安全套字层(SSL)进行信息交换,即HTTP的安全版
http 的 GET和POST 啥区别
1.GET请求的数据会附在URL之后,参数在地址后拼接
2.POST把提交的数据则放置在Http包的包体<request-body>中,参数在请求数据区放着,相对get请求更安全,并且数据大小没有限制
3.GET提交时,传输数据就会收到URL长度的限制,POST由于不是通过URL传值,理论上不受限