TCP与UDP的区别
- TCP是面向连接的,传输数据的时候需要三次握手建立连接,udp是面向无连接的,发送数据不需要建立连接
- tcp通过确定和重传机制,提供可靠的连接,可以保证无差错,无重复,而udp只是尽力的保证可以交付,tcp保证了稳定性,udp保证了实时性
- tcp是面向字节流的,及可将数据看成一串无结构的字节流,udp是面向报文的,udp没用拥塞控制,因此在网络出现拥塞的时候发送效率很低
- tcp是一对一,udp可以多对多
TCP为什么要三次握手
为了实现可靠的数据传输,tcp协议双方都必须维持一个序列号,以标识发送出去的数据包中,那些是被对方收到的,三次握手过程及是双方互相告知的起始号,并确定已经收到序列号的起始步骤
如果是两次握手,至多只有连接方的起始号能被确定,另一方不能被确定
还有一些原因原因就是,因为tcp是可靠连接,所以在传输的过程中会出现丢包和延迟的现象,服务器收到一个包,就开始分配资源,客户端却不知道已经开始连接,会浪费大量的资源
TCP为什么要四次挥手
因为当server收到的收到client的请求后,可以直接发送SYN+ACK报文,其中ack是用来应答的,syn是用来同步的,但是当关闭连接时,server不一定立即关闭socket,而是将他的他的报文发送完以后才关闭FIN报文,所以先发送一个ack报文说我知道了,之后等待报文都发完了再发送fin,固需要四次挥手
为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
TCP流量控制
原因:如果发送者发送数据过快,接受着来不及接受,那么就会有分组的丢失,流量控制就是控制发送者的发送速度,使接收者来得及接收,达到不丢失分组的目的,有时候会出现死锁现象,所以我们一般都会加一个定时器,到达一定时间就会自动推出
TCP拥塞控制
拥塞的概念:在某段时间,对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变化,这种情况叫拥塞。
拥塞控制:防止过多的数据注入到网络,导致网络中的路由器或链路过载。