| OSI 7계층 | Physical | Data Link | Network | Transport | Session | Presentation | Application |
|---|---|---|---|---|---|---|---|
| TCP/IP 4계층 | Network Access | Internet | Transport | Application | |||
개인적으로는 TCP/IP 4계층 구분을 좀 더 선호하지만 대부분 네트워크 이론 수업이나 교재가 osi 7계층 기반으로 작성돼 있기 때문에 이 페이지 또한 osi 7계층을 기반으로 정리를 하였습니다.
다만, 물리 계층은 제외하였습니다.
네트워크 레이어는 종단 호스트간의 패킷 통신을 수행합니다. (전송 단위: 패킷)
춣발지부터 목적지까지의 경로를 계산하는 라우팅, 포워딩이 주요 기능입니다.
네트워크 트래픽이 과도하게 몰려 통신 성능이 악화되는 현상을 에방, 해결하기 위한 기능입니다.
네트워크 경로 사이에 있는 개별 라우터가, 자신의 패킷 처리 능력을 넘어서는 패킷 입력이 들어오면 버퍼 용량이 넘쳐 버려지는 패킷이 많아지게 됩니다.
이를 해결하지 않고 계속해서 패킷을 보내 자신의 패킷을 처리하려고 하는 호스트, 라우터가 존재하면 네트워크 망 전체가 마비 되어 손해를 보게 됩니다.
문제 해결 기법:
정리히자면, 기본적으로 라우터는 과도한 패킷이 들어올 시 패킷을 버립니다(Leaky Bucket). ECN 패킷을 보내 혼잡을 알려 라우팅 경로를 수정시킵니다. TTL을 사용해 네트워크 망에 패킷이 과도하게 돌아다니지 않도록 방지합니다.
패킷의 전송 경로를 결정하는 기능으로, 네트워크 레이어의 핵심 기능입니다.
송신 호스트가 목적지까지의 경로를 직접 기록하여 송수신 하는 방식입니다. 이런 방식은 위험하기에 대부분의 라우터에서 차단해놓습니다. 보통 작은 규모의 통제적인 환경에서 활용됩니다.
RCC(Routing Control Center)라는 특수 호스트를 사용해 네트워크의 전체 라우팅을 관리합니다. 패킷 전송시 출발 호스트가 RCC한테 경로를 받아온 뒤, 소스 라우팅을 사용해 목적지로 보냅니다.
각각의 라우터가 직접 거리 벡터 알고리즘을 통해 인접 노드에 대한 링크 정보를 기반으로 목적지까지의 최소 경로를 계산합니다.
중앙 라우팅 + 분산 라우팅의 하이브리드 형태입니다. 네트워크 계층에 따라 같은 계층 안에서는 중앙 라우팅을, 외부 계층에 대해서는 분산 라우팅을 통해 경로를 계산합니다.
보낼 수 있는 모든 경로에 대해 패킷을 보냅니다. 주로 브로드캐스팅을 위해 사용됩니다.
링크 벡터: 직접적으로 연결된 네트워크 정보, L(R) = [Port#n(Net#n), Port#m(Net#m), ...]
거리 벡터: 전체 네트워크에 소속된 개별 네트워크들까지의 거리(전송 지연시간) 정보 D(R) = [(net1, 1), (net2, 1), (net3, 2), ...]
다음 홉 벡터: 대상 네트워크로 보낼 다음 홉 정보 H(x) = [(net1, Rn), (net2, Rm), ...]
정보 갱신: 인접한 라우터로부터 거리 벡터를 받음. 거리 벡터 + 대상 라우터간의 거리가 현재 저장된 거리벡터보다 작으면 거리벡터, 홉 벡터 갱신
전체 IP주소가 아닌, 주소 앞 부분의 네트워크 주소만을 가지고 목적지를 등록. cmd 플래그 값이 1이면 RIP요청, 2면 응답
자신의 링크 벡터에 변화가 있을 시 링크 벡터를 모든 라우터에 브로드캐스트. 각 라우터는 그런 정보를 받아서 경로를 계산함.
거리 벡터와의 차이점 - 거리 벡터는 자신과 인접한 라우터들간의 정보 공유.
링크 상태는 자신의 정보를 네트워크 내의 모든 라우터들에게 브로드캐스트
단순히 외부 네트워크와, 연결이 돼 있으면 전송. 경로가 단순하기에(보통 하나의 큰 게이트웨이만 존재) 경로 계산 없이 보내기만 하면 됨.
// IPv4 헤더
0 3 7 13 15 31
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ver | H_L | DS |ECN| Packet Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TTL | Transport | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options / Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
경로상의 라우터나 스위치가 처리할 수 있는 패킷, 프레임의 최대 크기(mtu)를 초과하는 패킷이 있을 수 있습니다.
라우터는 이를 판단하고 다음 경로상의 라우터의 mtu보다 보낼 패킷 크기가 더 크다면, 패킷을 분할하여 보냅니다.
분할된 패킷은 그대로 계속 라우팅 되어 목적지까지 도착한 후 목적지 호스트가 패킷을 조립하여 사용합니다.
패킷 분할은 페이로드를 8바이트 단위로 자릅니다(마지막 패킷은 자유). 즉, 102바이트짜리 페이로드를 보낼 때, 32, 32, 32, 6 바이트로 잘릴 수 있습니다. (51, 51바이트는 안 됨)
8바이트 단위로 자르는 이유는, 이 패킷의 Fragment Offset으로 사용하기 위한 비트 수를 절약할 수 있기 때문입니다.
즉, 1바이트 단위로 자르는 것보다 8바이트 단위로 자르는 것이 패킷 오프셋을 표현하기 위한 비트 수가 3비트 절약된다는 장점이 있습니다.
더 들어가기
IP헤더의 패킷 길이 표현은 16비트입니다. Fragmentation에 사용되는 비트는 16개이지만, 앞의 3개는 (예약됨, 분할가능여부, 마지막 조각 여부)로 쓰이고 뒤의 13개가 Fragment Offset으로 쓰입니다.
즉, 패킷 분할을 8바이트 단위로 함으로써 최대 패킷 길이를 조작할 수 있게 됩니다.
동적 IP 할당 프로토콜
통신 과정
Host -> Server 저 IP 할당받고 싶어요 여기 DHCP 서버 있나요(브로드캐스트) DHCP_DISCOVER
Server -> Host 이 IP 쓸래? DHCP_OFFER
Host -> Server 네 그 IP 쓸래요, 쓸 수 있을까요? DHCP_REQUEST
Server -> Host 그래 너 그 IP 써 / 아니 너 쓰지마 DHCP_ACK / DHCP_NACK
목적지의 IP 주소를 통해 대상 호스트의 MAC 주소를 얻는 프로토콜
RARP: 호스트가 자신의 IP 주소를 모름(스토리지에 저장을 못 하는 경우) -> 자신의 mac주소를 브로드캐스팅해 그에 대응되는 ip주소를 받아서 자신이 사용함
오류 메시지나 ping 송수신 (TTL 만료 알림, 패킷 누수, 목적지 접근 불가)
Input Ports를 통한 동시 다발적인 데이터 수신, Switching fabric을 통한 데이터 포워딩, Output Ports를 통한 데이터 송신을 잘 하는 것에 대해 연구
큐잉, 스케줄링, 내부 데이터 송수신(메모리, 버스, interconnected network) 등
프로세스간의 통신을 처리하는 계층입니다.
수신자가 상대방에게 자신의 Window=n이라는 슬라이딩 윈도우 크기를 알려주는 세그먼트를 보냄 -> 송신자는 한 번에 최대 n개 바이트 보냄 전송 오류 발생시: NACK 굳이 안 보내고, ACK를 보내지 않음을써 타임아웃을 통해 송신 측에서 재전송이 이뤄짐