分类: LINUX
2012-03-17 22:12:27
TCP 三次握手
TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:
1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。
2. 服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号y、对客户端的序列号的确认x+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
3. .客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号y+1和序号x+1的ACK报文,一个标准的TCP连接完成。
TCP 使用类似的握手过程来结束连接。这可确保两个主机均能完成传输并确保所有的数据均得以接收.
上面是在网上看到的,看了还不是很明白。感觉还没有回答为什么需要握手,为什么是三次?
还是来看Richard Stevens的大作《unix 网络编程》(第三版)
2.6TCP连接和终止
2.6.1三路握手
第二点:
客户通过用connect 发起主动打开。这导致客户TCP发送一个SYN(同步)分节,他告诉服务器客户将在(待建立)连接中发送的数据的初始化列号。通常SYN分节不携带数据,其所在IP数据包只含一个IP首部,一些可能有的TCP选项。
也就是说,三次连接,是为了告诉和确认对方的,初始化序列号,和一些TCP选项。
TCP选项包括什么呢?
1、MSS选项(maximum segment size)最大分节大小。
2、窗口规模选项
3、时间戳选项。
这些选项在TCP传输过程中有什么作用的呢?下回分解……