Skip to content

Files

Latest commit

57806be · Jul 18, 2019

History

History
9 lines (5 loc) · 1.25 KB

tcp_establish.md

File metadata and controls

9 lines (5 loc) · 1.25 KB

tcp三次握手

主机A与主机B建立连接,主机A会先发送一个SYN报给主机B,主机B会返回确认应答ACK或者否定应答NACK。如果这时主机A长时间没有收到主机B的应答,主机A会重发SYN报给主机B,实现了重发数据包的功能。当主机B发送ACK给主机A后,主机A也会发送一个ACK包给主机B,这时建立连接。

TCP有顺序控制的功能,通过序列号来确认发送的数据。在发送SYN包前,假设主机A的初始序列号为1000,以该序列号依次往下进行数据编号,然后告诉主机B初始序列,同时主机B会对A的序列号进行确认,假如主机B返回一个2000的序列号,则代表字节编号为1000-1999,表示主机B接收1000字节。

为什么不是两次握手

两次握手就建立连接,假如主机A发送的SYN因网络的问题迟迟没有到达主机B,这时候会重发另一个SYN包给B,当A接收到B的ACK包时建立连接。这时如果第一个SYN到达B时,主机B会认为主机A希望再次重新建立连接,会返回一个ACK包给A。当A收到ACk时会抛弃这个包,因为A并不想建立连接,这时主机B认为连接已经建立,会一直等待主机A发送数据,这样会导致主机B的性能损耗。