有关TCP协议中的三次握手和四次挥手
TCP中的三次握手主要目的是为了建立可靠的连接,因此当客户端想要与服务端建立连接的话,客户端首先要向服务端发送syn报文,接着服务端发送syn+ack报文,此使表示服务端已经同意建立连接,此使需要客户端需要发送ack确认报文,经过两次确认之后才建立了连接,之所以不是两次,因为两次的话如果服务器发送给客户端的确认报文出现丢失的话,客户端是无法正常接收后面的服务端的消息报文,如果是四次就造成效率浪费了,只要C端能通讯S端,S端能通讯C端,则两者之间的通讯链路就是正常的。
关于四次挥手,首先考虑下实际的情况,C端如果请求断开链接的时候S端还有报文需要完成传送,因此,传送完之后让S端关闭连接需要一次终止连接报文,以及对终止连接的确认,在这之前,为了保证让S端执行关闭报文的传送,必须C端要发一次请求终止连接的报文,那么接下来是否S端是否需要对关闭连接报文的确认,如果不确认的话,就无法知悉服务端是否知晓要断开链接,所以这个时候需要S端发送确认报文。
TCP是面向链接的协议,所以建立的是可靠的连接,而UDP是面向报文的协议,所以建立的是不可靠的连接,建立可靠的连接需要更复杂的算法以及更多的资源消耗包括连接次数,报文数据,所以速度响应不如UDP,如果要使UDP也变得可靠,需要在UDP之上再封装上层协议来保证可靠传输。目前FTP,Telnet,SMTP,HTTP这些都是在TCP基础之上的应用层,但是TCP只能一对一通讯,UDP可以一对多通讯,所以适用于对实时性较强的场景,多用于网络游戏。