TCP协议

TCP协议的头部为20Byte

image

TCP头部的数据格式

image

  • 端口号:各占 2 个字节,端口号与IP首部中的源端IP地址和目的端IIP地址唯一确定一个TCP连接。

  • 序号:占 4 字节,整个要传送的字节流的起始序号必须在连接建立时设置

  • 确认号:占 4 字节,是期望收到对方下一个报文段的第一个数据字节的序号,所以确认序号=上次成功接受的序号+1

  • 数据偏移:占 4 bit,最高可表达15,单位为4byte,它指出 TCP 报文段的数据部分起始处距离 TCP 报文段的起始处有多远,实际就是指出TCP首部长度(考虑选项部分)。

  • 保留:占6bit,至今未用,为0.

  • 控制位:表明本报文段的性质

    • URG:紧急
    • ACK:确认
    • PSH:推送
    • RST:复位
    • SYN:同步
    • FIN:终止
  • 窗口:占2个字节,窗口大小表示接收方允许发送方发送报文段的多少,以字节为单位,在数据传输过程中是动态变化的,因为接收方的数据缓存空间是有限的。

  • 检验和:占2字节。检验和字段检验的范围包括首部和数据这两部分

  • 紧急指针: 占2字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据) 。发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍然是普通数据,因此,在紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。值得注意的是,即使窗口为0时也可以发送紧急数据。

  • 选项 : 长度可变,最长可达4字节。当没有使用“选项”时,TCP的首部长度是20字节。选项包含最大报文段长度(MSS)、窗口扩大、时间戳、选择确认等。

    • 最大报文段长度MSS:指的是报文段中数据字段的最大长度,不包含首部长度。默认值为536字节,为了提高网络利用率,MSS要尽可能大一些,只要在IP层传输时不需要再分片就行。
    • 窗口扩大选项:
    • 时间戳:
    • 选择确认:

TCP的连接、数据传输、关闭状态

连接过程

关闭过程

img

TCP的状态机

image

常见面试问题收集

1:TCP协议为什么需要三次握手?而不是两次?或四次?
  1. TCP协议为什么需要四次挥手?为什么不能是三次?
  2. TCP三次握手双方都交换了哪些东西?
  3. 既然IP层会分片,为什么还需要在TCP层用MSS来限制大小?
  4. TCP四次挥手时,为什么time_wait等待时间是2MSL?如果系统产生大量的timewait怎么办?
  5. listen时backlog参数的用处?
  6. 服务端调用accept函数是不是标识着TCP 建连成功?
  7. 什么是SYN攻击?
  8. TCP的RTT和RTO是怎么计算的?
  9. TCP除了超时重传还有哪些重传机制?
  10. 拥塞控制和流量控制到底是什么区别?
  11. 什么叫零窗口?
  12. TCP keepalive?
  13. 一条TCP连接的开销?
  14. TCP常见的网络传输优化手段有哪些?

参考

posted on 2024-03-14 14:58  Getone超  阅读(8)  评论(0编辑  收藏  举报