네트워크 기본 개념Cheatsheet 🦉 from 외워서 끝내는 네트워크 핵심이론
OSI 7 Layer
: 의존적 관계가 성립하는 (Layered, 상위 계층이 하위 계층에 의존) 프로토콜을 계층적으로 나열한 것
Protocol suite, Protocol Stack
Protocol Suite
,Protocol Stack
: 여러 프로토콜의 집합
Network 성능 지표
-
throughput
: 처리율 (bps, Mbps, Gbps 등), 실시간성을 띄며, 평균값을 보통 지표로 사용 -
bandwidth
: 대역폭, 통신망이 전송할 수 있는 데이터의 양, 단위는 bps -
packet loss
: 패킷 손실률, 패킷이 전송 중 소멸되는 비율
OSI & Layer와 식별자
알기쉽게 Bottom-up으로 다룬다. 개인적으로 개발 네트워크 서적이 Top-down으로 설정되어있는데, 개발자입장에서는 편하지만, 그냥 네트워크를 처음 배우는 입장에서는 이해가 힘든 것 같다. 요즘 네트워크 서적이나 강의는 보통 그래서 Bottom-up식으로 앞부분은 교양처럼 듣고, 뒤에 힘을 주는 방식으로 되어 있는 것 같다.
Host
Host
: Computer + NetworkEnd-point
: 네트워크의 이용 주체 (server, client
는 네트워크 이용 주체의 역할 구분, 구분하지 않으면peer
)Switch
: 네트워크 자체를 이루는 host (Infra)Router
: l3 스위치IPS
: 보안
Switch가 하는 일
네트워크를 고속도로로 비유하면, 고속도로망을 지나가다 교차로를 마주하고 경로를 선택하게 되는데 그 근거는 이정표이다.
- 자동차를 패킷으로 비유
- 경로 선택의 근거인 이정표가 IP주소이면 L3 스위칭(라우터, 라우팅 테이블), 다른 계층도 마찬가지
- 스위칭에서 경로별 비용을 Matric에 비유
L2
-
NIC
: Network Interface Card, H/W, MAC주소를 갖는다. (기본적으로는 신호를 프레임으로, 프레임을 신호로 변환)- 프레임을 검출해서 폐기하거나 전달하는 역할도 여기서
-
다나와
: 남자들의 쇼핑몰 😏 -
Packet
: 데이터 단위(사실 L2에서는 Frame을 씀 10kb 내외) -
MAC
: Ethernet 계층의 48bit 식별자 -
L2 Access switch
: End-point와 직접 연결되는 스위치(MAC) 주소를 근거로 스위칭- 물리적인 단자 하나당 하나의 인터페이스
- 그냥 포트라고도 함
Link-up, Link-down
: 연결 상태 (와이어샤크 수업이 생각난다..)
-
L2 Distribution switch
: L2 스위치를 위한 스위치(VLAN
기능을 제공) -
규모를 감잡기 위해서 l2스위치는 방하나, l2d 스위치는 층하나, 라우터는 건물 하나
-
Broadcast
:Unicast
와는 반대, Broadcast주소라는 매우 특별한 주소가 존재(111111111111111111)- 목적지 주소가 Broadcast 주소이면, 전체 네트워크 모두로 전송
- Broadcast이 발생하면, 다른 네트워크가 통신을 못함
-
Ethernet 프레임 헤더 구조
Preamble
: 7byte, 10101010, 10101010, 10101010, 10101011 : 전송 시작을 알리는 신호SFD
: 1byte, 10101011 : 프레임의 시작을 알리는 신호Destination MAC Address
: 6byte : 목적지 MAC 주소Source MAC Address
: 6byte : 출발지 MAC 주소Type
: 2byte, IP, ARP, RARP, etc (Ethernet Type)Data
: 46 ~ 1500byte : 실제 데이터FCS
: 4byte, CRC : 오류 검출을 위한 계산값, 틀리면 버림
L3
-
IP Address
: l3 식별자, 32bit(8bit * 4) 즉 (0 ~ 255).(0 ~ 255).(0 ~ 255).(0 ~ 255)- . 으로 구분되며 앞의 세개의 숫자는
Network Id
, 뒤의 하나의 숫자는Host Id
- . 으로 구분되며 앞의 세개의 숫자는
-
Packet
: L3 IP Packet- Header, Payload로 나뉘는데, 이건 상대적인 분류
- 최대 크기는 MTU (Maximum Transmission Unit) : 특별한 이유가 없다면 1500bytes
-
Encapsulation
,Decapsulation
-
패킷의 생성, 전달, 소멸
-
계층별 데이터 단위 정리
Frame
: l1 ~ l2
Packet
: IP에서(~ MTU)
Segment
: TCP에서(~ MSS)
Stream
: 소켓에서 (연속적으로 이루어져 있으며, 크기를 정확히 알 수 없음)
IPv4 Header 형식과 구성요소
- Version : 버전
- IHL : Header Length
- Type of Service : 서비스의 종류
- Total Length : 전체 길이
- Identification : 패킷의 식별자
- Flags : Fragmentation
- Fragment Offset : Fragmentation
- Time to Live : 패킷의 수명
- Protocol : 상위 계층 프로토콜
- Header Checksum : 헤더의 체크섬
- Source Address : 출발지 주소
- Destination Address : 목적지 주소
Subnet Mask
: 네트워크 주소와 호스트 주소를 구분하는데 사용되는 32bit 값 (1111 1111. 1111 1111. 1111 1111. 0000 0000)
- 기본적으로 원래는 클래스를 나눠서 호스트 주소와 네트워크 주소를 구분했었음
- a클래스면 앞에 8bit, b클래스면 16bit, c클래스면 24bit 와 같이 사용했는데, 이제는 서브넷 마스크로 구분
- 비트 and 연산을 통해 네트워크 주소와 호스트 주소를 구분
CIDR
: Classless Inter-Domain Routing, 서브넷 마스크를 표기하는 방법
- 192.168.0.10/24 와 같이 표기
- 호스트 주소와 네트워크 주소를 가르는 1의 개수를 표기
- 클래스 구분은 없지만 예를들어 a클래스면 /8, b클래스면 /16, c클래스면 /24
- 즉 앞에 n개의 비트만 and 연산을 해서 네트워크 주소를 추출하겠다는 의미
Broadcast IP Address
: 네트워크의 모든 호스트에게 데이터를 전송하는데 사용되는 특별한 주소
- 네트워크 주소의 마지막 호스트 주소를 Broadcast 주소로 사용
Multicast IP Address
: 특정 그룹에 속한 호스트에게 데이터를 전송하는데 사용되는 특별한 주소
Host 주소로 사용할 수 없는 주소
- 0 : 서브넷 주소
- 255 : Broadcast 주소
- 1 : Default Gateway 주소(보통은)
- 참고 : 127.0.0.1 (localhost, loopback 주소)
인터넷 사용 전에 해야 할 설정
- IP 주소 설정
- 서브넷 마스크 설정
- Gateway IP 설정
- DNS 설정
귀찮으니까 DHCP를 사용한다.
DHCP
: Dynamic Host Configuration Protocol, 호스트에게 IP 주소를 동적으로 할당하는 프로토콜 (Broadcast로 요청하고, DHCP 서버가 응답, 즉 Broadcast domain에 묶여있어야함)
DHCP Discover
(client to dhcp server) : 클라이언트가 DHCP 서버를 찾는 과정DHCP Offer
(dhcp server to client) : DHCP 서버가 클라이언트에게 IP 주소를 제안DHCP Request
(client to dhcp server) : 클라이언트가 IP 주소를 요청DHCP Ack
(dhcp server to client) : DHCP 서버가 IP 주소를 할당
ARP
: Address Resolution Protocol, IP 주소를 MAC 주소로 변환하는 프로토콜
NAT
: Network Address Translation, 사설 IP 주소를 공인 IP 주소로 변환하는 프로토콜
| 참고로 공유기는 라우터 + 스위치 + DHCP Server + NAT 기능을 가지고 있음
Ping과 RTT
ICMP
: Internet Control Message Protocol, 네트워크 장비 간에 메시지를 주고받는 프로토콜Echo Request
: PingEcho Reply
: Ping에 대한 응답Time Exceeded
: TTL이 0이 되어서 패킷이 소멸될 때Destination Unreachable
: 목적지에 도달할 수 없을 때
L4
TCP, UDP
: 둘을 구분하는 가장 큰 차이는 Connection
이다.
- 문제는 연결이 Virtual이라는 것 (Virtual Circuit)
- 연결은 결과적으로 순서 번호로 구현 (Sequence Number)
- 연결은 상태 기반 (Stateful)
TCP
: Transmission Control Protocol, 신뢰성 있는 데이터 전송을 보장하는 프로토콜
- Client-Server 모델
- 클라이언트가 소켓을 열면, OS가 TCP 포트를 부여함
3-way Handshake
: TCP 연결 설정 과정
-
SYN
: 클라이언트가 서버에게 연결을 요청 -
SYN-ACK
: 서버가 클라이언트에게 응답 -
ACK
: 클라이언트가 서버에게 응답 -
Handshake 과정에서
Sequence Number
와Acknowledgement Number
가 사용됨, 그리고 정책을 교환함 (MSS, Window Size 등)
4-way Handshake
: TCP 연결 해제 과정
FIN
: 클라이언트가 연결 종료 요청ACK
: 서버가 응답FIN
: 서버가 연결 종료 요청ACK
: 클라이언트가 응답
TCP Header 형식과 구성요소
- Source Port : 출발지 포트
- Destination Port : 목적지 포트
- Sequence Number : 순서 번호
- Acknowledgement Number : 확인 번호
- Data Offset : 데이터 오프셋
- Reserved : 예약 필드
- Flags : 플래그 필드
- Window Size : 윈도우 크기
- Checksum : 체크섬
- Urgent Pointer : 긴급 포인터
- Options : 옵션 필드
- Padding : 패딩 필드
UDP
: User Datagram Protocol, 신뢰성 없는 데이터 전송을 보장하는 프로토콜
-
Connectionless
: 연결 설정 과정이 없음 -
Stateless
: 상태를 유지하지 않음 -
Best Effort
: 최선을 다하지만, 데이터 손실이 발생할 수 있음 -
혼잡제어, 버퍼 관리, 흐름제어가 없음
-
클라이언트를 배려하지 않음
-
그런데도 쓰는 이유
- IPTV의 경우, 실시간 스트리밍을 하는데, 사용자마다 네트워크 속도가 다르면 하향 평준화 밖에 답이 없음
- 게임서버의 경우 마찬가지로 TCP를 사용하면 하향 평준화가 발생함, UDP + 혼잡제어를 직접 구현해서 사용하는 것이 더 효율적
UDP Header 형식과 구성요소
- Source Port : 출발지 포트
- Destination Port : 목적지 포트
- Length : 길이
- Checksum : 체크섬
세 가지 네트워크 장치 구조
- Inline, 대표 장치
- Packet + Drop/Bypass + Filtering
- Out-of-path
- Packet + Read only, Sensor
- Proxy
- Socket stream + Filtering