OSI 七层结构
三次握手和四次挥手
- 客户端一发送带有SYN标志的数据包—> 一次握手 一>服务端
- 服务端一发送带有SYN/ACK标志的数据包一> 二次握手 —>客户端
- 客户端一发送带有带有ACK标志的数据包一> 三次握手 一>服务端
为什么要三次握手
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
- 第一次握手:Client 什么都不能确认,Server 确认了对方发送正常,自己接收正常
- 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
- 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
所以三次握手就能确认双发收发功能都正常,缺一不可。
为什么要四次挥手
断开一个TCP连接则需要“四次挥手”:
- 客户端—发送一个FIN,用来关闭客户端到服务器的数据传送
- 服务器—收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号
- 服务器—关闭与客户端的连接,发送一个FIN给客户端
- 客户端—发回ACK报文确认,并将确认序号设置为收到序号加1
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
举个例子:A和B打电话,通话即将结束后,A说“我没啥要说的了”,B回答“我知道了”,但是B
可能还会有要说的话,A不能要求B跟着自己的节奏结束通话,于是B可能又巴拉巴拉说了一
通,最后B说“我说完了”,A回答“知道了”,这样通话才算结束。
Http 协议在哪一层?与Tcp 协议的关系?
HTTP 属于应用层协议。
HTTP 的长连接和短连接本质上是 TCP 长连接和短连接,在传输层使用 TCP 协议,在网络层使用 IP 协议。
IP 协议主要解决网络路由和寻址问题,TCP 协议主要解决如何在 IP 层之上可靠的传递数据包,使得网络上接收发送端所发出的所有包,并且顺序与发送顺序一致。
TCP 协议是可靠的,面向连接的。HTTP 协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。
应用层协议
分类
应用层(Application Layer)包含所有的高层协议,包括:
- 虚拟终端协议(TELNET,TELecommunications NETwork);
- 文件传输协议(FTP,File Transfer Protocol);
- 电子邮件传输协议(SMTP,Simple Mail Transfer Protocol);
- 域名服务(DNS,Domain Name Service);
- 网上新闻传输协议(NNTP,Net News Transfer Protocol);
- 超文本传送协议(HTTP,HyperText Transfer Protocol);