tcpdump로 패킷을 확인하는 실습을 한다.
채팅 서버와 클라이언트 구조에서 (1) 연결을 맺음 (2) 채팅 (3) 연결을 끊는 과정까지 tcpdump로 패킷을 캡처할 것이다.
간단한 tcp server와 client를 준비했다.
https://github.com/jinwookh/linux-c-example/tree/main/chapter-bonus-tcp-chat
tcp 소켓으로 read/write하는게 전부인 어플리케이션이다.
port는 3456으로 코드에서 고정했다.
tcpdump를 실행한다.
tcpdump -i lo0 -nn -w result.pcap tcp port 3456
https://www.tcpdump.org/manpages/tcpdump.1.html
-i: dump해야하는 인터페이스를 정한다.
localhost->localhost 통신을 하는 패킷을 뜨기 위해서 -i lo0 옵션을 추가했다.
https://stackoverflow.com/questions/3130911/tcpdump-localhost-to-localhost
tcpdump를 종료하자.
그러면 tcpdump가 실행된 디렉토리에서 result.pcap이 생긴 것을 확인할 수 있다.
result.pcap을 wireshark로 열어보자.
3 way handshake(통신 시작),데이터 송수신, 4 way handshake(통신 종료)를 모두 확인할 수 있다.
client-> server,
server -> client로 각각 채팅 내용을 한 차례씩 발행했다.
connection이 fail하는 과정에서 패킷들은 어떤 모습일까?
tcpdump -i lo0 -nn -w connectionFail.pcap tcp port 3456
```
curl: (7) Failed to connect to localhost port 3456: Connection refused
```
RST 패킷을 수신하여 강제로 커넥션이 종료됐다.
왜 RST 수신 이후 SYN이 한 번 더 발신됐는지는 잘 모르겠다..