이 글은 네트워크의 기초 내용을 '면접을 위한 CS전공지식노트(주홍철)'과 '쉽게 배우는 데이터 통신과 네트워크(박기현)'을 읽고 공부한 내용을 간단하게 정리한 글이다.
애플리케이션 코드 상에는 문제가 없지만 서버로부터 데이터가 늦게 들어오거나 아예 들어오지 않는 경우가 있는데 이는 네트워크 병목 현상일 가능성이 있다.
병목(bottleneck) 현상은 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상을 말한다.
병의 몸통보다 병의 목 부분 내부 지름이 좁아서 물이 천천히 쏟아지는 것에 비유하여 bottleneck라는 이름이 붙었다. 서비스에서 이벤트를 열었을 때 트래픽이 많이 생기고 그 트래픽을 잘 관리하지 못하면 병목 현상이 생겨 사용자는 웹 사이트로 들어가지 못한다.
이때는 네트워크 관련 테스트와 네트워크와 무관한 테스트를 통해 '네트워크로부터 발생한 문제점'인 것을 확인한 후 성능 분석을 해야한다.
이때 사용되는 명령어들은 아래와 같다.
1. ping
2. netstat
3. nslookup
4. tracert
1. ping
ping(Packet INternet Groper)은 네트워크 상태를 확인하려는 대상을 향해 일정 크기의 패킷을 전송하는 명령어이다. 이를 통해 대상 서버에 패킷 수신 상태와 도달하기까지 시간 등을 알 수 있고 네트워크가 잘 연결되어 있는지 확인할 수 있다. ping은 TCP/IP 프로토콜 중에 ICMP 프로토콜을 통해 동작한다.
인터넷 제어 메시지 프로토콜(Internet Control Message Protocol, ICMP)는 네트워크 내 장치가 데이터 전송과 관련된 문제를 전달하기 위해 사용하는 프로토콜이다. ICMP 정의에서 ICMP가 사용되는 주요 방법 중 하나는 데이터가 대상에 도달하는지와 도달 시간이 적절한지를 확인하는 것이다. 따라서 ICMP는 네트워크가 데이터를 얼마나 잘 전송하는지 알 수 있는 오류 보고 프로세스 및 테스트의 중요한 측면이다.
cmd 창을 열어서 직접 확인해보자
위와 같이 입력을 해보았다. ping [IP주소 또는 도메인 주소]를 통해 실행한다.
32바이트의 패킷을 6번 보내서 모두 다시 받았고 시간 또한 표시해 준다. 일반적으로 50ms이하면 괜찮은 속도라고 한다.
/?를 통해 옵션을 확인할 수 있다.
그런데 www.naver.com으로 로 ping을 날려보면 아래와 같은 결과가 나온다.
위와 같이 요청 시간이 만료되었다고 나오는 것은 패킷 응답을 차단한 사이트들이다. 이는 서버를 외부에 노출시키지 않으려고 한 것이다.
위에서 ICMP를 통해 동작된다고 언급하였는데 네트워크 정책상 ICMP나 traceroute를 차단하는 대상의 경우 위와 같이 나온다.
2. netstat
netstat 명령어는 접속되어 있는 서비스들의 네트워크 상태를 표시하는 데 사용된다. 프로젝트를 하면서 서버를 열을 때
이미 사용하고 있는 포트이므로 현재 연결할 수 없다는 error 문이 뜰 때가 있다. 이러한 서버를 kill 하기 위해서 많이 사용해 봤을 명령어이다.
위와 같이 접속하고 있는 사이트 등에 관한 네트워크 상태 리스트를 볼 수 있다.
netstat 또한 ping처럼 /?를 통해 옵션 종류를 확인할 수 있다.
springboot로 서버 실행힐 때 이미 서버가 열려 있다면 netstat -ano를 통해 아래와 같이 PID를 확인할 수 있다.
taskkill /f /pid를 통해 프로세스를 종료시킨 것을 확인할 수 있다.
3. nslookup
nslookup는 특정 도메인에 매핑된 IP를 확인할 수 있게 해 준다.
4. tracert
tracert는 윈도우에서 명령어고 리눅스에서는 traceroute로 실행된다.
위 명령어는 목적지 서버까지 네트워크 경로를 확인할 때 사용하는 명령어이다. 즉, 라우팅 경로를 추적할 수 있다. 목적지까지 구간들 중 어느 구간이 응답 시간이 느려지는지 확인할 수 있다.
참고
https://www.fortinet.com/kr/resources/cyberglossary/internet-control-message-protocol-icmp
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=chsmanager&logNo=140202151860
면접을 위한 CS 전공지식 노트 - 주홍철
'통신 및 네트워크' 카테고리의 다른 글
HTTP 버전의 변화(HTTP/1.0, HTTP/1.1, HTTP/2.0, HTTPS, HTTP3.0) (0) | 2023.06.15 |
---|---|
TCP/IP 계층 간단 정리 및 TCP 연결/해제 과정(3-way handshake, 4-way handshake) (0) | 2023.06.10 |
프로토콜 - HTTP 에 대한 간단 정리 (0) | 2022.05.07 |
네트워크 관련 기초 용어 (0) | 2022.05.07 |
OSI 7 계층 간단 정리 (0) | 2022.05.03 |