고양이와 코딩하기

네트워크 통신 확인 명령어 정리 본문

D E V E L O P E R 💻/Solution Set

네트워크 통신 확인 명령어 정리

dj-1087 2022. 4. 4. 19:49
반응형

네트워크 통신에 문제가 발생할 때, 우리는 터미널을 통해 문제의 발생 지점 또는 발생 원인을 알아보고 싶을 것이다.

이때 단순히 ping테스트만으로는 원인을 알 수 없기 때문에, 상황에 따라 다양한 명령어들을 미리 알아둘 필요가 있다.

이 글을 통해 네트워크 상태 확인을 위해 많이 사용하는 명령어들과 관련 네트워크 개념을 정리해봤다.

네트워크 문제로 고생하는 개발자들에게 많은 참고가 되길 바란다! 

목차

ipconfig/ifconfig

네트워크 인터페이스 정보 확인 명령어
  • ipconfig: window
  • ifconfig: linux

 

*ip 주소는 호스트에 하나씩 부여되는 것이 아니라 네트워크 인터페이스에 할당된다.
        ⇒ 따라서 각 네트워크 인터페이스마다 다른 ip주소를 할당할 수 있다.

Network Interface 필드
  • HWaddr: 네트워크 인터페이스 하드웨어 주소 (mac 주소)
  • inet: 네트워크 인터페이스에 할당된 IP주소
  • Bcast(broadcast): 브로드캐스트 주소
  • Mask(​​netmask): 넷마스크
  • mtu : maxium transfer unit 네트워크 최대 전송 단위
  • Rx packets : 받은 패킷 정보
  • Tx packets : 보낸 패킷 정보
  • collisions : 충돌된 패킷 수
  • interrupt : 네트워크 인터페이스가 사용하는 인터럽트 번호

 

  • 네트워크 인터페이스 일시 중지, 재작동 (mac 기준)
    *ifconfig나 route로 변경한 정보들은 시스템을 재부팅하면 모두 원상복귀 된다.
    *영구히 변경하려면 설정 파일 수정 필요
sudo ifconfig [네트워크 인터페이스 명] down 		// 작동 중지
sudo ifconfig [네트워크 인터페이스 명] up 		// 재작동
sudo ifconfig  [네트워크 인터페이스 명] [ip 주소] up 	// ip 변경하여 재작동

ping

컴퓨터 네트워크 연결 상태 진단 명령어
# port 지정 불가
ping [ip or domain]

 

 

netstat

네트워크 상태 종합적으로 확인하는 명령어

- netstat 상태값

 

state description
CLOSED 완전히 연결이 종료된 상태
CLOSING 흔하지 않으나 주로 확인 메시지가 전송 도중 유실된 상태
CLOSE_WAIT TCP 연결이 상위 응용프로그램 레벨로부터 연결 종료를 기다리는 상태
 Passive Close 하는 쪽에서 프로그램이 소켓을 종료시키는 것을 기다리기 위한 상태. 가령, 소켓 프로그래밍 시 TCP connection 을 close 함수로 명시적으로 끊어주지 않으면 CLOSE_WAIT 상태로 영원히 남을 수 있고 이는 resource leak 으로 이어짐
ESTABLISHED 서버와 클라이언트 간에 세션 연결이 성립되어 통신이 이루어지고 있는 상태(클라이언트가 서버의 SYN을 받아서 세션이 연결된 상태)
FIN_WAIT1 클라이언트가 서버에게 연결을 끊고자 요청하는 상태(FIN을 보낸 상태)
FIN_WAIT2  서버가 클라이언트로부터 연결 종료 응답을 기다리는 상태(서버가 클라이언트로부터 최초로 FIN을 받은 후, 클라이언트에게 ACK을 주었을 때)
LAST_ACK 호스트가 원격지 호스트의 연결 종료 요구 승인을 기다리는 상태(서버가 클라이언트에게 FIN을 보냈을 때의 상태)
LISTEN 서버의 데몬이 떠 있어서 클라이언트의 접속 요청을 기다리고 있는 상태(Windows에선 LISTENING)
SYN_SENT 클라이언트가 서버에게 연결을 요청한 상태
SYN_RECEIVED 서버가 클라이언트로부터 접속 요구(SYN)을 받아 클라이언트에게 응답(SYN/ACK)을 하였지만, 아직 클라이언트에게 확인 메시지(ACK)는 받지 못한 상태
TIME_WAIT 연결은 종결되었지만 (분실되었을지 모를 느린 세그먼트를 위해) 당분간 소켓을 열어놓은 상태. 기본값은 120(초). Active Close 하는 쪽의 마지막 ACK가 유실되었을 때, Passive Close 하는 쪽은 자신이 보낸 FIN에 대한 응답을 받지 못했으므로 FIN을 재전송함. 이 때 TCP는 connection 정보를 유지하고 있고 ACK를 다시 보낼 수 있음

 

- TCP Flag

TCP flag description 
SYN Synchronization. 세션을 설정하는 데 사용되며 초기에 시퀀스 번호를 임의로 생성하여 보냄. 100% 는 아니지만 대부분 클라이언트 측에서 보내는 flag 
ACK Acknowledgement. 받는 사람이 보낸 사람 시퀀스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK을 보냄.
 ACK 의 번호와 응답을 통해 보낸 패킷에 대한 손실을 판단하여 재전송하거나 다음 패킷을 전송
FIN Finish. 세션을 종료시키는 데 사용되며, 보낸 사람이 더 이상 보낼 데이터가 없음을 보여줌
RST Reset. 재설정을 하는 과정이며, 양방향에서 동시에 일어나는 중단 작업. 비정상적인 세션 연결 끊기에 해당함
PSH Push. 대화형 트래픽에서 사용되며, 버퍼가 채워지기를 기다리지 않고 데이터를 전달. 데이터는 버퍼링 없이 바로 위 Layer 가 아닌 7 Layer의 응용프로그램으로 바로 전달
URG Urgent. Urgent pointer 가 유효한 것인지를 나타냄. Urgent pointer 란 전송하는 데이터 중에서 긴급히 전달해야 할 내용이 있을 경우에 사용

 

- Mode

mode description
Active Open connect()를 호출하는 쪽. 즉, SYN 세그먼트를 전송한 쪽. 종종 클라이언트가 되지만, 100% 클라이언트라고 할 수는 없음
Passive Open accept()를 호출하는 쪽. 일반적으로 서버의 역할. 이 역시 100% 서버라고 단정지을 수 없음
Active Close close()를 처음 호출한 쪽. FIN 세그먼트를 전송한 쪽. 클라이언트, 서버 관계 없이 어느 쪽이든 다 active close 할 수 있음
Passive Close FIN 세그먼트를 받는 쪽
MSL Maximum Segment Lifetime. 세그먼트가 네트워크 내에서 폐기되기 전까지 살아남을 수 있는 시간

 

- Option

-a : 현재다른PC와 연결(Established)되어 있거나 대기(Listening)중인 모든 포트 번호를 확인

-r : 라우팅 테이블 확인 및 커넥션되어 있는 포트번호를 확인

-n : 현재 다른PC와 연결되어 있는 포트번호를 확인(IP주소로 화면 출력)한다

-e : 랜카드에서 송수한 패킷의 용량 및 종류를 확인

-s : IP, ICMP, UDP프로토콜별의 상태를 보여줌

-t : tcp protocol

-u : udp protocol

-p : 해당프로토콜을 사용하는 프로그램, 프로세스 ID 보여줌

-c : 1초 단위로 보여줌

 

*Recv-Q : 전송받은 bytes중 아직 처리 못하고 recv()하고 있는 상태의 data RNXT – RACK 

*Send-Q : send() 되었으나 아직 전송되지 못하고 대기하고 있는 상태 SNXT – SUNA

 

curl

command line 기반의 웹 요청 도구
  • HTTP/HTTPS/FTP/LDAP/SCP/TELNET/SMTP/POP3 등 핵심 프로토콜을 지원
  • download, upload 모두 가능
curl [options] [ip or domain] [port]
short long 설명 비고
-k --insecure https 사이트를 SSL certificate 검증없이 연결한다. wget 의 --no-check-certificate 과 비슷한 역할 수행
-l --head HTTP header 만 보여주고 content 는 표시하지 않는다  
-D --dump-header <file> <file> 에 HTTP header 를 기록한다.  
-L --location 서버에서 HTTP 301 이나 HTTP 302 응답이 왔을 경우 redirection URL 로 따라간다.
--max-redirs 뒤에 숫자로 redirection 을 몇 번 따라갈지 지정할 수 있다. 기본 값은 50이다
curl -v daum.net 을 실행하면 결과값으로 다음과 같이 HTTP 302 가 리턴된다.
< HTTP/1.1 302 Object Moved
< Location: http://www.daum.net/
-L 옵션을 추가하면 www.daum.net 으로 재접속하여 결과를 받아오게 된다.
-d --data HTTP Post data FORM 을 POST 하는 HTTP나 JSON 으로 데이타를 주고받는 REST 기반의 웹서비스 디버깅시 유용한 옵션이다
-v --verbose  동작하면서 자세한 옵션을 출력한다.  
-J --remote-header-name 어떤 웹서비스는 파일 다운로드시 Content-Disposition Header 를 파싱해야 정확한 파일이름을 알 수 있을 경우가 있다. -J 옵션을 주면 헤더에 있는 파일 이름으로 저장한다. curl 7.20 이상부터 추가된 옵션
-o --output FILE curl 은 remote 에서 받아온 데이타를 기본적으로는 콘솔에 출력한다. -o 옵션 뒤에 FILE 을 적어주면 해당 FILE 로 저장한다. (download 시 유용)  
-O --remote-name file 저장시 remote 의 file 이름으로 저장한다. -o 옵션보다 편리하다.  
-s --silent 정숙 모드. 진행 내역이나 메시지등을 출력하지 않는다. -o 옵션으로 remote data 도 /dev/null 로 보내면 결과물도 출력되지 않는다 HTTP response code 만 가져오거나 할 경우 유리

 

telnet

원격 접속 서비스로서 특정 사용자가 네트워크를 통해 다른 컴퓨터에 연결하여 그 컴퓨터에서 제공하는 서비스를 받을 수 있도록 하는 인터넷 표준 프로토콜
  • 네트워크에 있는 컴퓨터를 자신의 컴퓨터처럼 파일 전송, 파일 생성, 디렉토리 생성 등을 자유롭게 가능
  • 단, 보안문제로 사용률이 감소하고 원격 제어를 위해 SSH로 대체되는 추세

 

- 보안상 취약점

  • Telnet 세션은 암호화 및 무결성 검사를 지원하지 않는다.
  • 패스워드가 암호화되어 있지 않아 스니퍼를 이용하여 제3자에게 노출 될 수 있다.
  • UNIX 시스템에서 해커가 in.telnetd를 수정하여 클라이언트의 특정 터미널 종류에 대해 인증과정 없이 쉘을 부여할 수 있다.

- Telnet vs SSH

=> 사용자 입장에서는 차이가 없으나 통신 방법에 있어서 큰 차이가 있다.

  • Telnet: 정보를 byte스트림형식으로 주고 받음
  • SSH: DES, RSA 등 고급 암호화를 통해 통신
    • SSH는 암호화 뿐만 아니라 압축 기술도 사용하는데, 암호화 때문에 트래픽이 텔넷보다 크게 늘어나지는 않음. 단지 약간의 부하가 더 생길수도 있다고 함

traceroute

실행하는 컴퓨터에서 데이터 패킷을 목적지 서버로 보내어 가는 네트워크 경로를 확인해주는 명령어
  • ICMP 프로토콜을 이용하여 경로를 확인
  • router가 ICMP 프로토콜을 제한한다면 라우터에 대한 정보를 얻을 수 없음
traceroute [옵션] 도메인명 혹은 IP 주소 [패킷 크기]

- 사용 케이스

  1. 네트워크에서 데이터 손실이 일어날 때 문제 있는 노드를 확인하는 경우
  2. 네트워크 트래픽에 악영향을 주는 느린 지점을 확인하는 경우

- 옵션

- 예제

  • traceroute -w 0.02 google.com
    0.02초 안에 packet이 최종 목적지인 google.com에 도착하는 라우터 IP 추적
    ※ 너무 짧은 시간을 부과하여 곳곳에 출력되지 않을 수 있음
  • traceroute -m 12 0.02 google.com
    ※ 최소한의 홉으 수를 보장하지 않는 경우 패킷이 최종 목적지까지 도달하지 못함

 

참고자료

 

반응형

'D E V E L O P E R 💻 > Solution Set' 카테고리의 다른 글

내부망 Docker 환경 구축 매뉴얼  (2) 2022.03.14
Comments