오늘은 TCP/UDP 통신을 할 때 실제 어떤 패킷이 오고 가는지 확인해 볼 것이다.
먼저 칼리 리눅스에서 wireshark를 실행해 보자
처음 wireshark를 실행하면 이러한 화면이 나온다.
여기서 eth0, tun0과 같은 것들은 각각의 네트워크 인터페이스의 식별자를 뜻한다.
eth0 : 유선 랜카드의 0번째 즉 처음 랜카드를 가리킨다.
tun0 : VPN에 사용되는 가상 터널 인터페이스이다.
오늘은 tryhackme.com의 room 기능을 활용해 VPN설정 후 ssh로 접속을 할 것 이기에 tun0을 선택해 준다.
처음 tun0을 선택하고 들어오게 되면 아무것도 뜨지 않는다. 아직 접속을 안 했기 때문에 그렇다.
VPN을 설정하고 ssh를 통해 접속을 하게 되면
이러한 화면을 볼 수 있다. 이때 Protocol을 보게 되면 TCP와 SSH를 볼 수 있는데
SSH를 통한 통신은 신뢰성이 필요한 통신이기에 TCP 통신을 하는 것을 알 수 있다.
보다 쉽게 TCP의 흐름을 보기 위해 wireshark를 켜둔 상태로 웹사이트에 들어가 보자
처음 웹사이트에 접속 후 wireshark를 확인하면 이러한 화면을 볼 수 있다.
우리는 NO. 1,3,4에 주목해 보자
여기서 알 수 있는 정보를 다 정리해 보자
NO.1
1. 10.18.52.42 : 57474에서 10.10.191.181 : 80으로 패킷을 보냈다
2. 보낸 패킷은 SYN패킷이다
NO.3
1. 10.10.191.181 : 80에서 10.18.52.42 : 57474으로 패킷을 보냈다.
2. 보낸 패킷은 SYN , ACK 패킷이다.
NO.4
1. 10.18.52.42 :57474에서 10.10.191.181:80으로 패킷을 보냈다
2. 보낸 패킷은 ACK 패킷이다.
위의 정리를 통해 알 수 있는 것은 TCP통신을 시작하면 제일 먼저 하는 것은 SYN 패킷을 주고 SYN, ACK 패킷을 받은 다음
ACK 패킷을 다시 주는 일을 한다는 것을 알게 된다.
우리는 이러한 행위를 3 way-handshake라고 부른다.
이것은 TCP 통신을 하기 위해 제일 우선적으로 행해지는 일이며 상대방과의 신뢰성 있는 연결을 하기 위한 작업이다.
자세한 건 https://st-together.tistory.com/33 에 정리해 두었다.
이번엔 UDP통신을 하면 어떤 패킷이 오가는지 확인해 보자
먼저 UDP 통신을 하기 위해 해당 ip에 데이터를 보낼 것이다.
UDP로 데이터를 보내기 위해선 nc 명령어의 -u 옵션을 사용하면 된다.
nc -u [전송할 IP] [포트 번호]
해당 아이피의 999번 포트에 hello라는 데이터를 UDP방식으로 전송했다.
이것을 wireshark에서 확인을 해보면
2개의 패킷만 오고 갔다는 것을 확인할 수 있다.
(여기서 2번 패킷은 연결할 수 없는 포트번호라는 알림을 보내기 위해 사용된 것이다. UDP와 상관 X)
UDP는 TCP와는 다르게 바로 데이터가 보내진 것을 확인할 수 있는데
이것을 통해 UDP는 3 way-handshake를 하지 않는다는 것을 알 수 있고,
3 way-handshake가 없기에 연결 과정이 없다는 것을 알 수 있다.
이로써 실제 네트워크 상에서 TCP통신과 UDP 통신이 어떻게 이루어지는지 알 수 있게 되었다.
TCP통신은 3 way-handshake를 통해 신뢰성 있는 연결을 할 수 있다는 점,
UDP통신은 연결은 없지만 사전 과정이 없기에 빠른 데이터 전송이 가능하다는 점이 가장 중요한 핵심 중 하나인 것 같다.
'Computer Science' 카테고리의 다른 글
도커 정리 (명령어 및 설명) (0) | 2023.10.17 |
---|---|
메모리 정리 (0) | 2023.06.18 |
알고리즘 정리 (0) | 2023.06.18 |