TCP抓包学习

了解TCP协议

https://www.jianshu.com/p/ef892323e68f

了解TCP报文格式结构

image.png

了解标志位

6位标志域的各个选项功能如下。

URG:紧急标志。紧急标志为"1"表明该位有效。
ACK:确认标志。表明确认编号栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
PSH:推标志。该标志置位时,接收端不将该数据进行队列处理,而是尽可能快地将数据转由应用处理。在处理Telnet或rlogin等交互模式的连接时,该标志总是置位的。
RST:复位标志。用于复位相应的TCP连接。
SYN:同步标志。表明同步序列编号栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
FIN:结束标志。

了解3次握手

image.png

了解4次挥手

image.png

了解wireshark,学习过滤

用socket编程了解基于TCP协议的报文交互

server端代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @className TestSocketServer
 * @description 
 * @author Qiang.Chen
 * @date 2023/2/4 15:28
 * @version V1.0
 */
public class TestSocketServer {

    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(9096);
        while (true) {
            Socket client = server.accept();
            if (client != null) {
                new Thread(() -> {
                    System.out.println(client.toString());
                    BufferedReader br;
                    try {
                        InputStream in = client.getInputStream();
                        br = new BufferedReader(new InputStreamReader(in));
                        String msg;
                        while ((msg = br.readLine()) != null) {
                            System.out.println(msg);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }).start();
            }
        }
    }

}

client端代码

import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;

/**
 * @className TestSocketClient
 * @description 
 * @author Qiang.Chen
 * @date 2023/2/4 15:34
 * @version V1.0
 */
public class TestSocketClient {
    public static void main(String[] args) throws Exception {
        Socket client = new Socket();
        SocketAddress address = new InetSocketAddress("10.190.68.155", 9096);
        client.connect(address);
        client.getOutputStream().write("hello".getBytes());
        client.getOutputStream().write(" ".getBytes());
        client.getOutputStream().write("world\n".getBytes());
        client.getOutputStream().write("this is test msg\n".getBytes());
        Thread.sleep(10000L);
        client.close();
    }
}

抓包的过滤条件如下

(ip.dst eq 10.190.68.155 or ip.src eq 10.190.68.155 ) and tcp.port == 9096

抓包结果如下

image.png

client端连接对应三次握手
写入消息对应PSH标志位
client断开连接后对应前面两次挥手
server断开后对应后面两次挥手

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 建立一条新的TCP连接时,甚至是在发送任意数据之前,TCP软件之间会交换一系列的IP分组,对连接的有关参数进行沟通...
    钱塘阅读 2,471评论 0 0
  • 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信...
    zplodge阅读 441评论 0 0
  • 从本节开始,我们开始学习最重要的传输层。传输层位于OSI七层模型的第四层(从下往上)。顾名思义,传输层的作用是实现...
    doudo阅读 954评论 0 1
  • TCP协议实现原理 TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。 从协议...
    本草博士阅读 979评论 0 5
  • URG:紧急标志 紧急(The urgent pointer) 标志有效。紧急标志置位, ACK:确认标志 确认编...
    youngxs阅读 249评论 0 0