目录
七层网络模型

- IP、socket在网络层
- TCP、UDP在传输层
- HTTP在应用层
- HTTPS是HTTP的安全版本
TCP/IP的三次握手
握手过程
- 第一次握手:建立连接时,客户端进入SYN_SENT状态,客户端发送SYN包(seq = x)给服务器,等待服务器确定。
- 第二次握手:服务器收到客户端的SYN包后进入SYN_RECV状态,给客户端发送一个ACK包(ack = x+1),用来告诉客户端服务器已经收到了SYN包并已确认,同时也给客户端发送一个SYN包(seq = y)。
- 第三次握手 :客户端收到服务器的SYN+ACK包后进入ESTABLISHED状态,客户端向服务器发送ACK包(ack = y+1),当服务器收到这个ACK包后,服务器进入ESTABLISHED状态,此时双方TCP建立连接成功,可以开始全双工通信。
为什么需要三次握手
TCP连接是全双工的,即需要client和server两端发送消息的两个方向都要连接成功,那么为了保证两端都连接成功,至少需要三次通信来建立连接,次数增多了也是在浪费资源,所以需要三次握手。
TCP/IP的四次挥手
挥手过程
- 第一次挥手:断开连接时,客户端发送FIN包(seq = u)到服务器。
- 第二次挥手:服务器收到客户端的FIN包后并确认后,向客户端发送ACK包(ack = u+1,seq = v),同时服务器发送结束标识到应用层程序,应用层程序可以决定马上结束还是等服务器处理完数据后结束,结束后,应用层程序会关闭与服务器的连接。
- 第三次挥手:服务器处理完数据后,应用层程序会关闭与服务器的连接,服务器发送FIN+ACK包(seq = w,ack = u+1)到客户端,然后关闭服务器。
- 第四次挥手: 客户端收到服务器的FIN+ACK包后,发送结束标识到应用层程序,应用层程序关闭与客户端的连接,然后客户端向服务器发送ACK包(seq = u+1,ack =w+1),然后关闭客户端。
为什么需要四次挥手
因为TCP协议是一个全双工协议,在断开连接时必须单独拆开每一条信道,四次挥手的目的就是中断通信,终止数据传输,并且回收资源,此时两个方向的端点都没有任何关系,必须等两个方向都没有数据传输后,才能拆解虚链路,发现SYN包后就初始化一个序列号并确认SYN的序列号。因此必须单独在一个方向上终止该方向的数据传输,至少需要四次操作。
为什么连接时是三次握手,断开连接时是四次挥手
在连接时当服务器收到客户端的SYN包连接请求后,服务器可以直接发送SYN+ACK包,ACK包用来应答,SYN包用来同步,断开连接时,服务器收到客户端的FIN包后,可能不会马上关闭服务器,只能发个ACK包用来应答,只有当服务器的数据处理完毕,服务器才会发送FIN+ACK包关闭服务器。
如果已经建立了连接,客户端突然故障如何处理
服务器每收到一次客户端请求后都会重新启动TCP的保活计时器,时间一般是两个小时,两个小时后还收不到客户端的任何数据,服务器就会发送一个探测报文,随后每隔75s发送一个探测报文,当连续发送10个仍然没有反应,服务器会认为该客户端发生故障,从而关闭连接。
socket、TCP/IP、HTTP的区别
- TCP/IP协议是一个协议栈,而socket是通信的基石,是对TCP/IP协议的封装,即socket是网络开发的接口
- TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,HTTP协议是应用层协议,主要解决如何包装数据
socket
- socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。
- socket包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
TCP/IP
- 在不同网络之间实现数据传输的协议栈
- 由TCP、UDP、IP、FTP、SMIP等协议组成的TCP/IP协议栈
HTTP
- 建立在TCP/IP协议上的一种应用,包装在网络中传输的数据