이 책을 네트워크 수업 전에 봤더라면.. 내 학점이 달랐을까?
선감상
- 하루 3분으로는 모자라다. 그럼에도 불구하고 탑다운 어프로치에 비해 40만 배 쯤 EZ하다.
- '미움받을 용기'체로 작성되었는데, 읽기 아주 편했다. 일본 글은 문화가 우리랑 너무 유사해서 이해가 참 쉽단 말이지.
- 좋은 책이다.
OSI Reference Model
"데이터 통신의 단계와 순서"를 보여주는 설계도
- 송신측 : 운반하고 싶은 유저의 Data에 헤더를 추가하며 캡슐화
- 수신측 : 캡슐을 하나씩 벗겨가며 Data를 획득
프로토콜
데이터 내용, 헤더, 송수신 순서를 결정
프로토콜은 각 계층마다 존재하며, 각 계층의 프로토콜이 모여 Protocol Suite가 된다.
이 모델을 통해 일련의 OSI Standard Protocol Suite를 만들었지만, TCP/IP Protocol Suite가 오늘날의 De facto standard.
TCP/IP Model과 OSI Model은 아무런 관련이 없다.
OSI 7 layers
각 계층은 그 하위 계층의 상황은 전혀 생각하지 않는다
- 1계층 : 신호 송/수신
- 2 ~ 3계층 : 송/수신된 데이터에 대한 처리
- 4계층 ~ : 데이터를 송신하기 전, 수신한 후의 처리
1 - Physical layer (Interface layer)
케이블이 연결된 기기에 신호를 '전달'한다
매체 (케이블)
- 유선
- 동선 (동축)
- UTP (twisted pair)
- 광케이블
인터페이스
"컴퓨터와 신호의 중개역"
NIC (Network Interface Card) : for LAN (Local Area Network) cable
DCE : for WAN
신호에 발생할 수 있는 문제들
- 신호 약화 (장거리)
- 노이즈
- 충돌 (2계층에서 자세히 설명)
허브의 기능
- 신호의 증폭/재생 (Repeater)
- 네트워크 구축 : 여러 기기가 같은 케이블에 연결된 것처럼 만들어줌
Flooding : 신호가 들어오면 -> 그 외 모든 포트 (Collision Range) 로 송신 => 충돌 위험
2 - Data Link layer (Interface layer)
세그먼트에서 '데이터의 송수신'을 고려/제어한다
세그먼트 : 신호가 도달하는 범위
LAN -> Ethernet Rule 사용 (de facto)
Framing
비트열에 의미 주기
프레이밍을 시행해 송수신되는 신호가 '데이터가 된다.
preamble로서 0, 1을 교대로 보내 clock sync
*wire shark : 패킷캡쳐, 즉 NIC가 수신한 모든 ethernet frame을 capture
Addressing - MAC
2계층의 Physical Address
Media Access Control
MAC 주소는 인터페이스 당 하나이며, 고유하다.
데이터 전송 방법
- 유니캐스트 (unique one) - 허브의 경우 (flooding), 수신처 MAC이 자신과 일치하지 않으면 프레임을 파기한다.
- 브로드캐스트 (all) - 라우터로 구분된다 (3계층 참고)
- 멀티캐스트 (group)
- 애니캐스트
신호 충돌 방지
- CSMA/CD : Half-duplex (송수신 가능하지만 한 순간엔 한쪽만)
- CS (Carrier Sense; 신호 감지) : 누군가 송신 -> 송신 X
- MA (Multiple Access; 다중 액세스) : 아무도 송신 X -> 송신 O
- CD (Collision Detection; 충돌 검사) : 송신 후 충돌 -> 재송신
- Switch : 허브 대신 사용, Full-duplex
- MAC address filtering : 학습 후, 최소한의 MAC 으로 송신
- Buffering
3 - Network layer (Internet(IP) layer)
'세그먼트 간'에 데이터를 송수신한다
이 세그먼트를 (협의의) '네트워크'라고 부름
네트워크들을 서로 연결하는 것을 Internetwork 라고 부름
IP를 통해 addressing, routing을 수행한다.
Addressing - IP
3계층의 Logical Address
어드레싱과 라우팅
IP는 '소속된 네트워크 내에서' 유일하다.
IP = 32 bits = network # + computer(host) # = "어느 네트워크의 어느 컴퓨터"
*bit가 중요하다. 십진수로 표기된 것을 보고 혼동 노노
- Classful addressing
- A, B, C : 각각 8, 16, 24 비트가 네트워크 번호
- 호스트 번호가 모두 0인 ip : 네트워크 주소 - 네트워크 자체를 표시 (ex. 192.168.11.0)
- 호스트 번호가 모두 1인 ip : 브로드캐스트 주소 (ex. 192.168.0.255)
- 서브넷 (Subnetwork) : 호스트 번호의 일부를 (서브)네트워크 번호로 사용
- 서브넷마스크 : 어디까지가 서브넷인지 정보 제공 - 네트워크 # 과 서브넷 # = 모두 1, 나머지 0
- 서브넷마크스는 ip와 세트로 기술
- Classless addressing
- 슈퍼넷 (Supernetwork) : (ex. C 클래스 네트워크 8개로 1개의 네트워크 구축 -> 2000 ip 확보)
- prefix : 네트워크 # 갯수만큼 표시 (ex. 192.168.32.0/21 -> host는 2^11 = 2048개)
DHCP
Dynamic Host Configuration Protocol
수동 설정 대신, DHCP 서버가 대여해주는 ip를 사용 (브로드캐스트 사용)
ARP
Address Resolution Protocol
APR Table : IP-MAC 매칭표. 표가 비었으면 브로드캐스트
DNS
Domain Name Server
도메인-IP 매칭표
정리
송신처 MAC : NIC를 장착하면 바로 알 수 있음
송신처 IP : 수동 또는 DHCP 로 할당
수신처 IP : DNS로 획득
수신처 MAC : ARP로 확인
이후 데이터 전송 진행
Routing
목적지까지 도달하는 과정에서,
- MAC은 동일 네트워크의 수신처를 정한다 -> 변동
- IP는 최종 네트워크의 수신처를 정한다 -> 고정
라우터(hop)는 네트워크 간 경계에 배치되어, 다음 수신처를 결정한다.
라우터가 없으면 다른 네트워크는 (설령 같은 허브일지라도) 데이터를 절대 전송할 수 없다. 그래서 일반적으로 각 컴퓨터는 default gateway 지정해둔다.
라우터에 인터페이스가 세개라면 -> 세 개의 네트워크에 소속된 셈
Routing Table
Longest Rule : 테이블에 있는 destination-nextRouter 조합에서, 지금 요청이 들어온 destination ip와 기존 destination들 중 제일 prefix가 많이 겹치는 쪽으로 결정해서 해당 nextRouter로 전송
- 정적 라우팅
- 동적 라우팅 : Routing Protocol을 통해 Routing Table을 갱신
- Convergence가 필요함 : 모든 라우터가 동일한 정보를 가져야 함
- AS (Autonomous System) : 하나의 관리 단체로 관리되는 네트워크 집합체. 복수의 네트워크로 구성.
- AS 간 라우팅 프로토콜 : EGP (External Gateway Protocol)
- AS 내 라우팅 프로토콜 : IGP (Internal Gateway Protocol)
- ex. RIP : Hop count를 metric으로 사용
또다른 프로토콜 - ICMP
Internet Control Message Protocol
에러 보고 프로토콜
IP 패킷(데이터그램)의 TTL이 만료되었을 때 에러를 제공한다.
*IP 패킷의 TTL과 DNS 레코드의 TTL은 다름. IP 패킷의 TTL은 1 hop마다 1씩 감소
ping ICMP를 사용한다
traceroute는 ttl을 1씩 늘려가는 방식으로 라우팅 루트를 기록한다.
4 - Transport layer (Transport layer)
신뢰성이 높은 전송을 수행한다 (신뢰성을 높인다)
- 에러 복구
- 흐름 제어 (오버플로 통제)
- 포트 번호 사용
- 2**16 (65536) 개
- 1 ~ 1023 : Well-known ports
TCP와 UDP
- TCP (Transmission Control Protocol) : 커넥션 확보 by TCP 헤더 (내에 있는 Flags)
- 3 way handshake : SYN -> ACK + SYN -> ACK => ESTABLISHED (커넥션 확립)
- 4 way handshake : FIN + ACK -> ACK -> FIN + ACK -> ACK => CLOSED (커넥션 단절) *2, 3번 신호 둘다 상대방쪽에서부터 옴
- 세그먼트 분할 : 하나의 데이터를 복수의 세그먼트로 분할 - MSS (Max Segment Size)을 이용.
- RTT (Round-Trip Time)으로 재전송 요청
- 윈도우 제어 : 복수의 세그먼트를 전송
- UDP (User Datagram Protocol) : 포트 번호 외에 별다른 헤더 없음.
NAT
Network Address Transmission
"내부 네트워크"를 구축하는 기술
내부 네트워크에서도 TCP/IP 통신을 하기 위해 사설 IP 주소를 할당해줌.
그런데 두 명의 내부 사용자가 동시에 global ip를 쓰려고 하면, 패킷이 돌아올 때 어느쪽에 데이터를 넣어줄지가 불분명하다 -> 동시 접속 불가
*추가 설명 : https://5kyc1ad.tistory.com/254
이에 따라, NAPT (Network Address Port Transmission) 가 등장 : 내부적으로 포트까지 하나씩 할당해주기 때문에 여러 기기가 동시에 인터넷 접속 가능
5 - Session layer (Application layer)
애플리케이션 간 대화가 세션으로서 성립하도록 제어한다 (Dialog Control)
*5,6,7은 TCP/IP 모델의 경우 통합해서 하나의 프로토콜이 된 경우가 많다 (ex. http)
6 - Presentation layer (Application layer)
컴퓨터 간 데이터 형식의 차이(OS, hardware)를 변환해 제거한다
압축이나 암호화도 수행한다.
7 - Application layer (Application layer)
(각각의 목적에 따라) 네트워크 서비스를 제공한다
각 목적에 따른 프로토콜이 존재한다
책에는 없지만...
https는 무슨 레이어인가?
혹은, "tls/ssl은 무슨 레이어인가?"
우선, OSI 모델로 접근하는 건 정말 안좋은 생각이다. 그보다는 TCP/IP 모델 위에 5번째 '보안' 레이어를 얹었다고 이해하는 것이 좋다.