TCP协议分析
TCP协议原理
- TCP,Transmission Control Protocol,传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
- 互联网络与单个网络有很大的不同,因为互联网络的不同部分可能有截然不同的拓扑结构、带宽、延迟、数据包大小和其他参数。
- TCP的设计目标是能够动态地适应互联网络的这些特性。
TCP功能
-
面向连接:通过三次握手建立连接,通过四次挥手断开连接。
-
可靠传输:通过序列号,确认号和重传机制来保证TCP的可靠传输。
-
流量控制:通过Window字段实现流量控制。当下载速度与电脑磁盘写入速度不对等时,滑动窗口就约定了电脑能写入的最大字节,防止下载速度过快磁盘来不及写入的情况。
-
多路复用:通过套接字实现多路复用。通过不同端口实现不同功能。
Seq序列号的作用:给发送的每一个字节一个序列号
Ack确认号的作用:
- 用来确认序列号+数据长度=我的确认号,则说明数据未丢失。
- 期望发给我下一个包的序列号等于我的确认号。
TCP、IP报头大小,最小为20个字节,最大为60个字节;UDP报头为固定的8个字节;
Code buts:6个bit,有六个指针:SYN(建立)、ACK(确认)、FIN(断开)、URG(紧急)、RST(重建会话)、PSH(快速推送)
TCP协议实战
- 开启wireshark并监听网卡;
- 打开浏览器访问www.baidu.com再关闭;
- CMD命令输入:telnet route-server.ip.att.net,输入账号rviews 密码 rviews,退出 exit
- 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