-
[모의 면접 CS 스터디] 컴퓨터 네트워크 1주차CS/네트워크 2024. 1. 11. 16:00
컴퓨터 네트워크 정의
컴퓨터 네트워크는 서로 데이터를 주고 받을 수 있는 ip 등으로 식별가능한 네트워크 노드들의 모임을 뜻한다
여기서 A 노드와 B노드가 있고 B노드가 A노드에 있는 특정한 데이터를 가져오고자 할 때 A 노드는 B 노드에 데이터를 특정한 방식으로 전송할 것이다. 하지만 사람이 서로 대화를 할 때 일정한 규칙에 따라 구성된 언어를 통해 소통하듯이, 두 노드가 서로 데이터를 주고 받기 위해선 특정한 규칙이 필요할 것이다. 이 때 사용되는 것이 바로 통신 프로토콜이다.
여기서 두 노드 사이에 데이터를 주고 받을 때 사용하는 프로토콜을 정했다고 하자. 그렇다면 A 노드와 B노드 사이의 통신은 크게 문제 없을 것이다. 하지만 네트워크 상의 각 노드들이 서로 다른 프로토콜을 사용한다면 네트워크 내의 모든 노드들은 통신이 불가능할 것이고 통신하고자 한다면 각각의 노드에 대응되는 프로토콜로 호환되도록 무언가를 추가해야 할텐데 이는 매우 비효율적일 것이다.
따라서 ISO(International Organization for Standardization, 국제 인터넷 표준화 기구) 라는 곳에서 이러한 문제를 해결하고자 표준화된 네트워크 통신 규약을 정의하는 데 이것이 바로 흔히 알려진 OSI 7계층 모델이다.
OSI 7계층 모델
특정한 노드에서 다른 노드로 데이터를 전송하기 위해 필요한 기능은 매우 다양할 것이다.
이를테면 데이터를 어떻게 전송하고 수신할지, 두 노드 사이에 있는 노드들을 어떤 경로로 지나야 가장 효율적으로 데이터를 전송할 수 있을지, 데이터 전송과 데이터 수신이 정상적으로 이루어졌는지 확인하는 기능등등
이런 기능을 한꺼번에 수행할 수 있는 프로토콜을 만들 수야 있겠지만 이러면 특정한 문제가 발생했을 때 어느 부분에 문제가 있기 때문에 파악하기 어려울 것이고 이는 유지보수의 어려움으로 이어질 것이다. 마치 스파게티 코드처럼 말이다..
그래서 OSI 7계층 모델은 이름에서 드러나듯이 네트워크 통신에 필요한 각 기능을 분할하여 7개의 계층에 그 책임을 할당한 것이다. 이는 물리 계층, 데이터 링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층, 어플리케이션 계층으로 나눌 수 있다.
다만 OSI 7계층은 어디까지나 표준화된 Reference model이기 때문에 반드시 7계층대로 프로토콜들이 구성되는 것은 아니다. 이러한 개념을 실제로 구현한 모델이 흔히 알려진 TCP/IP 모델이다.

TCP/IP 모델
TCP/IP란 전송계층에서 사용되는 프로토콜인 TCP(Transmission Control Protocol)와 네트워크 계층에서 사용되는 프로토콜인 IP(Internet Protocol)를 묶어서 부르는 명칭이다. 이는 데이터가 네트워크 상에서 안정적으로 전달되는 것을 목표로 한다.
TCP/IP 모델은 이러한 TCP/IP를 중심으로 OSI 7계층에 대응하여 4계층, 혹은 5계층으로 바라보는 것이 일반적이다. 4계층과 5계층의 차이는 Network Acces Layer를 물리 계층과 데이터 링크 계층으로 나누느냐 아니냐의 차이인데 여기서는 5계층으로 분류하여 설명하겠다.
1. 물리 계층
물리계층은 네트워크 장치들의 디지털 데이터를 전송에 적합한 형태로 바꾸어 안정적이고 신뢰성 있는 데이터 전달을 가능하게 하는 역할을 담당한다. 하드웨어적인 내용이 많아 자세하게 다루진 않겠지만 데이터 링크에서 들어온 비트 스트림을(0과 1로 이루어진 디지털 데이터)를 전송매체에 적합 형태로 매핑하여 전송한다.
전송 과정에서 데이터 신호가 약해지거나 데이터에 잡음이 생기거나 왜곡되는 등의 문제가 발생할 수 있는데 이걸 리피터라는 장치가 신호를 증폭하고 재생시켜서 더 멀리 데이터가 안정적으로 전달될 수 있도록 돕는다. 이후 수신 물리계층 측에서는 신호를 다시 비트 스트림으로 변환하여 데이터 링크 계층으로 보낸다.
여기서부터 전송 단위로 프레임, 패킷, 세그먼트라는 게 나올텐데, 읽으면서 유의해야 할 점은 헤더와 같은 제어정보를 제외하면 셋이 옮기는 데이터의 크기는 동일하다는 것이다. (이를테면 패킷을 조립해서 세그먼트가 되는 게 아니다.) 각각의 계층에서 해당 데이터에 대해 필요한 제어 정보가 다른데 이걸 구분하기 위해 사용하는 것이다.
미리 정리하자면
세그먼트-> 전송계층에서 어플리케이션 계층으로부터 받은 데이터를 분리해서 거기에 TCP 헤더를 추가한 것
패킷-> 전송계층에서 보낸 세그먼트에 IP 헤더를 부착한 것
프레임-> 네트워크 계층에서 보낸 패킷에 앞에 이더넷 프레임 헤더와 뒤에 트레일러를 부착한 것
그러면 대충
(이더넷 프레임 헤더-IP 헤더-TCP 헤더-데이터-트레일러)
의 형태가 된다.
이렇게 데이터를 보내는 측에서 각 계층에 필요한 헤더와 같은 제어 정보를 부착하는 과정을 encapsulation이라고 한다.
반대로 수신 측의 각 계층에선 자신에게 필요한 정보를 얻기 위해 이 제어 정보를 하나하나 포장을 벗기는데 이걸 decapsulation이라고 한다.
2. 데이터 링크 계층
같은 LAN에 있는 두 노드 간의 통신을 담당하며 전송단위로 ‘프레임’을 사용한다.
데이터 링크 계층에서는 MAC 주소라는 식별자를 통해 통해 인접한 장치 간에 프레임이 이동한다. 이는 랜카드에 할당된 고유한 주소이다.
이 계층의 역할을 몇 가지 살펴보면
1) 프레임의 생성과 분리
데이터를 전송할 때 네트워크로 계층으로부터 패킷을 받아서 출발지의 MAC 주소나 도착지의 MAC 주소 같은 부가 정보인 헤더를 앞에, 트레일러를 비트의 뒤에 붙여 프레임을 만드는데 이를 프레이밍이라고 한다. 이러한 프레임들을 다시 합쳐서 물리계층에 보낸다.
그리고 상대 측에서 데이터를 수신할 때 물리 계층에서 0과 1로 이루어진 비트스트림을 데이터 링크 계층에 전달하는데, 여기서 송신 측이 붙여놓은 헤더와 트레일러를 바탕으로 비트스트림을 프레임으로 분리한다.

데이터 링크에서 스위칭과 라우팅의 과정 2) 인접한 장치 간의 데이터의 이동
데이터 링크 계층에서는 MAC 주소를 이용해 스위칭(Switching)이라는 것을 통해 인접한 장치 간의 데이터 전송을 담당한다. 여기서 스위칭이란 간단하게 말하자면 포트를 통해 인접한 장치와 장치 사이에 데이터가 이동하는 과정이다.
나중에 말하겠지만 네트워크 상에서 나아가야 최적의 경로를 정하는 것은 네트워크 계층에서 하는데 이를 라우팅이라고 한다. 라우팅을 통해 네트워크 계층에서는 다음으로 나아가야 할 목적지의 IP를 알아낸다.
하지만 데이터 링크 계층에서는 MAC 주소를 기반으로 데이터를 전송하기 때문에 IP 주소를 알더라도 MAC 주소를 모르면 데이터를 전송할 수 없다. 따라서 같은 네트워크 세그먼트에 속한 장치의 IP 주소와 MAC 주소를 매핑한 ARP 테이블이라는 것을 가진다.
현재 장치에서 다음으로 나아가야 할 목적지 장치에 대한 IP 주소와 MAC 주소가 ARP 테이블에 있다면 해당 MAC 주소를 가진 곳으로 나아가지만 현재 ARP 테이블에 MAC 주소가 없다면 같은 네트워크에 속한 모든 라우터에게 IP 주소를 보내는데 이를 바로 ARP 요청이라고 한다.
여기서 만약 수신한 장치의 IP 주소가 ARP 요청의 IP 주소와 같다면 이 장치는 응답으로 MAC 주소를 보내는데. 이 MAC 주소는 ARP 테이블에서 저장되고 또한 새로운 프레이밍 과정에서 헤더의 목적지 MAC 주소로 사용된다.
이러한 일련의 과정을 거쳐 드디어 스위칭을 하게 된다. 다만 이러한 스위칭을 하는 장비는 다양한데, 라우터, L2 스위치, 허브 등이 모두 스위칭을 할 수 있다. 여기서는 L2 스위치를 기준으로 설명하겠다. L2 스위치는 여러 네트워크 장치와 포트라는 것으로 연결되며 (포트, 연결된 장치의 MAC 주소)를 매핑한 MAC 테이블을 가진다. 이 MAC 테이블은 수신한 데이터 프레임을 MAC 주소와 매핑되어 있는 장치로 전달하는 역할을 한다. 이것도 ARP 요청과 비슷하게 플러딩이라는 것을 통해 포트에 연결된 모든 장치의 MAC 주소를 갱신하기도 한다.
여기서 유의할 점은 새로운 네트워크 장치에 도착할 때마다 전송된 데이터 프레임에 저장된 목적지 MAC 주소와 출발지 MAC 주소는 항상 달라진다는 것이다. 필자는 두 노드 간의 통신이 이루어질 때 두 노드의 MAC 주소를 항상 가지고 있다고 생각했지만 그렇지 않더라.
3. 네트워크 계층
네트워크 계층은 서로 다른 네트워크 세그먼트에 속한 노드 간의 통신을 담당하며, 전송단위는 패킷이다. 여기서 네트워크 세그먼트는 같은 브로드 캐스트 도메인(브로드 캐스트 요청이 닿는 범위)에 속한 장치들의 모임을 일컫는다.
네트워크 계층에서는 전송할 때 전송 계층에서 내려온 세그먼트에 출발지 IP, 목적지 IP 등의 제어정보가 포함된 IP 헤더를 부가하여 데이터 링크 계층에 패킷을 전달하고 반대로 데이터를 수신하는 경우 데이터 링크 계층에서 프레임을 받아 확인하고 전송 계층에 보내기도 한다.
네트워크 계층은 여러 역할을 담당한다. 그 중에서 몇가지를 뽑아서 살펴보면
1) 라우팅
이는 패킷이 목적지까지의 최적의 경로로 도달하게 만드는 과정을 의미한다. 이 과정에서 라우터 혹은 L3 스위치(라우터와 L2 스위치의 역할을 동시에 함)라는 장치들을 경유하게 되는데 이 과정에서 장치에 저장된 라우팅 테이블이라는 것을 이용하여, 패킷의 헤더에 담긴 목적지의 주소를 확인한 뒤 어느 홉(중간 기착지)로 가면 될지 판단한다. 이러한 일련의 최적 경로를 찾는 과정을 라우팅 알고리즘이라고도 부르는데, 대표적으로 linked-state(다익스트라 기반), distance-vector(벨만-포드 기반) 등이 있다. 다만 라우팅은 라우터 이외에도 L3 스위치가 담당하기도 한다.
2) 혼잡 제어
온라인 게임을 하다보면 네트워크 상태가 혼잡하다는 문구를 종종 볼 수 있을 것이다. 이는 패킷이 네트워크 상에 넘쳐나는 것을 의미하는데 그렇다면 이게 왜 문제가 될까? 여러가지 이유가 있지만
첫 번째로 라우터에서 단위시간 당 처리할 수 있는 패킷은 한정되어 있기 때문에 패킷의 전송이 늦어지고
두번째로 라우터에 많은 패킷이 도착할 때 나중에 처리할 패킷을 담아둘 버퍼가 필요한데 이 버퍼의 용량이 초과되면 추후에 들어오는 패킷은 유실되어 다시 전송되어야 하기 때문이다.
이 두 가지는 곧 높은 레이턴시를 의미하게 될 것이고, 이는 사용자 경험 측면에서 좋지 않을 것이다. 따라서 네트워크 레이어에서는 이러한 문제를 해결하기 위해 혼잡 제어 역할을 담당하는데
패킷의 전달속도를 일정하게 만들거나 아니면 특정 노드의 혼잡을 감지하여 다른 경로 등으로 패킷을 보내어 특정 기기에 패킷이 몰리는 것을 방지하는 등에 역할을 한다.
3) 패킷의 분할과 재조립
MTU(Maximum Transsmition Unit, 최대 전송 단위)란 각 라우터에서 한 번에 최대로 받을 수 있는 데이터(패킷)의 크기를 말한다. 경우에 따라서 패킷이 MTU를 초과할 수 있기 때문에 이를 프래그먼트라는 단위로 분할한 뒤 패킷이 도착했을 때 수신 측에서 다시 재조립한다.
4. 전송 계층
전송 계층은 출발지 노드와 목적지 노드 사이에 정상적인 데이터 송수신이 이루어지도록 하는 역할을 담당한다.
이를 네트워크 계층과 연관지어 말하면 네트워크 계층이 데이터가 목적지까지 도착하는 길찾기를 해주는 역할을 담당한다면 전송 계층은
- 어플리케이션에서 보낸 데이터 스트림을 세그먼트라는 단위로 나눈 뒤 제어 정보가 담겨 있는 헤더를 부착하여 네트워크 계층에 전달한다.
- 수신 측에서는 이 분할된 세그먼트들을 다시 재조립해서 목적지 포트에 있는 어플리케이션에 전달하는 역할을 한다.
더 자세하게 다루어 보면
1) 데이터 전송 시 순서 보장
TCP에서는 데이터 스트림을 세그먼트로 분할한 뒤에 데이터를 원래의 순서대로 보내는데 이 때 패킷이 중간에 유실되더라도 재조립의 문제가 발생하지 않도록 헤더에 순서번호(Sequence Number)와 Ack Number(Acknowledgement Number)라는 걸 사용한다.
이를테면 초기 순서 번호가 1이고 데이터의 크기가 100이라면 순서번호는 100이 되고, Ack Number는 101이 된다. 즉 순서번호는 해당 데이터가 데이터 스트림의 어느 바이트부터 시작되는 데이터인지에 대한 정보이고 Ack Number는 이 세그먼트의 데이터에 다음에 와야 할 세그먼트의 순서번호를 의미한다. 이를 통해 세그먼트를 다시 데이터 스트림으로 조립하여 어플리케이션으로 보내는 것이다.
2) 연결 유지
TCP에서는 3-way-handshake를 통해 전송자와 수신자 간의 연결을 확인하고 데이터 전송을 시작하며 데이터 전송이 끝나면 4-way-handshake를 통해 둘 사이의 연결을 해제한다.
3) 혼잡 제어
네트워크 계층에서 아무리 혼잡 제어를 하더라도 정작 전송 계층에서 계속 데이터를 무지막지하게 전송한다면 의미가 없을 것이다. 따라서 전송 계층에서는 데이터를 보낸 돌아오는 응답시간 등을 확인하며 보낼 데이터 양을 결정한다.
4) 흐름 제어
네트워크의 혼잡 정도와 별개로 만약 수신 측에서도 들어온 데이터를 처리할 시간이 요구될 것이고 라우터와 마찬가지로 나중에 처리할 데이터를 쌓아둘 버퍼같은 것이 있을 것이다.
이 때 송신 측에서 현재 상대 측 전송 계층이 감당할 수 있는 버퍼의 크기를 초과하는 데이터를 보내게 되면 필연적으로 데이터의 손실이 발생될 것이다. 따라서 수신 측에서는 현재 받을 수 있는 데이터의 양을 상대에게 알려서 송신 측이 전송 데이터 양을 제어한다.
5. 어플리케이션 계층
어플리케이션 계층은 실제로 기기 내에서 실행되고 있는 프로세스에 대한 계층을 의미한다.
데이터를 전송하거나 수신할 때 어플리케이션은 기기 내 OS에 내장된 프로토콜 스택이라는 것을 이용하는데, 이 프로토콜 스택이 네트워크 계층과 전송 계층의 역할을 담당한다. 어플리케이션은 데이터를 전송하고자 할 때 프로토콜 스택에 의뢰하여 소켓이라는 것을 만드는데, 간단하게 말하면 통신에 필요한 정보들을 기록해 놓은 것이라고 생각하면 된다. 이걸 통해 다른 호스트들과 통신을 한다.
어플리케이션 계층에서는 전송 계층으로 데이터를 보내기도 하고 수신 시에는 전송 계층에 저장되어 있는 세그먼트들을 읽어들이는데 읽는 속도의 향상이 곧 응답 속도의 향상으로 이어진다. 왜냐하면 근본적으로 TCP/IP에서 데이터 전송의 안정성을 위해 흐름 제어를 하기 때문에 현재 수신 측이 받아들일 수 있는 윈도우 사이즈가 늘어나느냐(즉 얼마나 수신 측이 데이터를 빨리 처리하느냐)는 곧 송신 측의 전송 속도를 높이는 것으로 이루어지기 때문이다. 정리하자면 도미노처럼
어플리케이션의 데이터 처리 속도 향상→전송 계층의 윈도우 사이즈가 빠르게 늘어남→윈도우 사이즈가 꽉차서 대기하는 시간이 줄어듦->데이터를 빠르게 전송한다고 말할 수 있겠다.
데이터 전송 과정
TCP/IP 모델에 대해서 정리했으니 이를 바탕으로 한 번 데이터가 전송 되는 과정을 정리해보자
1) 어플리케이션 계층
이를테면 웹브라우저가 유저가 입력한 URL을 가지고 DNS 서버에 요청하여 해당 URL의 IP 주소를 가져온다. 그리고 어플리케이션은 프로토콜 스택에게 소켓을 만들도록 요청하고 소켓을 통해 데이터를 전송한다. 여기서 일련의 과정을 통해 수신 측 ip주소:포트 번호가 소켓에 저장되고 두 호스트 간의 연결이 확립된다.
2) 데이터에 제어 정보 부가
전송 계층: TCP 헤더(포트 번호) + 데이터 -> 세그먼트
네트워크 계층: IP 헤더(IP 주소) + 세그먼트 -> 패킷
데이터 링크 계층: MAC 헤더(MAC 주소) + 세그먼트 + 트레일러 -> 프레임
등의 과정을 통해 encapsulation을 한다.
3) 전송
프레임은 데이터 링크 계층에서 조립되어 LAN 드라이버를 통해 LAN 어댑터에 전달되고, LAN 어댑터는 데이터를 전송한다.
4) LAN 내에서의 이동
현재 데이터의 목적지의 MAC 주소가 같은 네트워크 세그먼트에 속해 있는지 확인하고 없으면 게이트웨이 라우터로 데이터를 보낸다.
5) WAN에서의 이동

라우팅을 통해 다음으로 나아가야 할 장치를 계속 찾는다. 라우터나 L3 스위치는 네트워크 계층 외에도 물리 계층, 데이터 링크 계층에 대한 처리를 담당하는데 먼저 물리 계층을 통해 데이터가 데이터 링크 계층에 넘어가면 데이터 링크 계층은 목적지의 MAC 주소가 자신의 주소가 맞는지 확인하면서 데이터를 필터링한다. 네트워크 계층에서는 IP 헤더 부착된 목적지 IP 주소를 바탕을 보고 다음으로 나아가야 할 장치를 찾고 다시 데이터 링크 계층에 데이터를 넘긴다. 데이터 링크 계층에서는 다시 현재 자신의 MAC 주소와 다음 목적지의 MAC 주소가 담긴 MAC 헤더를 부착하고 프레임을 만들고 포트를 통해 인접한 장치로 계속 전송된다.
6) 목적지 장치의 네트워크 세그먼트로 도착
목적지 장치의 네트워크 세그먼트에 ARP 테이블을 통해 네트워크 세그먼트 내에 있는 목적지 장치의 MAC 주소를 확인하고 전송한다. 도착하면 이제 다시 decapsulation 과정을 통해 각 계층에서 송신 측이 보낸 제어 정보를 확인하고 전송계층에 이르러 어플리케이션에 도착한다.
참고자료
이해하면 인생이 바뀌는 TCP 송/수신 원리 - YouTube
[10분 테코톡] 🔮 히히의 OSI 7 Layer - YouTube
Data Link Layer - GeeksforGeeks
What is the maximum transmission unit (MTU)?
What is Transmission Control Protocol (TCP)? - GeeksforGeeks
MAC addresses and their functionality - Homenet Howto
Routing vs. Forwarding vs. Switching | Baeldung on Computer Science
ChatGpt
'CS > 네트워크' 카테고리의 다른 글
[모의 면접 CS 스터디] 세션, 쿠키, jwt (0) 2024.01.22 [모의 면접 CS 스터디] HTTPS (0) 2024.01.18 [모의면접 CS 스터디] DNS (0) 2024.01.17 [모의 면접 CS 스터디] HTTP (0) 2024.01.16 [모의 면접 CS 스터디] HTTP/1.1 ~ HTTP/3 (0) 2024.01.15