netstat
은 ss
로
netstat -r
는 ip route
로
netstat -i
는 ip -s link
로
netstat -g
는 ip maddr
로 대체 되었다.
TCP state trancsiton & function call
- 흰색 실선으로 되어있는것은 실제 C언어 펑션. 점선은 TCP state
- 서버가 작동을 시작하면
listen()
을 불러서 상태가 LISTEN
으로 변한다. 대문자로 적은게 모두 상태이다.
- 클라이언트 쪽에서는
connect()
라는 함수를 불러서 접속을 시도한다. 그럴때 서버 측에다가 보내는 패킷애 플래그 값이 있는데 이 패킷의 flag 값이 SYN
은 싱크로 나이즈라고 부른다.
- 그래서 sync 패킷을 서버 쪽으로 보낸다.
- 보냈으니까 싱크를 보냈다라는 의미의
SYNC_SENT
로 상태가 변한다.
- 그리고 받은 측에서는 받았다고
SYNC_RCVD
로 변한다.
- 3-hand shake 이후에는 양측 다
ESTABLISHED
로 변한다.
- 연결을 끊을 때는
close
작업을 한다. 누가 먼저 끊나!, 대부분 클라이언트가 먼저 끊다.
- 먼저 끊는 애가
active close
, 끊김을 당하는가 passive close
active clase
가 FIN
을 날린다.
FIN_WAIT1
: ACK 를 받는다.
FIN_WAIT2
: passive close
에서 close()
를 통해 FIN 을 받는다.
- TCP 패킷 규칙
- 모든 패킷은 받은 패킷을 잘 받았다는 확인(ACK)를 해줘야한다.
- 제어 패킷(연결 , 연결해제)은 항상 echo를 해줘야한다.
ss -nt
: n
은 서버 주소나, 포트번호를 모두 숫자로 보여달라. t
는 TCP 만 보여달라
ss -ntm
: m
은 추가적으로 메모리를 보여달라.
ss state established
: tcp state 가 연결된것 ESTABLSHED
인것만 보겠다.
ss -nt state close-wait state fin-wait-2
: 시스템에 문제(close wait , fin-wait)가 생겼는지 확인
-
watch -d -n 1 ss -nt state close-wait state fin-wait-2
: watch
는 계속적으로 살펴봐준다. 한번 크롬을 켜보자. 1
은 1초마다 실행해라.
-
ping
: 상대 호스트의 응답확인 ( 호스트의 존재 여부 확인)
-
traceroute
: 패킷의 도달 경로 확인
traceroute -n 63.99.207.68
-
arp -s <MAC addr> <IP addr>
: ARP 테이블 ,IP와 MAC 주소의 매칭 테이블
- 유명한 네임서버는 몇개 알아두자
1.1.1.1
: Cloudflare DNS
208.67.222.222
, 208.67.200.200
: CISCO openDNS
8.8.8.8
: google DNS