理解TCP和UDP
根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字。因为TCP套接字面向连接,因此也称为基于流(stream)的套接字
TCP是Transmission Control Protocol (传输控制协议)的简写,意为"对数据传输过程的控制"
TCP/IP 协议栈
如下图所示,TCP所属的TCP/IP协议栈(Stack,层)。
TCP/IP协议栈共分为4层。可以理解成数据收发分成了4个层次化过程。
TCP套接字收发数据时按照以下顺序(深色画出)
反之,通过UDP套接字收发数据时,通过以下流程完成
补充:数据通信中使用的协议栈(OSI)分为7层,上述所讲到的是TCP/IP模型(4层)。
1.链路层
链路层是物理链接领域标准化的结果,也是最基本的领域,专门定义LAN、WAN、MAN等网络标准。若两台主机通过网络进行数据交换,则需图中所示的物理连接,链路层就负责这些标准。
2.IP层
IP层设计的目的是为解决目标传输数据需要经过哪些路径。
IP层采用的是面向消息的、不可靠的协议。在传输数据时会帮我们选择路径。若传输过程中发生路径错误,则会选择其他路径;但如果发生数据丢失或错误,则无法解决。换言之,IP协议无法应对数据错误。
3.TCP/UDP层
IP层主要解决数据传输中的路径选择问题。TCP和UDP层以IP层提供的路径信息为基础完成实际的数据传输,因此该层又称为传输层(Transport)。
有一个疑问,TCP可以保证可靠的数据传输,但它发送数据时以IP层为基础,该如何理解两者关系呢?
IP层在传输多个数据包时,由于每个数据包都由IP层控制的,但缺少对应机制来调控数据包的发送时机,因此在传输顺序上是不可靠的。若只利用IP层传输数据,则可能导致数据包的顺序错乱(数据包B比先发的数据包A早到目标地址)、丢包(A、C包收到了但没有收到B包)、损坏(数据包A在接收时缺少了数据)。
此时,我们引入TCP协议。在数据交换过程中可以确认对方已收到的数据,并重传丢失的数据,使整个通信过程变为可靠。
4.应用层
支持运行于不同计算机上的进程进行通信,而这些进程则是为用户完成不同任务而设计的。
这篇文章主要是为实现TCP服务器端/客户端做知识铺垫哟~
想对TCP/IP模型进一步的加深理解,可以参阅这篇文章:深入浅出TCP/IP的四层结构及相互之间的内在联系