前端碎碎念

181 阅读2分钟
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的就比较简单