네트워크 문제 해결의 일반적인 원칙은 다음과 같습니다.
- 어떤 수준의 TCP / IP 스택 (또는 다른 스택)에서 문제가 발생 하는지 확인 하십시오.
- 올바른 시스템 동작 및 정상적인 시스템 상태와의 편차 이해
- 한 문장이나 여러 단어로 문제를 표현해보십시오
- 버기 시스템에서 얻은 정보, 다른 사람 (Google, 다양한 포럼 등)에 대한 자신의 경험과 경험을 사용하여 성공 (또는 실패)까지 문제를 해결하십시오.
- 실패하면 다른 사람들에게 도움이나 조언을 요청하십시오.
나는 보통 필요한 모든 도구를 사용하여 필요한 모든 정보를 얻고이 정보를 내 경험과 일치 시키려고 노력한다. 버그가 포함 된 네트워크 스택 수준을 결정하면 변형 가능성을 줄일 수 있습니다. 다른 사람들의 경험을 사용하면 문제를 신속하게 해결하는 데 도움이되지만 상황을 이해하지 못하면 문제를 이해하지 않고 해결할 수 있으며이 문제가 다시 발생하면 인터넷없이 문제를 다시 해결할 수 없습니다.
그리고 일반적으로 네트워크 문제를 해결하는 방법을 모르겠습니다. 내 두뇌에는 마법의 기능이 SolveNetworkProblem(information_about_system_state, my_experience, people_experience)있는데, 때로는 정답을 정확하게 반환하고 때로는 실패 할 수도 있습니다 ( Linux 랩톱 에서 TCP가 죽는 것처럼 ).
나는 보통 네트워크 디버깅을 위해이 세트의 utils를 사용합니다 :
ifconfig(또는 ip link, ip addr) - 네트워크 인터페이스에 관한 정보를 취득
ping-내 컴퓨터에서 대상 호스트에 액세스 할 수 있는지 확인합니다. ping기본 DNS 진단에도 사용할 수 있습니다. IP 주소 또는 호스트 이름으로 호스트를 핑한 다음 DNS가 작동하는지 여부를 결정할 수 있습니다. 그리고 traceroute또는 tracepath또는 mtr거기에가는 일을보고 있습니다.
dig -모든 DNS 진단
dmesg | less나 dmesg | tail나 dmesg | grep -i error- 리눅스 커널은 몇 가지 문제에 대해 어떻게 생각하는지 이해.
netstat -antp+ | grep smth-가장 많이 사용되는 netstat 명령 사용법은 TCP 연결에 대한 정보를 보여줍니다. grep을 사용하여 필터링을 수행하는 경우가 종종 있습니다. 또한 새로운 참조 ss(에서 명령에 iproute2새로운 표준 리눅스 네트워킹 도구의 스위트)와 lsof같이 lsof -ai tcp -c some-cmd.
telnet <host> <port> -다양한 TCP 서비스 (예 : SMTP, HTTP 프로토콜)와 통신하는 데 매우 유용하며 일부 TCP 포트에 연결할 수있는 일반적인 기회를 확인할 수도 있습니다.
iptables-save(Linux에서)- 전체 iptables 테이블 을 덤프
ethtool -모든 네트워크 인터페이스 카드 매개 변수 가져 오기 (링크 상태, 속도, 오프로드 매개 변수 ...)
socat-모든 네트워크 프로토콜 (UDP, 멀티 캐스트, SCTP ...)을 테스트하는 스위스 군용 도구. 몇 가지 -d옵션으로 특히 유용합니다 (텔넷보다 더 유용함) .
iperf -대역폭 가용성을 테스트
openssl( s_client, ocsp, x509...) 모든 SSL / TLS가 / PKI 문제를 디버깅하는 방법.
wireshark -네트워크 트래픽을 캡처하고 분석하는 강력한 도구로 많은 네트워크 버그를 분석하고 포착 할 수 있습니다.
iftop -네트워크 / 라우터에서 큰 사용자를 표시합니다.
iptstate (Linux의 경우)-방화벽의 연결 추적에 대한 현재보기
arp(또는 new (Linux) ip neigh)-ARP 테이블 상태를 표시합니다.
route또는 최신 버전 (Linux) ip route-라우팅 테이블 상태를 표시합니다.
strace(또는 truss, dtrace또는 tusc시스템에 따라하기) - 시스템 호출이 실패하면 시스템 호출이 문제의 과정을 무엇을 보여주고있는 유용한 도구입니다, 그것은 또한 (errno를) 에러 코드를 보여줍니다. 이 정보는 종종 시스템 동작을 이해하고 문제를 해결하기에 충분하다고 말합니다. 또는 일부 네트워킹 함수에서 중단 점을 사용 gdb하면 언제 만들어졌으며 어떤 인수를 사용하는지 알 수 있습니다.
- Linux의 방화벽 문제 조사 :
iptables -nvL각 규칙과 일치하는 패킷 수를 표시합니다 ( iptables -Z카운터를 0으로 설정). LOG방화벽 체인에 삽입 된 대상은 패킷이 그들을 도달하고 그들이 어떻게 거기에 도착 때 이미 변형 된 확인할 때 유용합니다. 더 얻으려면 NFLOG(와 연결됨 ulogd) 전체 패킷을 기록합니다.