TCP IP知识梳理

  1. 为什么需要TCP协议?工作在哪一层?
    1. 需要保证包交付的可靠、按序、完整,因此有TCP协议
    2. IP层不可靠,因此在传输层
  2. 什么是TCP连接
    1. 面向连接(一对一)、可靠、字节流(无边界、有序)
  3. 如何唯一确定一个TCP连接
    1. 源地址+端口,目的地址+端口确定一个唯一的连接
  4. TCP UDP 的区别及应用场景
    1. 从连接的角度,TCP先建立连接再传,UDP直接传
    2. 从对象的角度,TCP一对一传,UDP一对多(一对一,多对多)
    3. 从可靠的角度,TCP可靠交付,UDP尽力交付不保证
    4. 从拥塞、流量控制的角度,TCP有拥塞控制与流量控制,UDP没有
    5. 从首部开销的角度,TCP长且可变,UDP固定八个字节
      1. 应用场景:TCP(FTP、HTTP等)UDP(视屏、音频、广播通信)
  5. 三次握手
    1. 客户端发送(表示向服务器端发起连接)
    2. 服务器端收到,发回“确认应答”
    3. 客户端发送,变成established状态,服务器端收到后也变成established状态(仅此次可以带数据发送,前两次都不行,因为established了)
  6. 为什么是三次握手
    1. 避免历史连接(假设一个旧的报文比新报文先到server,server回了,client收到的旧报文的回复,可以发现是个过期报文,然后发RST回去终止这个连接,而如果是两次,这个连接就建立了,就离谱)
    2. 同步初始序列号
    3. 避免资源浪费(新旧SYN报文先后到达,若二次握手会导致多个连接建立)
  7. 什么是四次挥手
    1. 客户端打算关闭,发送关闭的FIN_WAIT_1报文
    2. server发送ACK应答报文,并进入CLOSED_WAIT状态
    3. client收到后进入FIN_WAIT2状态
    4. server处理完数据后,向client发送FIN
    5. client收到后,回ACK
    6. server收到后,关闭了
    7. 最后client等2MSL后,也关闭
  8. 为什么需要四次挥手
    1. 关闭连接时,client不发送,但是要接收数据
    2. 服务器回ACK后,可能还有数据需要发送和处理,要发的发完了,再发FIN
  9. TIME_WAIT时间为2MSL的理由
    1. 1MSL为一个报文的最大生存时间
    2. 但有可能万罗中存在来自发送方的报文,还需要接收方响应再回,一来一回2MSL
  10. TIME_WAIT存在的理由
    1. 防止旧连接的数据包(旧连接的数据,由于TIME_WAIT时间过短,第二个连接开始了,他被接收了,离谱)
    2. 保证连接的正确关闭(等待足够的时间确保最后的ACK能让被动关闭方接收,帮助其正常关闭)
  11. 待续

猜你喜欢

转载自www.cnblogs.com/tillnight1996/p/12741302.html