TCP协议分析

TCP协议原理

  1. TCP,Transmission Control Protocol,传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
  2. 互联网络与单个网络有很大的不同,因为互联网络的不同部分可能有截然不同的拓扑结构、带宽、延迟、数据包大小和其他参数。
  3. TCP的设计目标是能够动态地适应互联网络的这些特性。

TCP功能

  1. 面向连接:通过三次握手建立连接,通过四次挥手断开连接。

  2. 可靠传输:通过序列号,确认号和重传机制来保证TCP的可靠传输。

  3. 流量控制:通过Window字段实现流量控制。当下载速度与电脑磁盘写入速度不对等时,滑动窗口就约定了电脑能写入的最大字节,防止下载速度过快磁盘来不及写入的情况。

  4. 多路复用:通过套接字实现多路复用。通过不同端口实现不同功能。

    Seq序列号的作用:给发送的每一个字节一个序列号

    Ack确认号的作用:

    1. 用来确认序列号+数据长度=我的确认号,则说明数据未丢失。
    2. 期望发给我下一个包的序列号等于我的确认号。

TCP、IP报头大小,最小为20个字节,最大为60个字节;UDP报头为固定的8个字节;

Code buts:6个bit,有六个指针:SYN(建立)、ACK(确认)、FIN(断开)、URG(紧急)、RST(重建会话)、PSH(快速推送)

TCP协议实战

  1. 开启wireshark并监听网卡;
  2. 打开浏览器访问www.baidu.com再关闭;
  3. CMD命令输入:telnet route-server.ip.att.net,输入账号rviews 密码 rviews,退出 exit
  4. wireshark此时便能抓到TCP协议包(http和telnet应用协议基于TCP协议,此时可分析TCP会话)

数据包解读

  • **Source Port:**源端口,16 bit,用来标识哪个应用程序(服务)发送
  • **Destination Port:**目的端口,16 bit,用来标识哪个应用程序(服务)接收
  • **Sequence Number:**序列号,32bit,TCP 链接中传输的数据流,每个字节都编上一个序号。序列号字段的值指的是本报文所发送的数据的第一个字节的序号
  • **Acknowledgement Number:**确认号,32bit,是期望收到对方的下一个报文段的数据的第1个字节的序号,即上次已成功接收到的数据字节序号加1。只有 ACK 标识为1时此字段有效
  • **Header Length:**头长度,4bit,最小20字节,最大60字节
  • **Reserved:**保留位,6bit
  • **Code Bits:**标记位,6bit
    • URG:紧急指针,此报文字段中有紧急数据,应尽快传送
    • ACK:确认指针,当ACK 1时,代表这是一个确认包
    • PSH:推送指针,接受到PSH=1的 TCP 报文,应尽快的交付给接收端的应用进程
    • RST:重置指针,当RST =1时,必须释放连接,并重新建立连接
    • SYN:同步指针,用来发起一个连接
    • FIN:结束指针,发送端完成发送任务,并要求释放连接
  • **Window:**滑动窗口,16bit,TCP 的流量控制
  • **Checksum:**校验和,16bit,确保数据包的完整性
  • **Urgent:**紧急,16bit,只有当URG 设置为1时该字段才有效,支持在本报文段有多少字节的紧急数据
  • **Options:**可选项,32bit