IT회사에 취직한 지 6개월
회사일로 블로그를 접었었는데 그동안 회사에서 배운 내용을 복습할 겸 블로그를 다시 시작해보려 한다.
스마트시티 사업에 투입되면서 개발보다 더 많이 접한 건 네트워크였다.
당연히 하나도 모름 처음 배우며 헤매고 혼도 많이 났다. 물론 지금도..
회사 교육을 제외하면 투입기간 4개월 많은 시간은 아니지만 그동안 경험을 바탕으로 네트워크에 대한 꿀팁을 몇 가지 적어본다.
1. 네트워크 구성도 먼저 파악
ex)
요청과 응답(출발지, 목적지)의 흐름이 어떻게 되는지 알아야 업무에 지장이 없다.
2. 네트워크에 대한 기초 지식이 있어야 된다.
1번 구성도를 파악하기 위해 네트워크에 대한 기초적인 지식이 있어야 한다.
구성도에 있는 장비(아이콘)들이 어떤 기능을 하는지 알아야 소통이 가능할 것이며 지식이 많을수록 업무가 수월해질 것이다.
ex)
VPN, 방화벽, 라우터, 라우팅, 게이트웨이, 망연계 장비, 백본 스위치, DMZ, IP대역, NAT 등 대략적으로 어떤 기능을 하는지 알고 있는(알아야 되는) 용어들이며 앞으로 네트워크 공부를 위해 하루 하나씩 네트워크 용어에 대해 정리할 것.
3. 리눅스 명령어(기본 및 네트워크)는 알아두면 네트워크 문제 발생 시 원인 파악하는데 큰 도움이 된다.
뜬금없이 리눅스 명령어는 왜 알아야 하냐고 할 텐데 서버 구축 시 대부분 리눅스가 사용되며 규모가 큰 데는 유닉스를 사용한단다. (서버로 윈도는 거의 안 씀)
ex) 네트워크 인프라가 구축되었는데 서버 접속 시 장애가 난다. 아래 절차대로 진행해보자.
3-1. 정확히 어디에서 문제가 발생하는지 원인을 파악해야 한다.
3-2. 원인을 찾기 위해 출발지와 목적지를 알고 네트워크 흐름을 파악한다. (통신 구간에 어떤 장비들이 있는지 파악)
3-3. 출발지에서 목적지까지 Ping(명령어)을 이용해 패킷이 정상적으로 넘어가는지 체크한다.
3-4. ping체크 시 정상적으로 패킷이 넘어간다면 telnet를 이용하여 포트까지 통신이 되는지 확인한다.
- ping은 되는데 telnet으로 포트까지 통신이 안된다면 해당 포트가 목적지에서 LISTEN(열린) 상태가 아닌 확률이 높다.
3-5. ping체크 시 통신이 안되면 traceroute명령어로 목적지까지 가는 패킷의 경로를 추적해보자
ex) 로컬에서 구글까지 통신하기 위해 수많은 IP(장비)를 거친다.
3-6. traceroute로 경로 추적하였다면 마지막으로 패킷이 날아간 IP(장비)에서 실제 패킷이 들어오는지 dump를 떠보자 tcpdump 명령어 이용 (tcpdump -nni 인터페이스명) 기본 명령어
-nn : 출력 결과의 포트를 변환 없이 그대로 출력함.
-i : dump 적용할 인터페이스명 (ex: -i eth1)
아래 tcpdump 명령어 상태 플래그이다.
- S: 연결 요청 : 세션 연결을 시작하는 단계
- ACK : 패킷을 잘 받았다는 응답 표시
- F : FIN(보낸 쪽에서 연결을 종료) : 정상적인 연결 종료를 위해 보내는 패킷
- R : RST(비정상적으로 즉시 연결 종료) : 비정상적인 종료를 위해 RST 패킷을 보내 강제로 연결을 해제함.
- P : PSH : PUSH (데이터를 즉시 애플리케이션으로 전달) : 이미 연결되었고 데이터를 전송 중인 상태
플래그 상황 대처
플래그가 연속해서 S가 나오는 경우
방화벽에 막혀 있거나 특정하게 통신이 안 되는 이유 때문에 SYN패킷으로 상대의 상태를 체크하는 작업을 계속 수행하는 경우이다. (방화벽 또는 라우팅이 제대로 되어 있는지 의심해봐야 한다. netstat -rn으로 라우팅 테이블(게이트웨이) 확인)
비활성화되어있는 서비스로 접속할 경우
S 플래그 다음 R을 세팅하여 보내고 클라이언트 측에서는 RST를 받는 즉시 연결이 종료된다.(망연계 장비인 겨우 정책을 의심해봐야 한다.)
4. ping과 tcpdump로 원인 파악이 되었으면 담당자한테 파악된 내용을 토대로 작업 요청한다.
패킷이 막히는 구간이 스위치면 라우팅 작업을, 방화벽&망연 계장 비면 정책 추가를 요청을 또한 서버 내부 방화벽도 확인 해보자.