1. 들어가며
시스템을 개발하거나 운영하다 보면 종종 이런 상황을 만난다.
- PING은 잘 되는데 접속이 안 된다.
- 서버는 열려 있다는데, 클라이언트가 붙지를 않는다.
- 연결은 된 것 같은데 데이터가 오가지 않는다.
- 로컬에서는 되는데, 외부에서는 접속이 안된다.
이 글에서는 통신/네트워크 백엔드 관점에서 Client–Server 연결의 본질,
그리고 이를 확인하고 모니터링하는 방법을 정리해보겠습니다.
2. Client와 Server의 역할
- TCP/IP 통신에서 중요한 건 “누가 문을 열고 기다리는가(Server)” 와 “누가 먼저 찾아가는가(Client)”를 명확히 구분하는 것.
- Server
- 특정 IP:Port를 열고 LISTEN 상태로 대기
- 예: 192.168.0.10:4000
- Client
- Server의 IP:Port로 접속 요청(TCP Connect)
- 이때 Client 자신의 로컬 포트는 OS가 랜덤으로 배정 (예: 54321)
- 연결이 성립되면 192.168.0.10:4000 <-> 192.168.0.235:54321 형태 ( ip:port)
👉 Server도 IP를 지정해야 하는가?
X. Server는 자기 포트를 열 뿐이고, “이 IP만 받아라” 같은 화이트리스트를 걸지 않는 이상 접속하는 Client의 IP는 크게 중요하지 않다.
3. 연결 확인 단계
- 계층 확인 방법 문제 원인 예시
L1 (물리) | 케이블, 포트 LED, NIC 상태 | 케이블 불량, 포트 다운 |
L2 (데이터링크) | arp -a, 스위치 포트 설정 | VLAN 분리, MAC 필터링 |
L3 (네트워크) | ping, tracert | 서브넷 마스크 오류, 라우팅 미설정 |
L4 (전송) | Test-NetConnection, netstat | 포트 미열림, 방화벽 차단 |
L5~L7 (세션/표현/응용) | Wireshark, Application 로그 | 프로토콜 불일치, 인증 실패, 데이터 형식 오류 |
① 네트워크 레벨 (Ping)
ping 192.168.0.235
-> 클라이언트 ip로 ping ( ping: 3계층인 네트워크 계층(Network Layer)**에서 동작하는 인터넷 제어 메시지 프로토콜(ICMP)을 활용하여 네트워크 연결 및 도달 가능성, 이름 확인 문제를 진단하는 유틸리티)
- 목적: 네트워크(L2/L3) 연결 확인
- 성공하면? → 케이블, 스위치, IP 설정은 정상
- 하지만 Application 통신 성립 여부는 알 수 없음
② 전송 레벨 (Test-NetConnection, telnet)
Test-NetConnection 192.168.0.10 -Port 4000
- 목적: 특정 포트가 열려 있는지 확인
- TcpTestSucceeded : True → Server(192.168.0.10)가 4000번 포트를 열고 있음
- False → 방화벽/서비스 미실행
③ 세션 레벨 (netstat)
netstat -ano | findstr ":4000"
- LISTENING → 서버 포트 열림, 아직 클라이언트 접속 없음
- ESTABLISHED → 클라이언트와 서버가 TCP 세션을 맺음
- 이 상태가 돼야 실제 데이터 송수신 가능
저는 find 쪽에서 에러가 나서 netstat -a 로 하여 전체 세션을 확인했습니다.
> netstat -a
TCP 0.0.0.0:4000 0.0.0.0:0 LISTENING
TCP 192.168.0.10:4000 192.168.0.235:50321 ESTABLISHED
.
.
.
- LISTENING
- 내 서버(192.168.0.10)가 포트 4000을 열고 대기 중
- ESTABLISHED
- 클라이언트(192.168.0.235)가 실제로 접속해서 세션이 성립된 상태
- 뒤쪽 숫자(50321)은 클라이언트가 임시로 잡은 로컬 포트
👉 즉, LISTENING만 보이면 Client가 아직 접속 안 한 것
👉 ESTABLISHED가 보이면 Client가 서버에 붙은 것
4. “PING은 되는데 접속이 안 된다”
PING은 ICMP 레벨(네트워크 계층), 접속은 TCP 레벨(전송 계층) 입니다.
- PING 성공 → 네트워크 케이블과 라우팅 OK
- PING 실패 → 포트 미열림, 방화벽, 서버–클라이언트 역할 설정 오류
즉, “PING은 된다 = 다 됐다”가 아닙니다.
5. 데이터가 안 오가는 경우
TCP 세션이 ESTABLISHED까지 되었는데 데이터가 안 흐른다면?
- 프로토콜 레벨 문제
- 예: 서버는 “요청이 와야 응답하는 구조”인데, 클라이언트가 아무 것도 안 보냄
- 양쪽 포트 불일치
- Server는 4000에서 대기, Client는 4999로 붙으려 함
- 방화벽 Deep Packet Filtering
- 특정 페이로드 차단
이 경우에는 단순 netstat 확인만으로는 부족하고, 패킷 캡처(Wireshark) 나 중계 툴(ComAnalyzer) 로 실제 전문을 봐야 합니다.
6. 모니터링 방법
① Proxy(중계) 방식
- 중간에 Proxy(예: ComAnalyzer)를 두고
- Client ↔ Proxy ↔ Server 구조로 연결
- Client 쪽과 연결할 때 → ComAnalyzer는 "Server 역할" (포트를 열고 LISTEN 상태로 기다림)
- Server 쪽과 연결할 때 → ComAnalyzer는 "Client 역할" (서버로 접속 요청을 날림)
- Proxy가 전문을 그대로 전달하면서 복사해 보여줌
- 장점: 쉽게 패킷 모니터링
- 단점: Proxy가 중간 병목이 될 수 있음
- ComAnalyzer는 스스로 “순수 패킷 스니핑”을 하는 Wireshark 같은 툴이 아니라, 실제로 통신 경로에 끼어들어 연결을 2개로 쪼개는 Proxy 방식.
② 패킷 캡처 방식
- 서버/클라이언트 어느 한쪽에서 Wireshark 실행
- 특정 포트 트래픽 필터링
- 운영 중 시스템에 영향 거의 없음
- 단점: 전문 포맷 해석은 수동
③ 네트워크 장비 Port Mirroring
- 스위치에서 포트 미러링 설정
- 특정 링크의 트래픽을 별도 포트로 복사
- 별도 장비에서 패킷 분석
- 대규모/산업 현장에서 자주 사용
7. 실무 팁
- 서버 열렸는지 확인: netstat, Test-NetConnection
- 클라이언트 접속 확인: netstat에서 ESTABLISHED 여부
- 빠른 물리 확인: NIC/모듈 LED (LINK, ACT, ERR)
- 방화벽은 늘 의심 1순위: 인바운드 TCP 규칙 추가
8. 실습
0. PLC장치(클라이언트)는 192.168.0.10의 4000번 포트로 붙이는 걸로 설정. 서버측 IP 설정이 필요.
1. 서버측PC에서 수동으로 ip설정 헀음에도 ipcnofig로 ip확인 시 자동 ip 할당 주소 169.254.XXX.XXX 로 표시 되는 문제
2. 이 주소는 APIPA (Automatic Private IP Addressing) 라고 부르는 자동 할당 주소로, DHCP 실패 시 Windows가 임의로 부여하는 IP
3. 즉, OS가 네트워크 카드에 입력된 수동 IP를 적용하지 못하고, 연결이 끊어진 상태로 자기 혼자 169.254 대역을 붙여버린 것.
해결방법)
Windows 10 네트워크 IP 고정 오류 (IP 변경 안됨)
장비의 Windows 10 PC를 셋업하던중 PC의 IP가 변경이 안되는 현상이 발생했다. 보통은 위와 같은 ...
blog.naver.com
수동 IP를 등록했지만 자동 IP가 할당되는 문제
window 11 세팅 중 랜카드를 교체했는데, 수동 IP를 등록했으나 cmd 창에서 ipconfig를 치면 자동 IP로 표시되는 문제 발생 자동 구성 IPv4 주소 : 169.254.XXX.XXX 라고 표시되면서 연결이 정상적으로 되지 않
star992411.tistory.com
이렇게 해결하니 서버 PC의 IP가 192.168.0.10으로 정상 설정되어, PLC 클라이언트의 접속 설정(192.168.0.10:4000)과 일치하게 되었다 .
그러나
- wireshark로 확인한 결과 서버와 클라이언트가 주고받는 패킷x(서버와 클라이언트가 연결이 안된다.)
왜 클라이언트가 서버에 안 붙는가. 에 대한 해결을 해야한다.
1. client에 ping 때리기 : 정상 -> 해당 장치(client)가 살아있으며, 네트워크 레벨(3계층) 통신은 정상
2. 서버 port가 열려있는지 확인
: 서버pc에서는(loccal) 성공(True)했으나, 타 PC에서는 실패(False)
- 그럼 높은 확률로 방화벽 문제일 것이라고 짐작해볼 수 있다.
3. Windows Defender 방화벽 고급 보안 열기 - 왼쪽에서 인바운드 규칙 클릭 - 오른쪽에서 새 규칙... 클릭 - 규칙 종류 = 포트 선택 → 다음 - TCP, 특정 로컬 포트 = 4000 입력 → 다음 - 연결 허용 선택 → 다음 - 적용 프로파일(도메인/개인/공용) 원하는 거 체크 → 다음 - 이름 설정 → 마침
4. 서버pc를 다시 껐다키고 테스트 시 정상적으로 붙는 것을 확인할 수 있었다.
8. 마치며
통신 문제는 대체로 역할(Client/Server) 혼동이나 포트 불일치에서 시작하므로,
클라이언트가 살아있나 , 서버 포트가 열려있나, 세션이 맺어지나(요청응답), 데이터전문 정상 교환되나, .
단계적으로 보면 문제를 빠르게 진단할 수 있고 이때 모니터링 도구(Wireshark, Port Mirroring, ...)을 적극 활용하며 풀어낼 수 있을 것입니다.
'Network' 카테고리의 다른 글
서버(Server)와 클라이언트(Client) | 소켓통신과 HTTP 통신 (1) | 2024.11.07 |
---|