네트워크는 1도 모른다. 그래서 이 책을 추천 받아 읽게 되었다.
그림이 많아서 참 좋았다.
OSI 모델을 중심으로 내용을 간단히 요약하고, 책을 읽으면서 생겼던 질문과 답을 정리하여 기록했다.
컴퓨터 간 연결을 일컬어 컴퓨터 네트워크(이하 네트워크)라고 부른다. 과거에는 컴퓨터 기기 간의 통신 방법이 다 달랐기 때문에, 다른 장비를 사용하면 정보를 교환할 수 없었다. 이에 ISO(International Organization for Standards)에서 국제 네트워크 통신의 규격을 정하여 이를 OSI 모델이라고 칭했다. 이후 네트워크에 관련한 장비들은 대부분 OSI 모델에 맞추어 만들어지게 되었다.
OSI 모델은 1~7계층으로 나뉘어 지며, 물리 계층, 데이터 링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층, 응용 계층으로 이루어져 있다. 이에 대해 하나씩 알아가 보겠다.
컴퓨터와 네트워크 장비를 연결하고, 컴퓨터의 데이터를 전기 신호로 바꾸어 네트워크 장비로 보내는 역할을 하는 계층이다.
대표 장비로는 리피터와 허브가 있다. 리피터는 1개 포트의 전기 신호를 증폭해 주는 역할을 하는 중계기이며, 허브는 여러 포트의 전기 신호를 정형화하고 증폭해주는 역할을 하는 네트워크 기기다. 허브는 송신한 데이터를 연결된 나머지의 모든 포트에 구분 없이 보내므로 더미 허브라고도 불린다.
데이터가 흐르는 물리적인 선로를 전송 매체 라고 하는데, 무선 전송 매체로 라디오파, 마이크로파 등이 있고, 유선 전송 매체로 광케이블, 트위스트 페어 케이블이 있다.
트위스트 페어 케이블은 랜 케이블, 랜선이라고도 하며, shield(절연체)의 유무로 UTP, STP로 나눌 수 있다. 랜선은 8개의 구리선을 2개씩 짝지어 꼬아 만들어진 4개의 쌍을 다시 꼬아 만든 선으로, 각 번호의 선이 직선으로 연결된 것이 다이렉트 케이블, 1-3, 2-6의 방식으로 크로스 되어 연결한 것을 크로스 케이블이라고 한다. 선을 꼰 것은 노이즈를 방지하기 위한 것이다. UTP, STP도 노이즈의 차이가 발생한다.
데이터 링크 계층은 네트워크 장비 간 신호를 주고 받는 규칙을 정하는 계층이다. 대표적인 규칙으로 랜 환경에서의 네트워크 통신을 위해 고안된 이더넷이 있으며, 이더넷에는 대표적으로 충돌을 방지하기 위한 CSMA/CD 프로토콜이 있다.
데이터 링크 계층에서는 이더넷 헤더(출발지 맥주소+도착지 맥주소+이더넷 유형 으로 이루어진 16바이트의 헤더)와 데이터의 정합성을 보장하는 역할을 하는 트레일러를 데이터에 붙여 이더넷 프레임을 만든다.
이를 대표적인 데이터 링크 계층 기기인 스위치에 보내면, 스위치는 이더넷 헤더를 분리 분석하여 처음 보는 맥주소이면 맥주소 학습 기능을 통해 맥주소 테이블(브릿지 테이블, 스위치의 포트 번호와 연결된 컴퓨터의 맥주소가 기록됨)에 저장하고, 도착지 맥주소를 모른다면 플러딩(flooding)을 통해 송신 포트 외의 모든 포트에 데이터를 송신한다. 도착지 맥주소를 알고 있다면 맥주소 필터링을 통해 데이터를 목적지에 전달한다.
ARP 프로토콜을 통하여 IP는 알지만 맥주소를 모르는 컴퓨터를 찾아낼 수 있다. 맥주소를 찾기 위해 네트워크에 IP를 기반으로 브로드캐스트하고(이를 ARP 요청이라고 한다), 응답하는 컴퓨터를 찾아(이 응답을 ARP 응답이라고 한다) 이를 송신 컴퓨터 RAM의 ARP 테이블에 저장한다. ARP 캐시로 보존 기간을 정한다. IP가 변경되면 맥 주소도 변경되기 때문이다. 이렇게 ARP 프로토콜을 통해 송신 컴퓨터는 이더넷 프레임을 만들 수 있게 된다.
한편 이더넷은 연결된 케이블의 종류나 통신 속도에 따라 규격이 달라지게 된다.
네트워크 계층은 네트워크 간의 통신을 가능하게 하는 계층이다.
네트워크 간의 통신을 위해서 라우터가 사용될 수 있다. 라우터는 네트워크 간의 통신을 가능하게 하고, 네트워크를 분리하는 역할을 한다. 또한 라우팅 프로토콜을 통하여 다른 라우터들과 라우팅(한 네트워크에서 다른 네트워크로 갈 수 있는 최적의 정보) 정보를 공유하며, 이를 라우터 테이블에 저장한다. 라우터는 ip를 출입시키기 위한 출입구 역할로 기본 게이트웨이(default gateway)를 설정하는데, 해당 네트워크에 연결된 호스트의 ip 주소 중 하나를 사용하여 이를 설정한다.
어떤 네트워크의 어떤 호스트인지를 구분하기 위해 IP 주소(Internet Protocol Address)를 사용한다. ip는 구조에 따라 공인 ip와 사설 ip로 나뉠 수 있다. 공인 ip는 ISP(Internet Service Provider)에 의해 부여 받은 ip를 말하며, 사설 ip는 네트워크 관리자에 의해 수동으로 설정되거나 라우터의 DHCP(Dynamic Host Configiuration Protocol)에 의해 부여 받은 ip를 말한다.
ip는 종류에 따라 IPv4와 IPv6로 나뉠 수 있다. IPv4는 32비트로 구성되어 있으며, 8개의 비트를 옥텟(Octet)으로 분류하고, 4개의 옥텟을 십진수로 변환하여 4개의 십진수로 이를 표현할 수 있다. 사용할 수 있는 모든 IPv4의 수는 43억 개 정도이다. 개수의 부족함을 우려하여 IPv6가 등장했다. 128비트를 사용하여 주소를 표현하며, 340간 개 정도의 주소를 표현할 수 있다고 한다. ip 주소는 네트워크 id와 호스트 id로 구분할 수 있다.
ip 주소는 사용하고자 하는 네트워크의 크기에 따라 클래스로 나눌 수 있다. A ,B, C, D, E 클래스가 있는 데 앞부터 큰 순서대로 나열했다. A 클래스는 8비트를 네트워크 ID로 사용하여 약 1677만 개 정도의 주소를 호스트 주소로 사용할 수 있다. 1.0.0.0~9.255.255.255, 11.0.0.0~126.255.255.255를 사용한다. B 클래스는 16비트를 네트워크 ID로 사용하여 약 6만개의 호스트 주소를 갖는다. 128.0.0.0~172.15.255.255, 172.32.0.0~191.255.255.255를 사용한다. C 클래스는 24비트를 네트워크 ID로 사용하여 254개의 호스트 주소를 가지게 된다. 192.0.0.0-192.167.255.255, 192.169.0.0~ 223.255.255.255 대를 사용한다.
한편 사설 IP의 범위가 있는데, 공인 IP는 이를 사용할 수 없고, 반대의 경우도 마찬가지 이다. A 클래스의 사설 IP는 10.0.0.0~10.255.255.255, B 클래스는 127.16.0.0~127.3.255.255, C 클래스는 192.168.0.0~192.168.255.255를 사설 대역으로 가지고 있다.
각 네트워크에서 host id에 사용되는 모든 비트 값이 0인 주소를 네트워크를 구분할 수 있는 네트워크 주소라고 부르고, 반대로 host id에 사용되는 모든 비트 값이 1인 주소를 브로드캐스트 주소라고 부른다. 브로드캐스트 주소는 해당 네트워크에 연결된 모든 호스트들에게 데이터를 전달할 때 사용되는 주소이다. host의 ip 주소로는 이 2가지의 주소를 사용할 수 없다.
하나의 네트워크를 분할하여 여러 네트워크를 만드는 것을 서브넷팅이라고 하며, 이렇게 분할된 각 네트워크를 서브넷이라고 한다. 서브넷은 기본적으로 host id에 사용된 비트를 가져다가 네트워크 id로 사용하는 것이다. 방식은 아래에 적혀 있는 대로 이다. 네트워크 id에 사용된 비트 수를 파악하기 위해, 서브넷 마스크를 사용한다. 또한 서브넷 마스크는 prefix 방식으로 사용될 수 있다. ex) 192.168.0.1/24 → 24개의 비트를 네트워크 id로 사용했다는 뜻. 서브네팅을 통해 브로드캐스트에 사용되는 데이터를 줄일 수 있다.
전송 계층은 목적지에 신뢰성 있는 데이터를 전달하는 역할을 맡은 계층이다.
크게 두 가지의 역할을 하는데 데이터에 오류가 있는지 점검하고 오류가 있으면 다시 송신 측에 재전송 요청을 하는 오류 점검 역할과, 데이터의 목적 애플리케이션을 포트 번호를 통해 파악하는 목적지 점검 역할을 한다.
연결형 통신과 비연결형 통신이라는 2가지의 특징을 가지고 있다.
연결형 통신은 신뢰성과 정확성을 목적으로 하는 통신 방식이며, TCP가 이에 속한다. TCP에 대한 자세한 설명은 Q4에 기록되어 있다.
비연결형 통신은 효율성을 목적으로 하며, UDP가 이에 속한다. UDP는 데이터에 UDP 헤더(목적지 컴퓨터 포트번호, 출발지 포트 번호, 길이, 체크섬이 기록됨)를 붙여 User Datagram을 만들고 이를 목적 컴퓨터로 전송한다. UDP는 상대방을 확인하지 않고 연속적으로 데이터를 보낸다. 따라서 불특정 다수에게로 전송하고자 하는 브로드캐스팅에 사용될 수 있다. 목적지를 지정하여 연결을 확립해야 하는 TCP는 불가한 일이다.
*여기서는 세션, 표현 계층을 포함한다.
응용 계층은 각 애플리케이션에 맞게 데이터를 변환하여 전송 계층으로 전달하는 역할을 한다. 각 애플리케이션은 각각 맞는 프로토콜을 사용한다.
응용 계층 중에 WEB을 구성하는 구조로 통신 방식인 Http, 자원 저장 장소인 URI, 하이퍼 텍스트와 미디어를 전달해주는 HTML이 있다.
응용 계층의 프로토콜 중 Http를 조금 살펴보면, 1.0 버전에서는 연결 수립 후 한 번만 데이터를 주고 받은 후 연결을 끊고, 1.1 에서는 여러 데이터를 순차적인 파이프라인 형식으로 보내고 같은 순서로 받도록 했으며(이 때문에 Hoc 문제가 발생하게 된다.) 2 버전에서는 데이터를 병렬적으로 보내어 순서에 상관없이 요청과 응답이 이루어질 수 있도록 했다.
응용 계층 프로토콜 중 DNS는 DNS 서버로 URL을 통한 DNS 쿼리를 질의하여 Domain에 연결된 ip 주소를 획득하여 IP로 접속하고자 하는 목적으로 사용된다. 이 때, URL이 DNS 서버를 통해 IP로 변환되는 서비스의 과정을 이름 해석(name resolution)이라고 한다.
메일 서버에서는 송신 컴퓨터에서 메일 서버로 송신 시 smtp 프로토콜을, 메일 서버에 요청하여 수신할 경우 pop3 프로토콜을 사용한다.
A. 어떤 장비와 장비는 다이렉트 케이블로 어떤 연결은 크로스 케이블로 연결한다.
이는 각 장비가 트위스트 페어 케이블에서 사용하는 RX, TX 선이 다르기 때문이다.
MDI(Media Dependent Interface) 의 방식은 컴퓨터와 라우터,
MDIX(Media Dependent Interface Cross) 의 방식은 허브와 스위치가 가지고 있다.
따라서 MDI와 MDIX 장비 간 연결하면 RX, TX가 겹치지 않으므로 문제가 발생하지 않지만, MDI와 MDI, MDIX와 MDIX를 연결하면 같은 라인을 RX, TX로 사용하므로 송수신에 문제가 발생한다. 이를 위해서 같은 인터페이스의 장비 간 송수신을 위해서 크로스 케이블이 등장했다.
그러나 최근에는 auto MDIX와 같은 MDI와 MDIX 차이를 자동으로 판단하여 연결 신호를 전환하는 기능을 가진 스위치나 허브가 많으므로 케이블의 차이를 고려하지 않아도 괜찮다.
만약 auto MDIX 기능을 가지지 않은, 예를 들어 컴퓨터와 컴퓨터를 트위스트 페어로 연결한다면 크로스 케이블을 사용해야 할 것이다.
이더넷(Ethernet)은 랜 환경에서의 네트워크 기기 간 통신을 위해 만들어진 네트워크 모델이다. 이더넷 환경에서는 충돌(Collision, 컴퓨터 여러 대가 동시에 데이터를 보냈을 때 이들이 서로 부딪히는 것)을 방지하기 위해 CSMA/CD 라는 프로토콜을 만들었는데, 이는 크게 세 가지의 규칙으로 설명할 수 있다.
먼저 CS(Carrier Sense), 즉 전송하고자 하는 케이블에 Carrier(네트워크 상에 나타나는 신호)가 발생하고 있는지 확인하는 것이다.
CS가 충족되었을 경우 MA, Multiple Access로 동시에 전기 신호가 들어왔을 때 15번 까지 시간을 두고 다시 통신하도록 하고, 계속 충돌 시 통신을 끊는다. 충돌 신호가 없어 보낼 수 있는 경우에는 MAC 주소로 브로드 캐스트를 해서 목적지를 확인한 후 데이터를 보낸다.
마지막으로 CD, Collision Detection은 충돌이 발생할 경우 Jam signal 이라는 신호를 보내어 현재 충돌이 발생하고 있다는 것을 알려준다.
서브넷은 큰 네트워크에서 서브네팅 방식을 통해 분할된 네트워크를 말하고, 서브넷팅은 네트워크를 분할하여 작은 네트워크를 만드는 방식을 말한다.
서브넷팅은 쉽게 말해 네트워크 ID의 비트 수를 늘리는 것을 말하는데, prefix의 크기를 늘리는 것이라고도 말할 수 있다. 서브넷팅을 통해서 네트워크를 분할하면, 브로드캐스팅을 할 때 사용하는 네트워크 패킷을 줄일 수 있고, ip의 구조를 나눔으로써 ip를 보다 효율적으로 사용할 수 있다.
서브넷팅을 하는 방식은 쉽게 말해 host id로 사용되는 ip의 비트를 서브넷 id로 사용하는 것이다. 따라서 n개의 host id의 비트를 사용하는 만큼 서브넷의 크기는 2^n개로 증가하고, 할당 가능한 호스트의 개수는 2^(호스트 id의 비트 - n) -2로 감소한다. -2를 한 까닭은 각 서브넷의 네트워크 주소와 브로드 캐스트를 제외했기 때문이다.
TCP 통신은 먼저 보내고자 하는 데이터에 TCP 헤더를 붙여 Segment를 만듦으로써 시작된다. TCP 헤더에는 목적지와 출발지 포트 번호와 연결 제어 정보를 기록한 코드 비트(code bit), 송수신 가능한 데이터의 크기를 byte로 나타낸 윈도우 크기(window size) 등이 있다.
처음으로는 3-way HandShake 를 통해 연결(tcp 통신에서 송수신 컴퓨터 간 연결을 확립하고 데이터를 전송하기 위해 사용하는 가상 통신로)을 확보한다. 먼저 송신 측에서 코드 비트의 SYN에 1을 기록해 보내고 이후 수신 측에서 ACK와 SYN에 1을 기록해 보내고 마지막으로 송신 측에서 ACK에 1을 기록해 보냄으로 3-way HandShake는 완료된다. 이렇게 데이터의 본격적인 송신 전 수신 측과의 연결성을 ACK과 SYN을 통해 확인하는 것을 보고 Connection Oriented Protocol이라고 부르기도 한다.
이후에는 본격적으로 데이터를 담은 segment들을 보내게 되는데, 효율을 위해 연속으로 segment를 보내기 위해서 헤더에 window size와 acknowledgement number를 기록하여 사용한다.(코드 비트의 ack와 다르다) window size는 송신 측에서 보내는 CWND(Congestion Window)와 수신 측에서 보내는 RWND(Receiver Window)로 나뉘어져 있다. 수신 측의 버퍼가 넘쳐 데이터 수신에 에러가 발생하는 것을 overflow라고 한다.
송신 측은 RWND 만큼의 segment만 연속해서 보내고, 이후 ack가 돌아오지 않는다면 데이터가 유실된 것으로 판단하고 기존 buffer의 데이터를 다시 보낸다. 이처럼 ack와 일련 번호(Sequence Number)를 통해 데이터 전송에 에러가 있는지 확인하고 데이터를 다시 보내는 것을 재전송 제어라고 한다.
만약 ack가 돌아온다면, 송신 측은 데이터가 수신 측에서 잘 받아 읽혀진 것으로 확인하고 기존의 buffer 데이터를 버리고 새로운 데이터를 RWND에 맞게 연속으로 보내게 된다. 이처럼 서로의 Window size의 여유량 까지 ack을 확인하지 않고 segment를 보내는 것을 Sliding Window라고 한다. 이렇듯 ack과 window size를 통해 통신의 오류와 흐름을 제어하는 방식을 보고 Two way Communication(양방향 통신)이라고 하기도 한다.
마지막으로 통신을 마무리할 때는 코드 비트의 FIN과 ACK 을 사용해 송신 측에서 먼저 FIN 1, 이후 수신 측에서 ACK 1, 그리고 다시 수신 측에서 FIN 1, 이후 송신 측에서 ACK 1을 응답함으로써 TCP 통신을 종료한다. 이를 4-way HandShacking 이라고 한다.
DNS 서버는 Domain 명을 통한 질의(Query Name String, ex. www.naver.com)를 받고, 이에 대응하는 IP 주소를 응답해주는 서버이다.
DNS 서버에 질의 쿼리를 던질 때 적은 양의 데이터만을 사용하므로, 512byte를 넘어가지 않는 데이터만 전송이 가능한 UDP로 데이터를 송수신하기에 적합하다. TCP 방식으로 데이터를 교환할 경우 필요하지 않은 오버 헤드가 발생하기 때문이다. 또한 UDP가 신뢰성을 보장하지 않지만, 데이터의 크기 자체가 작으므로 다시 데이터 송수신을 시도하는 데에도 무리가 없다.
또한 DNS 서버는 많은 수의 클라이언트로부터의 질의를 받아야 하고, 이에 대해 빠르게 응답할 필요를 가지고 있으므로 TCP 방식은 부담이 될 수 있다.
DNS 서버에서도 TCP를 사용할 때가 있는데, 이는 Zone Transfer를 할 경우이다. Zone Transfer는 DNS 간 Zone 내의 호스트 정보를 동기화하는 것을 말한다. 이 때는 신뢰성 보장이 필요하고 512byte 이상의 데이터를 전송하게 되므로 TCP를 사용하게 된다.
인터넷(Internet, Inter-network)은 전세계의 크고 작은 컴퓨터 네트워크들이 연결된 거대한 컴퓨터 네트워크를 이야기한다. 이들은 클라이언트와 서버로 연결되어 있으며, TCP/IP로 통신하고, Web, Mail, 파일 공유 등의 서비스를 제공하고 있다.
웹(WWW, World Wide Web, 3W)은 인터넷 상에서 제공될 수 있는 서비스의 하나로, 인터넷에 연결된 컴퓨터들을 통해 사람들이 정보를 주고 받을 수 있는 세계적인 정보 공간을 말한다. 웹은 Http 프로토콜과 html 등의 방식을 통해 멀티미디어 정보들을 공유한다.
따라서 웹은 인터넷 내부에서 제공될 수 있는 하나의 멀티미디어 서비스라고 할 수 있다.
책 | 모두의 네트워크, 미즈구치 카츠야
웹 사이트 | Q1: https://sstc.tistory.com/1
웹 사이트 | Q2: https://security-nanglam.tistory.com/193
웹 사이트 | Q3: https://code-lab1.tistory.com/34
웹 사이트 | Q4: https://mslilsunshine.tistory.com/102, https://netdream.tistory.com/69, https://evan-moon.github.io/2019/11/26/tcp-congestion-control/
웹 사이트 | Q5: https://steady-coding.tistory.com/523
웹 사이트 | Q6: https://all-young.tistory.com/19