Http协议再理解(一)经典模型、三次握手、四次挥手

 

一、网络协议分层--经典五层模型

各层作用请参见:https://www.cnblogs.com/qishui/p/5428938.html

物理层:定义物理设备之间如何传输数据

数据链路层:在通信的实体间建立数据链路链接

网络层:为数据在节点之间的传输创建逻辑链路

传输层:向用户提供可靠的端到端的服务,传输层通过封装向高层屏蔽了下层数据通信的细节

应用层:为应用软件提供了很多服务,构建于tcp协议之上,屏蔽了网络传输相关的细节

二、Http三次握手和四次挥手

前置:1、Http请求是基于Tcp connection这个链接的

           2、位码即tcp标志位,有6种标示:

                     SYN(synchronous建立联机) 、ACK(acknowledgement 确认)、 PSH(push传送)

                     FIN(finish结束)、RST(reset重置)、 URG(urgent紧急)

扫描二维码关注公众号,回复: 6241728 查看本文章

                    Sequence number(顺序号码) 

                     Acknowledge number(确认号码)

(一)三次握手:

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

注:为什么要采用三次握手,两次不行吗?

(二)四次挥手:

第一次挥手:TCP发送一个FIN(结束),用来关闭客户到服务端的连接。

第二次挥手:服务端收到这个FIN,他发回一个ACK(确认),确认收到序号为收到序号+1,和SYN一样,一个FIN将占用一个序号。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。(服务器端继续发送未发送完的数据)

第三次挥手:服务端发送一个FIN(结束)到客户端,服务端关闭客户端的连接。

第四次挥手:客户端发送ACK(确认)报文确认,并将确认的序号+1,这样关闭完成。

注:1、那么为什么是4次挥手呢?tcp握手的时候为何ACK(确认)和SYN(建立连接)是一起发送。挥手的时候为什么是分开的时候发送呢?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭 SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

2、为什么客户端最后还要等待2MSL?

第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。

第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。

三、TCP和UDP的区别  

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接  

(连接和无连接)

2、TCP提供可靠的服务。即通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;

     UDP尽最大努力交付,即不保证可靠交付

(可靠和不可靠)

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

    UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

(字节流和报文加拥塞)

4、每一条TCP连接只能是点到点的; UDP支持一对一,一对多,多对一和多对多的交互通信

(一对一和一对多)

5、TCP首部开销20字节;UDP的首部开销小,只有8个字节

(开销问题)

6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

简单再了解

1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

5、支持B/S及C/S模式。

参考:http://www.cnblogs.com/ranyonsue/p/5984001.html

          https://www.cnblogs.com/qdhxhz/p/8470997.html

         https://blog.csdn.net/qq_18425655/article/details/52163228

         https://blog.csdn.net/qzcsu/article/details/72861891

        https://blog.csdn.net/yanxinrui0027/article/details/70243665



作者:DannyCloud
链接:https://www.jianshu.com/p/bd31d3b23725
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

猜你喜欢

转载自blog.csdn.net/weixin_42637737/article/details/88069593