1.什么是tcp和udp
常用的网络通讯,浏览网页、软件聊天等等,都是基于tcp和udp传输的
2.tcp和udp的区别是什么?
1:最大的区别是一个基于连接、一个基于非连接
举例说明:如果把人与人之间的通信比喻为进程之间的通信,写信和电话
TCP:传输数据稳定可靠,适用于对网络要求较高的场景,需要准确无误的传输给对方
如:传输文件、发送邮件、浏览网页等
UDP:优点速度快,但是可能产生丢包等现象,适用于需要实时性较高,但对少量丢包没有影响的场景
如:域名查询、语音通话、视频直播等
3:tcp如何保证连接
三个关键步骤:
1.三次握手:是建立连接的过程
1.1:客户端向服务端发起连接时,会先发一个连接请求数据,能否连接, 称为:SYN:发起一个新连接
1.2:服务端同意连接,回复 SYN+ACK
1.3:客户端收到回复 ACK ---> 确认序号的有效
经过三次握手客户端和服务端都进入数据传输状态。
1.4:为什么是三次握手,而不是两次握手?
第二次发出请求时连接已成功,但是第一次发出的请求这个时候恢复了,这会造成服务端认为发出一次请求,客服端认为发出两次请求,这样服务端会在等待客户端回复,客户端认为一次请求自然不会回复,这就造成了服务器会一直携带这CPU等资源在等待,这就是为什么不能两次握手,第三次主要是为了防止已失效的请求报文段突然又传送到了服务端而产生连接的误判,第三次握手就是为了再不可靠的通信道路上建立可靠的连接。
2.传输确认
3.四次挥手
处于连接的客户端和服务端都能发起关闭连接请求,需要四次挥手进行关闭。
3.1:第一次挥手:假设客户端主动发起关闭连接请求,需要向服务端发起一个FIN,表示要关闭连接自己进入终止等待状态1
3.2:第二次挥手:服务端回复ACK,表示自己进入关闭等待状态,客户端进入终止等待状态2,
3.3:第三次挥手:在第二次挥手后,服务端此时还可以发送未发送完的数据,客户端还可以接收数据。服务端发送完数据,会向客户端发送一个FIN,进入最后确认状态
3.4:第四次挥手:客户端收到FIN后,会回复ACK,进入超时等待状态,经过超时时间后会关闭连接,而服务端收到ACK后立即关闭连接。
为什么客户端会有超时等待状态,是因为保证服务端收到ACK,如果客户端发送完ACK就释放连接,一旦ACK在网络中丢失,服务端将一直停留在最后的确认状态,如果客户端在发送ACK等一段时间,服务端没有收到ACK会重新发送FIN,客户端会重新响应重新发送ACK,并刷新超时时间,这也是为了确保在不可靠的网络中,让断开连接变的稳定。