개요
네트워크에 대한 간단한 개념을 복습할겸 포스팅을 남겨봅니다.
복습용이므로 자료사진같은 것은 생략했습니다.
OSI(Operating System Interconnection) 모델은 ISO에서 만든 모델로 컴퓨터 네트워크 프로토콜입니다.
실제로는 1, 2 / 5, 6, 7을 통합해 4개의 계층으로 표현한 TCP/IP모델을 사용하지만 이론을 공부하기에는 OSI 7계층이 좋습니다.
기본적으로 각 계층은 송신시에는 하위계층으로 수신시에는 상위계층으로 보내는 캡슐화, 비캡슐화 기능을 합니다.
물리 계층(Physical Layer)
물리 계층은 말그대로 물리적인 전송을 담당합니다.
윗 계층에서 내려주는 프레임에 대해 알지 못하고 비트를 전기 신호로 변환해 그저 전송합니다.
그리고 도착하면 전기 신호를 다시 비트로 바꿉니다.
따라서 전송 단위를 Bit라고 합니다.
비트를 전기신호로 변환할 때 위에서 내려온 프레임의 앞뒤로 SFD(start frame delimiter)를 붙이는데 이는 비트10101001을 붙여 수신할 때 NIC의 물리칩이 들어오는 신호의 시작과 끝 부분을 인식하도록 합니다.
물리 계층은전압, 주파수, 위상 펄스 같은 물리적인 값을 다룹니다.
굳이 장비를 따지자면, 리피터, 허브, 각종 케이블 등이 있습니다.
물리 계층이 보내는 전기적 데이터는 항상 데이터링크 계층의 프레임에 종속되기 때문에 TCP/IP모델에서는 물리 계층과 데이터링크 계층을 묶어 표현합니다.
데이터링크 계층(Data link Layer)
데이터링크 계층은 물리적으로 연결된 두개의 노드 사이에서 비트스트림을 프레임 단위로 묶는 등 노드 간 물리적 통신을 도와주는 역할을 합니다.
데이터링크 계층부터는 계층에 해당하는 프로토콜들이 존재합니다.
대표적인 프로토콜로는 이더넷, 와이파이 등이 있지만 유선의 연결인 이더넷이라고 가정하고 진행하겠습니다.
프레이밍: 송신 시에 IP계층에서 받은 패킷에 MAC헤더와 FCS를 붙여 프레임으로 만듭니다.
MAC주소는 장비에게 붙여진 고유한 주소로 이론적으로는 전세계에서 해당 장비만 가지고 있는 48비트 주소지만, 실제로는 해당 LAN내에서만 유일해도 충분합니다.
MAC주소는 장비에 붙은 NIC(Network Interface Card)의 사양을 따라갑니다.
네트워크를 사용하는 장비는 반드시 이 NIC를 가집니다.
cmd창에 ipconfig를 입력했을 때 나오는 물리적 주소가 MAC주소입니다.
중요한 것은 이 MAC주소를 기입할 때 실제로 도착하는 종착지 주소가 아닌 단기 목적지(바로 다음 홉)의 MAC주소를 기입한다는 점입니다.
수신 시에는 헤더를 확인해 적절하게 온 패킷인지 확인합니다.
에러검출: 데이터링크 계층에서는 CRC를 통해 에러를 검출합니다. 프로토콜마다 에러 검출 시 동작이 다른데 이더넷의 경우 에러를 발견하면 해당 데이터를 폐기하는 것에 그치고, wifi 등은 재전송을 하기도 합니다.
대표적으로는 L2스위치가 2계층 장비입니다.
스위치는 LAN내에서 프레임에 있는 목적지 MAC주소를 통해 다음 장비로 통신을 중계합니다.
ARP(Address Resolution Protocol)
L2계층에서 사용하는 대표적인 프로토콜입니다.(IPv4)
L3계층과의 밀접한 협업으로 동작하기 때문에 2.5계층 프로토콜이라고도 여겨집니다.
ARP는 L3에서 얻은 다음 홉 IP를 MAC주소로 전환하는 프로토콜입니다.
아까 MAC주소는 근거리의 목적지라고 했는데 그렇다면 L3에서는 목적지의 IP뿐만이 아니라 근거리의 IP도 별도로 내려준다는 것을 알 수 있습니다.
L3는 근거리의 MAC주소를 얻기 위해 ARP테이블을 참조합니다.
ARP테이블에는 해당 장비의 서브넷 안에 속하는 장비들의 IP주소와 MAC주소를 매핑시켜, L3가 라우팅을 한 뒤 ARP가 동작하는 횟수를 줄입니다.
만약 매핑 정보가 없거나 매핑 정보가 timeout되어 사라졌다면 ARP를 L2에게 요청합니다. ARP를 통해 서브넷에 있는 장비들에게(브로드캐스트 신호가 도달가능한 장비) IP주소가 본인의 것이 맞는지 브로드캐스트하고, 이에 대한 응답을 보낸 장비의 MAC주소를 프레임에 기입합니다.
MTU(Maximum Transfer Unit)
이더넷은 기본적으로 나가는 크기를 MTU로 제한합니다.
이를 위해 전체 패킷의 크기를 MTU단위로 자르는 것이 필요한데 이는 네트워크 계층에서 일어납니다.(UDP인경우)
왜냐하면 조각난 패킷은 목적지에서 합치는 것이 필요하고, L2는 단기간의 목적지만을 가지기 때문에 L3에서 목적지임이 확인된다면 그제서야 합칠 수 있습니다.
네트워크 계층(Network Layer)
네트워크 계층(L3)부터는 단거리의 목적지가 아닌 실제 목적지로 향합니다.
L3계층을 대표하는 것은 IP입니다.
IP(Internet Protocol)는 host에서 host까지의 통신을 중계합니다. 라우팅도 IP의 도움을 받습니다.
IP라고도 불리는 IP주소는인터넷에서 유일한 주소로 endpoint를 식별하는 것에 사용합니다.
IP는 비연결성 비신뢰성 특성을 가지는 프로토콜입니다.
패킷의 전달 여부를 보장하지 않습니다.
IPv4에는 checksum field가 있긴 하지만 오류 발생 시 대부분 그냥 drop합니다.
다만 IP주소는(v4기준) 모든 L3이상 장비에 부여하기에는 32비트이기 때문에 부족합니다.
이후 IPv6가 나오긴했지만 그 이전에 이러한 IP의 부족과 추가적으로 보안성을 위해 NAT기술을 도입했습니다.
Fragmentation(단편화)
L3의 송신측에서는 MTU에 맞춰서 데이터를 조각냅니다.
수신측에서는 만약 조각이 났다면 (fragmentation flag 확인) 이를 재조립해줍니다.
다만 IP는 Best-Effort 프로토콜이기 때문에 특정 조각이 유실되었다면 (timeout이 지난다면) 전체 패킷을 드랍합니다.
NAT(Network Address Translation)
NAT는 public ip와 private ip의 경계를 구분합니다.
NAT기술은 라우터 혹은 공유기 등에 들어갑니다.(엄밀히는 NAPT)
NAT를 사용하는 장비에는 NAT table이 있어 이를 통해 매핑합니다.
NAT 테이블의 row는 데이터가 안에서 밖으로 나갈 때 생깁니다.
따라서 P2P게임의 경우 홀펀칭이 필요할 수 있는 것입니다.
서브넷 마스크
서브넷 마스크는 IP의 network id와 host id를 구분하게 해주는 방법입니다.
endpoint ip와 subnet mask를 bit&하여 나오는 주소가 network id이고 나머지가 host id입니다.
이 때 network id가 같다면 같은 브로드캐스트 도메인에 있다고 볼 수 있습니다.
서브넷 마스크는 IP의 클래스 개념을 차용해 정했었습니다 .
현재는 CIDR이라는 개념으로 클래스에 묶이지 않고 마스크를 씌웁니다.
만약 목적지와 마스크를 씌워 network id가 같다면 데이터를 외부로 돌릴 필요가 없겠죠
그리고 이는 라우터에서도 적용됩니다.
전송 계층(Transport Layer)
전송 계층(L4)는 L3에서 도착한 종단에서의 프로그램을 식별하도록 도와줍니다.
L4계층을 대표하는 것은 TCP와 UDP입니다.
공통적으로는 Port를 사용해 종단에서 동작하는 프로세스를 식별합니다.
하나의 Port는 하나의 프로세스에 대응하지만 하나의 프로세스는 여러개의 Port를 열어 사용할 수 있습니다.
TCP는 신뢰성 있는 통신을 하고, UDP는 비신뢰성 통신을 합니다.
UDP헤더에는 단순히 출발지, 목적지의 포트와 길이, 체크섬만을 담습니다.
TCP(Transmission Control Protocol)
TCP는 UDP에 비해 기능이 많습니다.
TCP는 신뢰성있는 통신을 하기 때문에 이 신뢰성을 갖추기 위한 여러 동작을 합니다.
1. 논리적 연결: TCP는 본격적인 통신을 하기 전에 출발지와 목적지 간의 논리적인 연결을 합니다. 이는 3handshaking으로서 이루어집니다.
2. 흐름 제어: TCP는 기본적으로 상대방이 데이터를 받을 수 있을 만큼만 보냅니다. TCP헤더에는 window size라는 값이 있어 수신자의 소켓 버퍼의 크기를 나타냅니다. 다만 해당 크기가 항상 일치한다고 볼 수 없습니다. 예를 들어 그 사이에 다른 데이터를 더 처리하느라 윈도우의 사이즈가 줄어들 수 있다. 이를 위해 수신측에서는 필요한만큼만 처리하고 ACK에 SEQ번호를 보내 순서를 제어한다.
3. 에러 제어: TCP는 MTU를 위해 데이터를 MSS단위로 조각냅니다. 이 때 L3에 맡기지 않고 굳이 L4에서 조각내는 이유는 에러 제어를 위해서입니다. TCP는 데이터에 대한 특정 조각이 유실되었을 때 세그먼트 전체가 아닌 해당 조각만 다시 재전송하도록 요청합니다. 이는 L4에서 순서제어가 필요한 것이고, 세그먼트의 순서를 L4에서 알 수 있어야 한다는 것과 같습니다.
MSS(Maximum Segment Size)
MSS는 보통 1460 Byte입니다. 이는 MTU의 크기에서 IP헤더, TCP헤더의 크기를 제외한 크기입니다.
세션 계층(Session Layer)
보통 5~7계층 부터는 하드웨어의 관여가 없는 OS위에서 동작하는 소프트웨어의 영역이므로 묶어서 표현하기도 합니다.
또한 보통 5~7계층은 하나의 프로그램 안에서 동작의 방식에 따라 구분됩니다.
세션 계층은 그 중에서도 사용자의 연결을 관리하는 "세션"의 개념을 주로 다루는 계층입니다.
로그인 세션, 대화 제어 등을 하며 RPC가 대표적인 세션 계층 프로그램입니다.
표현 계층(Presentation Layer)
표현 계층은 데이터를 "표현" 하는 방식을 다루는 소프트웨어 계층입니다.
따라서 Big <-> Littel 엔디언 변환, 문자열 인코딩 방식 변환, 압축, 암호화
애플리케이션 계층(Application Layer)
그 외의 대부분 유저와 가까운 소프트웨어를 애플리케이션 계층으로 구분합니다.
'CS > 네트워크' 카테고리의 다른 글
| [네트워크 개념 복습] Select 모델 (0) | 2025.10.01 |
|---|---|
| [네트워크 개념 복습] 소켓 알아보기 (0) | 2025.09.30 |
| TCP흐름 Wireshark로 확인해보기 (4) | 2025.07.24 |
| [네트워크 개념] 버클리 소켓 - 2 (0) | 2025.07.19 |
| [네트워크 개념] 버클리 소켓 - 1 (0) | 2025.07.15 |