TCP/IP协议栈:
TCP分层:
TCP的通信过程:
TCP/IP和OSI模型的比较
相同点:1.两者都是以协议栈的概念为基础 2.协议栈中的协议彼此相互独立 3.下层对上层提供服务
不同点:1.OSI是先有模型;TCP/IP是先有协议,后有模型
2.OSI是国际标准,适用于各种协议栈;TCP/IP实际标准,只适用于TCP/IP网络
3.层次数量不同
TCP和UDP的对比:
字段 | TCP | UDP |
---|---|---|
是否连接 | 面向连接 | 无连接 |
是否可靠传输 | 可靠传输 | 不可靠传输 |
连接目标个数 | 一对一 | 支持一对一.一对多.多对多传送 |
是否有序 | 有序传输 | 无序传输 |
首部大小 | 首部最少20字节.最大60字节 | 首部8字节 |
传输方式 | 面向字节流 | 面向报文 |
常见应用 | 邮件服务.文件下载.网站浏览. | 语音聊天.视频聊天 |
TCP的特性:
工作在传输层 面向连接协议 全双工协议 半关闭 将数据打包成段,排序 确认机制 数据恢复,重传 错误检查 流量控制,滑动窗口 拥塞控制,慢启动和拥塞避免算法
TCP的三次握手:
5种状态 (CLOSED) (LISTEN) (SYN-SENT) (SYN-RCVD) (ESTAB-LISHED )
第一次握手(SYN):
客户端发送一个带有 SYN(同步)标志的数据包给服务器,并指定初始序列号(Sequence Number)。
这表明客户端请求建立连接,并且客户端进入 SYN_SENT 状态。
第二次握手(SYN + ACK):
服务器收到 SYN 数据包后,会回复一个带有 SYN/ACK(确认) 标志的数据包给客户端,确认收到客户端的请求。
同时,服务器也会指定一个初始序列号。
这表明服务器已经收到了客户端的连接请求,并同意建立连接。服务器进入 SYN_RCVD 状态。
第三次握手(ACK):
客户端收到服务器发来的 SYN/ACK 数据包后,会发送一个带有 ACK 标志的数据包给服务器。
这个 ACK 数据包不携带数据,仅用于确认服务器已经收到了客户端的确认请求。
客户端和服务器都认为连接已经建立,进入 ESTABLISHED 状态,可以开始进行数据传输。
TCP的四次挥手:
6种状态:(ESTAB-LISHED) (CLOSE-WAIT) (FIN-WAIT-2) (LAST-ACK) (TIME-WAIT) (CLOSED)
第一次挥手(FIN):
当一方(通常是客户端)希望关闭连接时,会发送一个带有 FIN(结束)标志的数据包给另一方(通常是服务器)。
这表明发送方已经完成了所有数据的发送,并请求关闭连接,但仍可以接收数据。发送方进入 FIN_WAIT_1 状态。
第二次挥手(ACK):
接收到 FIN 数据包的一方(通常是服务器)会回复一个带有 ACK(确认)标志的数据包给发送方,确认收到了关闭请求。
但是此时,接收方仍可能有未发送完成的数据,因此不能立即关闭连接,而是继续向发送方发送数据。
发送方收到 ACK 后进入 FIN_WAIT_2 状态,等待接收方发送完剩余数据。
第三次挥手(FIN):
当接收方(通常是服务器)确定不再有数据发送时,会发送一个带有 FIN 标志的数据包给发送方(通常是客户端)。
这表明接收方也已经完成了数据的发送,希望关闭连接。接收方进入 LAST_ACK 状态。
第四次挥手(ACK):
发送方(通常是客户端)收到 FIN 数据包后,会回复一个带有 ACK 标志的数据包给接收方(通常是服务器)。
这个 ACK 数据包表示发送方已经收到了接收方的关闭请求,并且也同意关闭连接。
发送方进入 TIME_WAIT 状态,等待一段时间(2 倍的最大报文段生存时间,MSL),以确保接收到最后一个 ACK 数据包。
UDP的特性:
1.工作在传输层 2.提供不可靠的网络访问 3.非面向连接协议 4.有限的错误检查 5.传输性能高 6.无数据恢复特性