UNPv1第二章:传输层

本章的焦点是传输层,包括TCP和UDP。
绝大多数客户/服务器网络应用使用TCP或UDP。
UDP是一个简单的、不可靠的数据报协议。而TCP是一个复杂、可靠的字节流协议。

1 UDP用户数据报协议

UDP是一个简单的传输层协议。应用程序往UDP套接字写入一个消息,该消息随后被封装成IPv4或者IPv6数据报。
UDP不保证数据报会达到最终目的地,不保证各个数据报的先后顺序跨网路后保持不变,也不保证每个数据报只到达一次。如果要确保到达目的,我们必须建立一大堆特性:来自另一端的确认、超时、重传等等。

2 TCP传输控制协议

首先,TCP提供客户与服务器的连接。TCP客户先于某个给定的服务器建立一个连接,再跨该连接与那个服务器交换数据,然后终止连接(面向连接的)。
其次,TCP还提供了可靠性。当TCP向另一端发送数据时,它要求对端返回一个确认。如果没有收到确认,TCP就自动重传数据并等待更长的时间。在数次重传失败后,TCP才放弃。
第三,TCP会给发送的每个数据报关联一个序号并且排序。保证了数据的可靠传输以及有序。
第四,TCP提供流量监控。如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
最后,TCP的连接是全双工的。这意味着在给定的连接上应用进程在任何时候既可以发送也可以接收数据。因此,TCP必须跟踪每个方向数据流的状态信息,如序列号和通告窗口大小。

3 TCP连接的建立与终止

建立:三次握手
UNPv1第二章:传输层_第1张图片
1.服务器必须准备好接受外来连接。这通常通过调用socket、bind和listen这3个函数来完成,我们称之为被动打开。
2.客户通过调用connect发起主动打开。这导致客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号(J)。
3.服务器必须确认(ACK)客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送数据的初始序列号(K)。
4.客户必须确认服务器的SYN。
图中客户的初始序列号是J,服务器的初始序列号是K。ACK中的确认号是发送这个ACK的一段所期待的下一个序列号。
TCP选项
(1)MSS选项。每个TCP分节中最大数据量
(2)窗口规模选择。TCP双方最大窗口大小是65535
(3)时间戳选项。可以防止失而复得的分组造成数据损坏

TCP连接的终止(需要四个分节)
UNPv1第二章:传输层_第2张图片
1.某个应用进程首先调用close,我们称该端执行主动关闭。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
2.接受到这个FIN的对端执行被动关闭。这个FIN由TCP确认。它的接收也作为一个文件结束符传递给接收端应用程序。
3.一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
4.接收这个最终FIN的原发送端TCP确认这个FIN。

TIME_WAIT状态
TIME_WAIT状态有两个存在的理由:
1.可靠地实现TCP全双工连接的终止;
2.允许老的重复分节在网络中消逝。

TCP状态转换图
UNPv1第二章:传输层_第3张图片

你可能感兴趣的:(UNPv1第二章:传输层)