Wireshark 패킷 분석 (DNS, TCP)
이번에 제가 해 볼 것들은 wireshark를 통해
1. DNS request, response message 분석
2. TCP Handshaking
3. Sequence, ACK number 분석
4. persistent, non-persistent connection 확인
이것들을 간략하게 분석해 보겠습니다.
DNS request, response message 분석
우선, wireshark의 filter를 port 53 으로 설정했습니다. (port 53 = DNS)
저는 http://google.com 에 접속해보았습니다. (https가 아닌, http 입니다.)
구글에 접속하려면, 맨 처음 www.google.com의 의 주소를 알려달라고 request msg (queries)를 날립니다. 이 때 source port number는 55625이고, destination port number는 53입니다. (port num 53 = DNS)
그리고 request msg에 대한 response msg가 날라옵니다. 아까와는 반대로 source port number는 53이고 destination port number는 55625 입니다. DNS에서 msg를 날려준 것입니다.
Answers에는 www.google.com의 의 주소는 216.58.197.164 이라는 것을 담아줍니다. 이렇게 www.google.com의 IP주소를 알 수 있게 되었습니다.
TCP Handshaking
TCP는 3-way handshake를 사용합니다. 3-way의 순서는 이러합니다.
1. Client가 SYNbit=1 (TCP header의 S)로 Seq num = x 로 connection을 request합니다.
2. Server에서도 SYNbit=1 로 보냅니다. Client가 보낸 것에 대한 ACKnum = x+1 도 보냅니다. Seq num = y 로 보냅니다.
3. Client가 다시 SYNACK에 대한 ACK을 보냅니다. Server가 y를 보냈으니 ACKnum = y+1 로 보냅니다.
이제 직접 capture해서 확인해보겠습니다.
1. Client가 SYNbit = 1 로, Seq num = 0 으로 connection request msg를 보냅니다. (Source port num = 49872, destination port num = 80)
2. Server에서도 SYNbit = 1 로, Client가 보낸 것에 대한 ACK = 1 로, seq num = 0 으로 response msg를 보냅니다. (Source port num = 80, destination port num = 49872)
이제 Client의 connection이 열렸습니다.
3. Client가 다시 SYNACK에 대한 ACK을 보냅니다. (Server한테 msg 받았다고 알리는 것) Sequence num = 1 이고, Server가 seq 0 을 보냈으니 ACK num = 1 로 보냅니다.
이러면 Server의 connection도 열립니다.
이렇게 TCP의 3-way handshaking으로 connection이 안정적으로 열리게 되었습니다.
Sequence, ACK number 분석
TCP의 전송에서 Sequence # 과 ACK # 을 알아보려면 먼저 이것을 알아야합니다. Client한테 받은 패킷에 대한 ACK num은 "세그먼트의 크기 + seq num" 이어야 합니다. 그러면 이 ACK num이 Client가 보낼 다음 Sequence num이 됩니다.
만약 Client에서 100byte Seq 1 의 패킷을 보냈다면, Server에서는 100+1, 즉 ACK 101을 보내야 합니다, 이것은 ACK num을 다음 seq num을 예측해서 보내는 것입니다.
이것을 알아보기 위해 /main.jsp을 요청했습니다.
request msg. Client에서 seq 1 로 708 byte의 payload를 가진 패킷을 Server로 전송하였다.
response msg. Server에서 Seq 73721, ACK는 1+708 = 709 로 패킷을 Client에게 전송하였습니다.
이렇게 TCP의 ACK num은 다음에 보내야할 seq num을 예측해서 보냅니다. 다음 Client가 보내는 패킷의 seq num은 709가 될 것입니다.
persistent, non-persistent connection 확인
persistent냐 non-persistent 이냐는 HTTP 패킷의 Connection 부분을 분석해보면 알 수 있습니다.
http://www.google.com/doodles 에 접속하였습니다.
HTTP의 Connection 영역이 close 라면 non-persistent connection을 뜻하고, keep-alive는 persistent를 뜻합니다. 그래서 이 HTTP는 persistent connection임을 알 수 있습니다.
'IT > 네트워크' 카테고리의 다른 글
[ 네트워크 ] Router (0) | 2020.05.14 |
---|---|
[ 네트워크 ] Network layer (0) | 2020.05.13 |
[ 네트워크 ] Electronic mail (E-mail) (0) | 2020.05.04 |
[ 네트워크 ] Web Caching (proxy server) (0) | 2020.05.04 |
[ 네트워크 ] Cookie (0) | 2020.05.04 |
댓글