UNIX网络编程学习笔记(Racoon)

最近学习了UNIX网络编程卷I这本书,现在做一些学习笔记供分享与回顾。
本篇主要聚焦于传输层,包括TCP,UDP和SCTP(stream Control Transmission Protocol,流控制传输协议)。绝大部分CS网络应用使用的是TCp或者UDP。SCTP是一个比较新的协议,最初设计用于跨因特网传输电话指令。
UDP是一个简单的、不可靠的数据包协议,而TCP是一个复杂、可靠的字节流协议。SCTP和TCP类似,也是一个可靠的传输协议,但是还提供消息边界、传输级别多宿支持和减小头端阻塞的方法。

  1. UDP
    UDP是一个简答的传输层协议,应用层往一个UDP套接字写入一个消息,该消息随后被封装到一个UDP数据报,然后有被封装进一个IP数据报,然后发送的目的地,UDP不保证数据最终会到达,也不保证先后书序,也不好保证每个数据只到达一次。为了检测可靠性,可以往应用程序中添置一大堆的特性,包括对端确认和本端的超市和重传等。
    每个UDP数据报都有一个长度。会随着数据一起传递到接收端应用进程。我们提到过TCP是一个字节流协议,没有任何边界记录,这一点与UDP不同。
    另外UDP是一个无连接服务,同一个套接字可以发不同的数据报给不同的服务器。
  2. TCP
    TCP基于先建立连接,在可靠性方面,发送数据时要求对端返回一次确认。如果没有收到确认,会自动重传数据并等待更长时间,在数次重传失败后才会放弃,一般为4-10分钟。(依赖于具体实现)
    TCP含有用于动态估算客户与服务器之间的往返时间(round-trip time,RTT)的算法,以便于知道等待一个连接需要多少时间。
    另外会对发送数据进行排序,可以帮助接收端进行顺序接收以及重复数据的丢弃。
    TCP提供流量控制,会告知对端在任何时刻,对方可以接收多少字节的数据,称之为通告窗口(advertised window)。从而保证不会使得接收端缓冲区溢出。
    最后TCP连接是全双工的,应用层可以在任何时刻在进出两个方向上既发送又接收数据。建立全双工之后可以根据需求转化为一个单工连接。
    (UDP可以是全双工的)
  3. SCTP
    SCTP用关联一词代替连接,因为支持多宿而涉及到不止两个地址。
    与TCP不同,SCTP是面向消息的,提供各个记录的按序递送服务,和UDP一样,由发送端写入的每条记录的长度随数据一起传递给接收端应用。
    SCTP可以在连接的端点之间提供多个流,一个流上的某个消息的丢失不会阻塞同一关联下的其他流上的消息投递,和TCP会阻塞投递的特性正好相反。
    SCTP多宿特性使得每个SCTP端点可以支持多个IP地址,这个特性可以增强应对网络故障的健壮性。一个端点可能有多个冗余的网络连接,每个网络又可能有各自接入互联网基础设备的连接。建立关联后,如果某个网络或者某个跨越互联网的通路发生故障,SCTP可以切换到使用已与该关联相关的另一个地址来规避发生的故障。

以上就是这次学习的一些主要记录了下次应该会设计到TCP连接建立和一些套接字状态相关知识。

你可能感兴趣的:(深入理解计算机系统)