SantaBPF / santabpf

MIT License
6 stars 1 forks source link

Systems Performance 2ed: Network chapter 정리 #7

Closed dongho-jung closed 3 years ago

dongho-jung commented 3 years ago

시스템들이 점점 distributed되면서, 특히 cloud computing 환경에서, 성능면에서 네트워크의 중요성은 커지고 있다. 네트워크 성능 개선에는 일반적으로 네트워크 latency와 throughput을 개선하거나, latency outlier들을 제거하는 것들이 있겠다.

image

네트워크 분석은 위 그림과 같이 하드웨어와 소프트웨어에 같이 걸쳐있다. IP, TCP, UDP와 같은 하위 레벨의 프로토콜은 일반적으로 커널에서 HTTP와 같은 상위 레벨의 프로토콜은 라이브러리나 application software에서 처리된다.

1 용어 정리

이번 장을 시작하기 앞서 네트워크와 관련된 용어들을 짚고 넘어가자.

2 네트워크 모델들

2.1 네트워크 인터페이스

네트워크 인터페이스는 네트워크 연결을 위한 OS의 endpoint. admin에 의해 설정되고 관리되는 추상화된 형태다.

image

위 그림에서와 같이, 네트워크 인터페이스는 물리적인 네트워크 포트에 맵핑되고, 포트는 개별적인 송수신 채널을 통해 네트워크와 연결된다.

2.2 컨트롤러

Network Interface Card(NIC)는 시스템에 하나 이상의 네트워크 포트를 제공하고 network controller라 하는, 포트들과 시스템간 패킷 전송을 위한 마이크로프로세서를 포함한다.

image

보통 controller는 별도의 확장카드 또는 시스템 보드에 내장 구현됨

2.2 프로토콜 스택

네트워킹은 각 레이어들이 특정한 목적을 수행하는, 여러 프로토콜들의 스택을 통해 이뤄진다.

image

아래로 갈수록 protocol encapsulation이 이뤄지기에 더 뚱뚱하게 그려졌다. 송신하는 메시지는 위에서 아래로, 수신하는 메시지는 그 반대가 된다.

여기에 IPSec이나 Linux WireGuard 같은걸 사용중인 경우 Internet 레이어 위에 IP endpoint간 보안을 제공해주는 레이어가 추가될수도 있다. 또한 tunneling을 사용중인 경우 (e.g., VXLAN) 프로토콜 스택 하나가 다른 스택으로 encapsulate될 수도 있다.

Layer란 용어는 OSI model에서 온거라 3계층 프로토콜, 7계층 프로토콜 하면 OSI model의 레이어를 뜻한다고 이해하면 된다.

같은 메시지라도 각각의 레이어에서 다르게 불린다. OSI 모델에서, 전송 계층의 메시지는 segment 또는 datagram ; 네트워크 계층의 메시지는 packet ; 그리고 데이터링크 계층의 메시지는 frame 으로 불린다.

3 개념 정리

3.1 네트워크와 라우팅

TODO

whitejh commented 3 years ago

1. 네트워크 인터페이스 관리

출처

2. 네트워크 상태 확인하기

출처

서버를 설치한 이후 현재 네트워크가 정상적 작동 중인지 확인할 때 어떻게 해야하는지 알아야 한다.

2.1 먼저 서버를 설치한 후에 네트워크가 되는지 알아본다. 2.2 중간에 네트워크 장비가 문제가 생겨 서버에 인터넷이 되지 않을 때 정말 인터넷이 안되는지 확인한다. 2.3 서버의 네트워크 설정이 안되는지를 확인하기 위한 간단한 명령어들을 사용하는 방법에 대해 알아야한다.

예시 1. 네트워크 상태 확인

출처 위의 출처에서 알 수 있는 방법들

예시 2. 리눅스 서버 60초 안에 상황 파악하기(Linux performance analysis in 60000ms)

$ sar -n DEV 1

image

이 tool을 사용하면 network throughput(Rx, Tx KB/s)을 측정할 수 있다.
위 예제에서는 eth0 의 수신량이 약 22Mbytes/s(21999.10rxkB/s)이다.
이는 176Mbits/s인데 한계인 1Gbit/s에 아직 많이 못 미치는 값이다.

위 값중 %ifutil 은 nicstat로도 측정 가능한 네트워크 장치 사용률이다.
하지만 nicstat에서도 그렇듯 정확한 값을 가져오는게 어려워서 위 예제에서도 잘 작동하지 않는다.

$ sar -n TCP,ETCP 1

image

이 값은 TCP 통신량을 요약해서 보여준다.

active/s : 로컬에서부터 요청한 초당 TCP 커넥션 수를 보여준다 . ex) connect()를 통한 연결

passive/s : 원격으로부터 요청된 초당 TCP 커넥션 수를 보여준다. ex) accept()를 통한 연결

retrans/s : 초당 TCP 재연결 수를 보여준다.

active와 passive 수를 보는 것은 서버의 부하를 대략적으로 측정하는 데에 편리 위 설명을 보면 active를 outbound passive를 inbound 연결로 판단할 수 있는데, 꼭 그렇지만은 않다. (예를 들면 localhost에서 localhost로 연결같은 connection)

retrans( = retransmits)은 네트워크나 서버의 이슈가 있음을 이야기한다. 신뢰성이 떨어지는 네트워크 환경(공용인터넷)이나, 서버가 처리할 수 있는 용량 이상의 커넥션이 붙어서 패킷이 드랍되는것을 이야기한다.

위 예제에서는 초당 하나의 TCP 서버가 들어오는것을 알 수 있다.

dongho-jung commented 3 years ago

네트워크만 다루는것은 일단 보류되어서 닫아두겠습니다.