1、简单说下TCP三次握手和四次挥手
三次握手:
连接确认首先发生在TCP传输层,传输层位于网络层(IP)之上,是一种面向连接,基于字节流的可靠传输。
1. 第一次握手:
客户端(C)发起
发送同步序列号SYN=1,SEQ=X;
等待服务器端(S)的确认,状态进入SYN_SENT
2. 第二次握手:
服务器(S)端发起
回复C自己收到了报文段,并且发送确认号字段ACK=X+1,SEQ=Y
状态变为SYN_RECV
3. 第三次握手:
C发起
C收到S的回复后确认S可以接收自己的报文,发送确认包ACK=Y+1,SEQ=X+1
确认包发送完后双方进入ESTABLISHED状态,建立连接开是传输
四次挥手:
1. 第一次挥手:
C主动发起
生成一个随机序列号SEQ=X,FIN=1发送给S,告知S要断开连接
2. 第二次挥手:
S发起
回复C自己收到了断开的报文,发送确认的ACK包,ACK=X+1,SEQ=Y
3. 第三次挥手:
S发起
为了确认所有发送到C的数据都已经传输完毕
发送随机生成的SEQ=Z,ACK=X+1
4. 第四次挥手:
C发起
表示自己收到了S发送的TCP断开报文
发送ACK=Z+1,SEQ=X+1
为什么是三次握手?
只要大于等于三次都可以,少于三次不可以,如果是两次握手,确认不了C接下来是可以接收S的传输的,比如两次握手后C忙于处理其他客户端逻辑,那么S发送的数据是没有被正确接收的
为什么是四次挥手?
同样的多余四次也可以,只是四次就足够了,四次挥手确认了S向C传输的所有数据能够完整的送到C后再断开连接,三次挥手可能数据没有完全传输完就断开连接,存在丢包的行为
2、TCP 和 UDP的区别
TCP和UDP同属于传输层协议
TCP是基于字节流的,可靠地传输,UDP是基于数据报,不可靠的传输
TCP传输的数据是有序的,UDP不保证顺序
TCP不会丢包,UDP可能会
TCP的报文头复杂,而UDP的就比较简单