一、网络协议分层--经典五层模型
各层作用请参见: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紧急)
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