OSI (Open System Interconnection 开放式系统互联) 参考模型:
具体可参考:OSI参考模型
它是由ISO国际标准化组织定义的一个标准,但只作为参考模型,所谓参考模型定义就是:供设备生产厂商或者软件厂商参考用的网络通信模型,而不是一个强制标准。TCP/IP 脱胎于OSI模型,所以要了解TCP/IP之前要先学习OSI。
OSI模型将网络通信的工作分为7层:也可以理解为7个步骤
1. 应用层:通常最具有代表性的协议:http、ftp、smtp、OICQ(QQ)等
2. 表示层:主要对数据进行处理,包括格式转化、加密、解密、压缩
3. 会话层:管理会话
4. 传输层:分配端口号port,建立连接 (TCP UDP)同时控制传输过程和资源开销
5. 网络层:提供路由选择(路由器),分配IP地址并寻址
6. 数据链路层:提供容错处理,差错控制,另一方面会将网络地址转化为mac地址,在物理层面进行寻址
7. 物理层:传输介质(网线、光纤),转化为二进制流通过光信号或电信号传输
对于我来说,并不需要深入理解每一层的机制,因为大部分的工作只停留在前4层。
TCP/IP 将OSI模型改写为4层
TCP协议(Transmission Control Protocol):传输控制协议
为了更好的理解TCP协议,可参考《使用wireshark分析TCP/IP协议中TCP包头的格式》
1. 建立连接(3次握手)
1>. 客户端向服务端发送SYN包,并进入SYN_SEND状态,等待服务器确认
2>. 服务器接收到SYN包,必须确认接收状态,发送ACK包响应,同时发送自己的SYN包,并
进入SYN_RECV状态
3>. 客户端接收到SYN+ACK包,进入ESTABLISHED状态,并向服务器发送SYN包确认ACK,服务器接收到ACK包,并进入ESTABLISHED状态
当客户端和服务端都进入ESTABLISHED状态,客户端和服务端就可以开始双向传递数据了。
具体流程如图:
2. 关闭连接
1>. 主动关闭方向被动关闭端发送FIN包,并进入FIN_WAIT1状态
2>. 被动关闭端接收到FIN包后,向主动关闭方发送ACK包,并进入CLOSE_WAIT;主动关闭 方接收到ACK包,向被动关闭方发送ACK包,并进入FIN_WAIT2状态。
3>. 被动关闭方发送FIN包,并进入LAST_ACK状态
4>. 主动关闭方接收到FIN后,向被动关闭方发送ACK包,此时主动关闭方进入TIME_WAIT状态,在2MSL(生命周期)时间后关闭连接;被动关闭方在接收到ACK后,关闭连接
3. 保证可靠 :也是TCP最重要的特点
UDP协议(User Diagram Protocol)用户数据报协议
UDP和TCP的最主要的区别在于可靠性的保证上面,主要体现在没有3次握手的过程。
UDP非常简单
特点:1. 可靠性差 ,它不会去关注数据报是否传输成功,是否丢失
2. 性能好
TCP和UDP选择问题
因为TCP基本可以使用所有场景,所用用TCP不会错,但是有些场景需要考虑性能和不需要可靠性保证,所以不需要所有数据的传输可靠,所以选择UDP,比如,视频聊天等