TCP와 UDP가 무엇인지(https://kimdozzi.tistory.com/271), 3, 4 way handshake(https://kimdozzi.tistory.com/270)가 왜 필요한 것인지 잘 모르다면, 해당 링크들을 읽고 오길 바란다. 이전에는 이론을 통해 SYN, ACK를 주고 받는 과정을 확인하였다면, 이번에는 실습을 통해 확인해보겠다. 인터넷 연결이 가능한 환경, 와이어샤크만 있으면 된다. 아래 링크에서 다운 받고 오자.
와이어샤크를 설치하다 보면, Npcap이라는 것도 같이 다운을 권장하는 창이 뜨게 되는데, 필요한 것인 같이 다운받아 주자. 와이어샤크를 실행하게 되면 지금 쓰고 있는 인터넷 수단을 찾아서 클릭해줘야 한다. 아마 Npcap이 없으면 이 부분이 실행이 안될 것이다..(설치를 권유하는 광고같은 건줄 알았지..)
https://www.wireshark.org/download.html
1. 브라우저에 주소 입력하기
www.naver.com 를 입력창에 적고, 와이어샤크의 패킷 캡처를 실행한다. 그 다음, 엔터를 쳐서 연결하게 되면, 수많은 패킷들이 나오는 걸 볼 수 있다. 나도 자세히는 잘 모르겠다. ㅎㅎㅎㅎㅎ 패킷 캡쳐를 중지하고 naver와 관련된 패킷만 확인해보자.
2. 연결한 사이트의 서버 IP 찾기
cmd창을 열고 nslookup 명령어로 서버의 IP주소를 찾아준다. 여기서 서버가 여러 개가 나오는데, 이는 로드 밸런싱을 위해 여러 개가 뜬 것이라 신경쓰지 않아도 된다고 한다. 와이어샤크 필터에 다 입력해보고 패킷이 나오는 걸로 쓰자!
3. 필터 적용 및 분석
필터링 입력 칸에 아래와 같이 입력해주자. TCP 3 way handshake만 캡쳐하는 필터 식이라고 한다. TCP 3 way는 처음 브라우저가 서버에 요청하는 단계니까 SYN = 1 이거나 (tcp의 sequence 길이가 1이고 ACK = 1 이고 .. 뭐 그런게 아닐까? 한다. https://noodles8436.tistory.com/14 이 글에 자세한 내용이 있다.
tcp.flags.syn==1 or (tcp.seq==1 and tcp.ack==1 and tcp.len==0 and tcp.analysis.initial_rtt)
위 필터를 적용하게 되면 아래와 같이 어떤 포트에서 80포트로 패킷을 주고받는 내용을 볼 수 있다. 나의 IP 주소는 172.30.1.68 이다. 그리고 위에서 봤듯이 Naver의 서버 IP는 223.130.200.219(네이버에 접속할 때 마다 IP가 계속 바뀐다...) 이다. 패킷 캡쳐를 정지하고 Info를 살펴보자.
그 중에서 제일 위에 4개를 주목하자. 172.30.1.68와 223.130.200.219 사이에서 패킷을 주고 받는 것을 볼 수 있다. (2번째 제외) 아마 이 과정들이 TCP 3-way handshake 과정이 아닐까 예상해본다.
1번째 172.30.1.68에서 223.130.200.219로 SYN을 날린다. (Seq = 0)
3번째 223.130.200.219에서 172.30.1.68로 SYN,ACK를 날린다. (Seq = 0, ACK = 1)
4번째 223.130.200.219에서 172.30.1.68로 ACK를 날린다. (Seq = 1, ACK = 1)
면접을 준비하면서 학부 시절에 배운 네트워크 과목이 떠올랐고, 여러 번 이론을 읽는 것도 중요하지만 한번의 실습이 더 도움이 될 것 같아 경험해보았다. 4way handshake는 데이터 전송 과정을 거치고 나면 전달하는 패킷 형태만 다를 뿐 위와 같은 방식일 것이다. 오랜만에 와이어샤크를 사용해보니 여전히 어렵다. 패킷도 어떻게 봐야할 지 잘 모르겠고 ... 그래도 재밌었다!
참고 자료