TCP概念
TCP的定义和目的
定义:TCP是一种面向连接、可靠的、基于字节流的网络通信协议。
目的:在不可靠的网络信道上建立可靠的连接。
保证传输可靠的三个关键步骤:①三次握手 ②传输确认 ③四次挥手
三次握手
三次握手是指建立连接的过程。
当客户端向服务端发起连接时,会先发送一包连接请求数据去询问能否建立连接,这包数据我们称之为SYN包。(第一次握手)
如果服务端同意建立连接,则会回复一包SYN+ACK包。(第二次握手)
客户端收到回复之后,向服务端回复一包ACK包。(第三次握手)
至此,连接建立完成。
传输确认
我们知道,在数据传输过程中,数据可能会丢失,到达的顺序与预期的可能不一样。面对丢包和乱序问题。TCP协议为每个连接都建立了一个发送缓冲区。
从建立连接后的第一个字节的序列号为0,后面每个字节的序列号会增加。发送数据时,从发送缓冲区取一部分字节发送报文。
在TCP协议头中会附带序列号和长度,接收端在收到数据后需要回复确认报文,确认报文中的ACK等于接收序列号加长度,也就是下一包数据包需要发送的起始序列号。
这样一问一答的方式可以使发送端确认发送的数据已经被对方收到。
此外,发送端可以一次发送多包连续的数据。接收端只需要回复一次ACK就可以。
这样发送端可以把待发送的数据分割成一系列的碎片发送到接收端。接收端根据序列号和长度重构出来完整的数据。
在以上过程中,假如丢失了某些数据包,则接收端可以要求发送端重传。
TCP连接是全双工的,发送端接收端既可以是客户端也可以是服务端。
四次挥手
首先,不论是客户端还是服务端都是可以发起关闭连接请求的。四次挥手形容的就是关闭连接操作。
假设客户端主动发起连接关闭请求。
客户端先要向服务端发送一个FIN包,表示关闭连接,自己进入终止等待1状态。(第一次挥手)
服务端在收到FIN包后,向客户端发送一个ACK包,表示自己进入关闭等待状态,客户端进入终止等待2状态。此时,服务端还可以发送数据,客户端还可以接收数据。(第二次挥手)
服务端发送完数据后,发送一包FIN包进入最后确认状态。(第三次挥手)
客户端收到后回复ACK包,进入超时等待状态。经过超时时间后关闭连接,而服务端收到ACK包直接关闭连接。(第四次挥手)
客户端设置超时等待时间的目的是为了保证对方已经收到ACK包,若服务端没有收到ACK包会重新发送FIN包,客户端会重发ACK包以及刷新超时时间。
UDP概念
UDP特点
无连接:只知道对端的IP和端口号就可以发送,不需要实现建立连接。
不可靠:没有确认机制, 没有重传机制。如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息。
面向数据报: 应用层交给UDP多长的报文, UDP原样发送既不会拆分,也不会合并。