四次挥手问题
来源:2-5 TCP的四次挥手

weixin_慕移动6203069
2023-02-06
158 6.952983 192.168.3.27 192.168.3.27 TCP 56 60503 → 7788 [SYN] Seq=0 Win=65535 Len=0 MSS=65495 WS=256 SACK_PERM
159 6.953065 192.168.3.27 192.168.3.27 TCP 56 7788 → 60503 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=65495 WS=256 SACK_PERM
160 6.953110 192.168.3.27 192.168.3.27 TCP 44 60503 → 7788 [ACK] Seq=1 Ack=1 Win=2619648 Len=0
177 7.958289 192.168.3.27 192.168.3.27 TCP 496 60503 → 7788 [PSH, ACK] Seq=1 Ack=1 Win=2619648 Len=452
178 7.958330 192.168.3.27 192.168.3.27 TCP 44 7788 → 60503 [ACK] Seq=1 Ack=453 Win=2619648 Len=0
179 7.958569 192.168.3.27 192.168.3.27 TCP 44 60503 → 7788 [FIN, ACK] Seq=453 Ack=1 Win=2619648 Len=0
180 7.958589 192.168.3.27 192.168.3.27 TCP 44 7788 → 60503 [ACK] Seq=1 Ack=454 Win=2619648 Len=0
193 8.446612 192.168.3.27 192.168.3.27 TCP 44 7788 → 60503 [RST, ACK] Seq=1 Ack=454 Win=0 Len=0
为什么我这里抓包得到的流程不一样呢?辛苦老师帮忙解答一下。
按我理解,
1、3次握手成功简历连接
2、客户端发送数据
3、服务端接收后发送给客户端确认报文
4、客户端接收服务端的确认报文确认后并发送Fin报文以及ACK报文给服务端
5、服务端接收并发送给客户端ACK报文
6、接下来不是应该服务端发送Fin报文给客户端么?为什么我抓包得到的是服务端发送RST报文以及ACK给客户端,最终也没有发送FIN报文给客户端
端口7788是服务端,端口60503是客户端
环境:
通过java socket实现的本地数据传输进行的测试
客户端代码:
public static void main(String[] args) throws Exception {
OutputStream outputStream = null;
for (int i = 0; i <1 ; i++) {
Socket socket = new Socket(InetAddress.getLocalHost(),7788);
outputStream = socket.getOutputStream();
Thread.sleep(1000);
outputStream.write(“传输的数据”.getBytes());
socket.close();
}
outputStream.close();
}
服务端代码:
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(7788);
while (true){
Socket accept = serverSocket.accept();
InputStream inputStream = accept.getInputStream();
byte[] b = new byte[1024];
inputStream.read(b);
String s = new String(b);
System.out.println(s);
}
}
辛苦老师帮看一下。我哪里做的问题
1回答
-
翔仔
2023-02-07
同学好,close之后有的时候来不及发fin就关了,这个时候可能收不到,可以尝试在close之后sleep一阵试试。
00
相似问题