一.概述
TCP传输控制协议 (Transmission Control Protocol)。
TCP是一个面向连接的协议,为用户进程提供可靠的全双工字节流。TCP套接字是一种流套接字(streamsocket)。TCP关心确认、超时和重传之类的细节。大多数因特网应用程序使用TCP。注意,TCP既可以使用IPv4,也可以使用IPv6。
UDP用户数据报协议 (User Datagram Protocol)。
UDP是一个无连接协议。UDP套接字是一种数据报套接字 (datagram socket)。UDP数据报不能保证最终到达它们的目的地。与TCP一样,UDP既可以使用IPv4,也可以使用IPv6。
二.用户数据包协议UDP
UDP是一个简单的传输层协议,。应用进程往一个UDP套接字写入一个消息,该消息随后被封装 (encapsulating) 到一个UDP数据报,该UDP数据报进而又被封装到一个IP数据报,然后发送到目的地。UDP不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数据报只到达一次。
我们也说UDP提供无连接的 (connectionless)服务,因为UDP客户与服务器之间不必存在任何长期的关系。举例来说,一个UDP客户可以创建一个套接字并发送一个数据报给一个给定
的服务器,然后立即用同一个套接字发送另一个数据报给另一个服务器。同样地,一个UDP服
务器可以用同一个UDP套接字从若干个不同的客户接收数据报,每个客户一个数据报。
三.传输控制协议TCP
1.TCP通过给其中每字节关联一个序列号对所发送的数据进行排序 (sequencing)。举例来说,
假设一个应用写2048字节到一个TCP套接字,导致TCP发送2个分节:第一个分节所含数据的序
列号为1~1024,第二个分节所含数据的序列号为1025~2048。(分节是TCP传递给IP的数据单
元。)如果这些分节非顺序到达,接收端TCP将先根据它们的序列号重新排序,再把结果数据传
递给接收应用。如果接收端TCP接收到来自对端的重复数据(譬如说对端认为一个分节已丢失
并因此重传,而这个分节并没有真正丢失,只是网络通信过于拥挤),它可以(根据序列号)判
定数据是重复的,从而丢弃重复数据。2.再次,TCP提供流量控制(flow control)。TCP总是告知对端在任何时刻它一次能够从对端
接收多少字节的数据,这称为通告窗口 (advertised window)。在任何时刻,该窗口指出接收缓
冲区中当前可用的空间量,从而确保发送端发送的数据不会使接收缓冲区溢出。该窗口时刻动
态变化:当接收到来自发送端的数据时,窗口大小就减小,但是当接收端应用从缓冲区中读取
数据时,窗口大小就增大。通告窗口大小减小到0是有可能的:当TCP对应某个套接字的接收缓
冲区已满,导致它必须等待应用从该缓冲区读取数据时,方能从对端再接收数据。3.最后,TCP连接是全双工的(full-duplex)。这意味着在一个给定的连接上应用可以在任何时刻在进出两个方向上既发送数据又接收数据。因此,TCP必须为每个数据流方向跟踪诸如序列号和通告窗口大小等状态信息。建立一个全双工连接后,需要的话可以把它转换成一个单工
连接(见6.6节)。