一、TCP/IP协议
1.1 OSI分层
OSI 是 OSI/RM(Open Systems Interconnecation Reference Model)开放互联基本参考模型的简称,由 ISO 于 1983 年制定,形成正式文件。
OSI 分层是一种网络架构模型,它将网络通信分为七个不同的层次。每个层次都有自己的功能和任务。下面是由上到下每个层次的简要介绍:
序号 | 层级 | 名称 |
---|---|---|
1 | 应用层 | 负责提供各种应用程序,例如电子邮件、文件传输和远程登录等。 |
2 | 表示层 | 负责将数据转换为应用程序可以理解的格式,它定义了如何在不同的系统之间交换数据。 |
3 | 会话层 | 负责建立、管理和终止会话,它定义了如何在两个节点之间建立连接。 |
4 | 传输层 | 负责将数据分割成数据包,并确保它们在网络上的传输。它还提供了可靠的端到端传输服务。 |
5 | 网络层 | 负责将数据包从源地址路由到目标地址,它定义了如何在不同的网络之间传输数据包。 |
6 | 数据链路层 | 负责将数据包从一个节点传输到另一个节点,它定义了如何在物理介质上传输数据包。 |
7 | 物理层 | 负责将数据从一个节点传输到另一个节点,它定义了电气、光学和机械接口的规范。 |
虽然标准已经制定了,但是由于一些缺陷,现今规模最大的、覆盖全世界的因特网并未使用 OSI 标准,而是使用 TCP/IP 标准。
1.2 TCP/IP 分层
相比OSI 7层模型,TCP/IP协议只有4层,它将部分层进行了合并。
通常讲的TCP/IP协议是指TCP/IP协议簇,按照分层可以分为以下部分
层级 | 协议名称 |
---|---|
应用层 | HTTP、FTP、SMTP、POP3、IMAP、Telnet、SSH、DNS |
传输层 | TCP、UDP |
网络层 | IP、ICMP、ARP、RARP |
网络接口层 | Ethernet、Token Ring、FDDI、PPP |
下面抓包使用的 WireShark 用的就是TCP/IP标准。
二、抓包
2.1 Socket代码
使用 Java 编写服务端和客户端代码, 通过调用 Socket API 实现两者通讯。
Socket 即套接字,是应用层 与 TCP/IP
协议族通信的中间软件抽象层,表现为一个封装了 TCP / IP协议簇 的编程接口(API),ServerSocket 是使用 TCP 协议,如果想使用 UDP 协议,可以使用 DatagramSocket。
WireShark 需要管理员权限启动,默认不能查看不走网卡的 loopback,需要下个 npcap。
- Server.java
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10007);
System.out.println("服务器已启动,等待客户端连接...");
Socket socket = server.accept();
System.out.println("客户端已连接!");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = br.readLine();
System.out.println("客户端说:" + str);
PrintWriter pw = new PrintWriter(socket.getOutputStream());
pw.println("欢迎您!");
pw.flush();
socket.close();
}
}
- Client.java
public class Client {
public static void main(String[] args) throws IOException, Interru