主要参考自以下两篇文章
几种常用网络传输协议
一文搞懂TCP与UDP的区别
将计算机网络体系结构进行7个层次划分:
物理层
将计算机与网络间的通信数据转化为可通过物理介质进行转移的电子信号
数据链路层
俗称“第二层交换机”,它决定数据传输的形式,负责对数据进行打包与解包,在具备了物理传输能力的基础上,将数据以帧为单位传输,形成信息帧
网络层
俗称“第三层交换机”,主要提供数据进行传输的路由,面向的是网络间的通信问题,即选择到达目标主机的最佳路径,并在该路径进行网络间的数据传输,因此,它也应该还具备有能够消除网络拥挤、进行流量控制和拥挤控制的能力
传输层
进行数据的传输与响应,提供端到端的数据传输,它主要解决的是数据在网络间的传输质量问题,QoS(Quality of Service,服务质量,指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力)这一概念就是这一层提供的主要服务
会话层
建立和终止连接
表示层
确认数据格式、不同数据格式间的转换、数据加密与数据的压缩
应用层
提供用户程序接口,将数据对接到具体的应用程序
计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。
不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则,而我们就把这种规则称为协议(protocol)
TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。
而这些协议的概念层可以划分为四层:
链路层:负责封装和解封装IP报文,发送和接受ARP/RARP报文等
(对应OSI中物理层、数据链路层)
网络层:负责路由以及把分组报文发送给目标网络或主机
(对应OSI中网络层)
传输层:负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文
(对应OSI中传输层)
应用层:负责向用户提供应用程序,比如HTTP、FTP、Telnet、DNS、SMTP等
(对应OSI中应用层、表示层、会话层)
TCP与UDP是TCP/IP 中有两个具有代表性的传输层协议
TCP协议全称是传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的RFC 793定义。TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管中的水流。
UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。
UPD:
1、无连接建立:
在进行数据传输前不进行连接的建立
2、可以进行单播、多播、广播:
不仅支持一对一,同时也可以一对多、多对一、多对多
3、面向报文:
不对数据进行包装和拆分处理、仅在首部添加UDP标识
4、不可靠传输
TCP:
1、需要连接建立与断开:
三次握手与四次挥手
2、只能单播
3、面向字节流:
对数据进行流形式的包装与拆分
4、可靠传输
三次握手(建立):
1、客户端向服务器发送连接建立请求(SYN)
2、服务器接收到请求,向客户端发送同意应答并同时向客户端发送连接建立请求(ACK + SYN)
3、客户端接收到消息,向服务器发送确认应答(ACK)
四次挥手(断开):
1、客户端向服务器发送连接断开请求(FIN)
2、服务器接收到请求,发送确认应答(ACK),断开客户端→服务器连接,但此时服务器→客户端连接还未断开
3、服务器数据发送完毕,发送连接断开请求(FIN)
4、客户端发送确认应答(ACK)
两者都是数据传输过程中的连接方式,其区别在于完成一次数据传输后是否断开连接:
短连接:建立连接 → 传输数据 → 断开连接
长连接:建立连接 → 传输数据 → 保持连接 → 传输数据 → 保持连接 → … → 断开连接
在实际使用中,长连接多用于点对点的频繁数据传输,如:玩家和玩家间的实时战斗;而对于单个连接无序频繁传输数据,但需要建立大量连接,并发量很大情况下,则使用短连接,如:WEB网站