때때로 Linux 및 Unix 사용자는 다양한 네트워크 문제에 직면했습니다. 이러한 문제 중 상당수는 여기 및 기타 문제 해결 포럼에 나와 있지만 매우 구체적이며 많은 추가 기술 정보가 포함되어 있으며 때로는 버그가있는 시스템 동작의 주요 원인과 실제 이유를 이해하기가 어렵습니다.
이 질문을함으로써 네트워크 문제 해결 및 디버깅 경험을 일반화 할 수 있는 커뮤니티 위키 페이지 를 시작하려고 합니다. 리눅스와 유닉스 사용자가이 페이지를 사용하여 네트워크 문제를 쉽게 인식하고 해결할 수 있기를 바랍니다.
이 페이지의 부모는 문제를 진단하는 모범 사례가 되어야합니다 . 그러나 여기서 우리는 문제 해결에 초점을 맞추어야 네트워크 문제 에서 사용자 및 커널 공간.
당신이 생각한다면 :
- 구체적인 사용 예 및 네트워크 버그의 예와 함께 유용한 네트워크 진단 도구 사용에 대한 정보를 공유하십시오.
- 이 주제와 관련된 훌륭한 네트워크 튜토리얼 링크를 공유하십시오
- 일부 클래스의 네트워크 문제를 해결할 수있는 일반적인 방법이나 레시피에 대해 설명하십시오.
- 네트워크 디버깅 및 문제 해결을위한 도구 세트에 대한 정보 공유
이 주제에 완벽하게 맞습니다.
다양한 진단 도구 및 12 년 된 간단한 자습서 링크를 공유하는 것부터 시작하겠습니다 . 또한 아치 리눅스 튜토리얼 은 우리 주제에 대한 실제 정보를 가지고있는 것 같습니다. 리눅스 네트워킹에 뛰어 들기 위해서는 Linux Networking-HOWTO 를 방문해야한다 .
답변
네트워크 문제 해결의 일반적인 원칙은 다음과 같습니다.
- 어떤 수준의 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
) 전체 패킷을 기록합니다.
답변
놀라운 “네트워크 문제”는 일종의 DNS 문제로 귀결됩니다. 초기 문제 해결은 ping -n w.x.y.z
호스트 이름의 DNS 확인을 생략하고 IP 연결을 확인하기 위해 사용해야 합니다. 그런 다음, route -n
DNS 확인없이 기본 IP 경로를 확인하는 데 사용 하십시오.
IP 연결 및 라우팅을 확인한 후 nslookup
, host
및 dig
정보를 얻을 수 있습니다. “잠금”은 DNS 시간 초과가 발생했음을 나타낼 수 있습니다.
의 존재와 내용을 확인하는 것을 잊지 마십시오 /etc/resolv.conf
. DHCP 클라이언트는 임대 할 때마다 해당 파일을 변경하며 때때로 파일이 잘못되거나 디스크 공간이 부족하면 업데이트가 수행되지 않을 수 있습니다.
답변
케이블 문제가 존재할 수 있습니다. 하드웨어에 접근 할 수 있으면 케이블이 모두 연결되어 있고 기계적으로 연결되어 있는지 확인하십시오. 라우터 또는 이더넷 인터페이스가 보이면 링크 표시등이 켜져 있는지 확인하십시오.
원격으로 ethtool
및 에 의존해야합니다 mii-tool
.
[root@flask ~]# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Speed: 10Mb/s
Duplex: Half
Port: MII
PHYAD: 24
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: g
Wake-on: d
Current message level: 0x00000001 (1)
drv
Link detected: yes
“링크 감지 : 예”는 좋지만 해당 컴퓨터의 NIC가 더 잘 수행 할 수 있으므로 10Mb / s 및 반이중은 좋지 않습니다. NIC가 끊어 졌는지 또는 케이블이 맞는지 알아 내야합니다. 동일한 라우터에 연결된 다른 컴퓨터에 100Mb / s, 전이중이라고 표시되어 있습니다.