TCP连接三次握手的过程
初始状态客户端CLOSED,服务器LISTEN
1. 客户端A向服务器B发送SYN数据包(SYN, x:0)请求连接。此时状态为SYN_SENT,表示客户端已发送SYN报文。
2. 服务器B收到,发送SYN/ACK数据包(SYN/ACK, y:x+1)回应。此时服务器状态由LISTEN(服务器socket处于监听状态,可以接受连接)变为SYN_RECV,表示收到SYN报文
3. 客户端A收到并发出确认ACK(ACK, x+1:y+1),连接成功。双方状态ESTABLISHED
TCP四次挥手的过程
初始状态双方ESTABLISHED
1. 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。客户端FIN_WAIT_1。表示主动关闭连接,向对方发送了FIN,进入FIN_WAIT_1,等待对方的确认
2. 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。客户端FIN_WAIT_2,表示半连接,而服务器可能还有数据要发,这边稍后关闭。服务器CLOSE_WAIT。
3. 服务器B关闭与客户端A的连接,发送一个FIN给客户端A。服务器LAST_ACK,等待对面的ACK报文
4. 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。客户端进入TIME_WAIT,表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。
为何TIME_WAIT:
防止服务器在处于LAST_ACK状态下未收到ACK报文而重发FIN报文,这个TIME_WAIT 状态的作用就是用来重发可能丢失的ACK报文。
TCP和UDP的特点
TCP面向连接,UDP无连接
TCP可靠,保证安全,UDP尽最大努力交付,不保证安全
TCP是点对点的,UDP可以一对一 一对多 多对多 多对一
TCP面向字节流,UDP无拥塞控制
TCP开销较大,UDP开销小
TCP、UDP的应用场景
UDP使用场景 DNS协议(因为用UDP快),看视频、发语音、QQ聊天、多媒体教室屏幕广播
TCP使用场景 HTTP协议,QQ传文件,邮件,登陆
TCP怎么实现可靠传输
确认和重传机制:建立连接、发送包时的确认,运输过程中校验失败、丢包或延时发送端重传
数据排序:把数据分成很多包,按顺序进行传输
流量控制:滑动窗口和计时器
全部评论
(0) 回帖