关于tcp的一些问题| 计算机网络3

13.TCP

  • TCP与UDP的区别

他们都有特点,根据特点应用场景

tcp udp
面向连接,端到端,一对一 支持一对多
面向字节流的 面向报文的
传输可靠,流量控制,超时重传 尽大努力传输,不可靠
头部长,没有可选长度也要20个字节 头部开销少只有8个字节
  • 为什么要有tcp?

​ 基于ip层的传输报文,不可靠,tcp可靠

  • tcp实现了哪些功能?

​ 可靠传输,流量控制,拥塞避免,超时重传

  • 三次握手的细节,为什么没有两次,或者4次

​ 三次可以避免历史性连接,同步双发的序列号,保证点对点有序通信,三次握手能够保证双方都确认对方已收到之前发给对方的包

​ 三次可以搞定,没必要搞四次

​ 三次握手双方的状态

客户端 服务端
syn_send syn_rec
establised establised
  • 为什么是四次挥手,四次挥手的细节

    为了保证客户端向服务端发送关闭连接请求时,服务端还在向客户端传输的数据还能被客户端正确收到,在第二次挥手时,ack和fin报文分开发送,ack确实收到fin报文,fin报文表示请求关闭与客户端的连接

客户端 服务端
fin_wait_1 close_wait
fin_wait_2 last_ack
time_wait(2msl) close
close
  • 为什么是两个MSL,为什么要time_wait?

    如果没有timewait,客户端直接关闭,存在在路由的服务端向客户端传输数据无法正确交付,timewait可以实现双方的同步关闭,保证数据传输和接受的可靠。

​ 需要 TIME-WAIT 状态,主要是两个原因:

防止历史连接中的数据,被后面相同四元组的连接错误的接收;
保证「被动关闭连接」的一方,能被正确的关闭;


  • 关于分片的问题

​ mtu(最大传输单元)

​ mss(最小数据包) 【见之前画的图】

  • time_wait主要出现在主动关闭连接的一方

​ 在保持长连接时,有一方突然断开连接了,因为tcp有保活机制,长时间没用信息交互时,回发送数据探测报文,如果发出的报文长时 间没有响应,就认为对方挂了,主动关闭连接。

一个服务器的某个端口能够支持的最大tcp连接数量主要取决于客户端的客户端的(ip数*端口号)

  • 如何解决time_wait过多的问题

    • 打开 net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_timestamps 选项;
    • net.ipv4.tcp_max_tw_buckets
    • 程序中使用 SO_LINGER ,应用强制使用 RST 关闭。

      如果服务端要避免过多的 TIME_WAIT 状态的连接,就永远不要主动断开连接,让客户端去断开,由分布在各处的客户端去承受 TIME_WAIT

  • 关于服务端半连接和全连接的问题?

​ 服务器半连接的状态是,收到了客户端的连接请求了但还没有让客户端确认自己已经接受

​ 全连接的状态是三次握手已经完成之后

关于tcp的一些问题| 计算机网络3_第1张图片

你可能感兴趣的:(计算机网络计算机基础)