복잡한 구현, 작동 원리 등은 감춰져 있는 상태로 입력만 제대로 지킨다면 해당 기능을 쓸 수 있도록 해주는 장치 또는 시스템
사용자가 이 기능이 어떻게 작동하는지는 알 필요가 없음.
컴퓨터와 컴퓨터가 어떻게 서로 대화할 것인지(데이터를 주고 받을 것인지)를 약속한 것을 프로토콜이라고 한다.
굉장히 많은 종류의 프로토콜이 존재하며, 네트워크는 소프트웨어 뿐만 아니라 하드웨어까지 연결되는 복잡한 시스템이다.
TCP/IP는 인터넷 표준 프로토콜이며, 사용자들이 쉽게 사용할 수 있도록 네트워크의 기능을 계층별로 나누어 블랙박스화 시켰다.
1계층(물리 계층):
데이터를 전기 신호로 변환하여 전송하고 전기 신호를 다시 데이터로 복원한다.
랜카드와 케이블로 두 컴퓨터가 통신할 수 있는 이유는 물리 계층 때문이다.
어떻게 효율적으로 보낼지는 생각하지 않고 데이터 전달에 집중하는 계층이다.
2계층(데이터 링크 계층):
MAC주소로 기기를 구분할 수 있는 계층이다.
3계층(네트워크 계층):
IP주소를 이용해 출발지부터 목적지까지 데이터를 보내는 계층이다.
4계층(트랜스포트 계층):
두 컴퓨터 사이의 신뢰성 있는 데이터 전송을 보장한다.
포트를 이용해 특정 애플리케이션으로 정확하게 전달한다.
실제로 데이터 전송은 하위 계층에서 이루어지기 때문에 두 컴퓨터 사이의 연결을 보장하는 일에 집중한다.
5계층(애플리케이션 계층):
사용자와 가장 가까운 계층으로 HTTP, FTP, SSH등 개발자가 직접 다루는 애플리케이션이 이 계층에 해당한다.
하위 계층들 덕분에 애플리케이션 계층은 애플리케이션이 하는 일에만 집중할 수 있게 되었다.
신뢰성 있는 데이터 전송을 하위 계층들이 해주기 때문이다.
국제 표준화 기구(ISO)에서 만든 국제 표준 프로토콜이다.
하지만 인터넷은 OSI 모델이 아닌 TCP/IP 모델로 이루어져 있다.
TCP/IP 모델의 애플리케이션 계층은 OSI 모델의 세션, 프레젠테이션, 애플리케이션 계층을 하나로 표현하는 계층으로 볼 수 있다.
웹 브라우저는 HTTP를 사용하기 때문에 웹 서버로 전송할 HTTP 메시지가 만들어진다.
애플리케이션 계층은 하위 계층인 트랜스포트 계층으로 데이터를 보낸다.
트랜스포트 계층에서는 애플리케이션 계층에서 받은 데이터 앞에 트랜스포트 헤더를 붙여 캡슐화한다.
트랜스포트 계층에서의 캡슐화된 데이터를 데이터 그램 또는 세그먼트라고 부른다.
트랜스포트 계층은 데이터 그램(세그먼트)을 하위 계층인 네트워크 계층으로 보낸다.
네트워크 계층에서는 트랜스포트 계층에서 받은 데이터 앞에 네트워크 헤더를 붙여 캡슐화한다.
네트워크 계층에서 캡슐화된 데이터를 패킷이라고 한다.
네트워크 계층은 패킷을 하위 계층인 데이터 링크 계층으로 보낸다.
데이터 링크 계층에서는 네트워크 계층에서 받은 데이터에 헤더와 트레일러를 붙여 캡슐화한다.
데이터 링크 계층에서 캡슐화된 데이터를 프레임이라고 한다.
데이터 링크 계층을 프레임을 하위 계층인 물리 계층으로 보낸다.
물리 계층에서는 데이터 링크 계층으로부터 받은 프레임을 전기신호로 바꿔서 전송한다.
네트워크의 형태를 토폴로지라고 한다.
네트워크를 구성하는 장비와 ISP가 어떻게 연결되는지에 따라 네트워크는 다양한 형태를 이룬다.
하나의 중앙 통신 회선에 여러 대의 노드(네트워크에 연결된 장비, 컴퓨터, 허브, 라우터 등)를 연결하는 형태다.
노드의 추가 제거가 간단(선만 꼽거나 빼면 됨)하고, 특정 노드에 장애가 발생해도 다른 노드에 영향을 주지 않는 것(다른 노드들은 잘 소통이 가능함)이 특징이다.
하지만 하나의 중앙 통신 회선을 공유하기 때문에 트래픽이 증가하면 충돌이 발생해 성능이 떨어진다.
(데이터를 다른 노드에 전송하려고 할 때 누군가 중앙 통신 회선을 쓰고 있으면, 전송하지 못하고 다 쓴 걸 확인하고 데이터 전송을 진행해야 함)
중앙 노드를 중심으로 다른 노드가 연결되는 형태다.
문제가 생겼을 때 발견하기 쉽고, 관리하기도 편하다. 모든 노드가 동작하지 않으면, 중앙 노드에 문제가 있는 것이 거의 확실하기 때문에 중앙 노드를 우선으로 살펴보고 해결할 수 있다.
하나의 노드가 동작하지 않으면 그 노드에 문제가 있다는 것으로 추측할 수 있다.
반대로 중앙 노드가 고장나면 전체 네트워크가 다운되기 때문에 중앙 노드 관리가 매우 중요하다.
강강술래처럼 좌우 사람들이 손을 잡은 것처럼 좌우 인접한 노드들이 연결되어 원형으로 이루어져 있다.
버스 토폴로지처럼 선을 공유하지 않으니까(특정 노드는 오직 좌,우 노드랑만 연결되어 있으므로) 충돌이 발생하지 않는다.
하지만 하나의 노드만 고장나도 전체 네트워크가 다운될 수 있으며, 노드를 제거하거나 추가하기가 힘들다.
강강술래 하고 있는데 내가 끼어들고 싶어서 잡고 있는 손 떼어내면 원이 끊기니까
노드가 트리 구조로 연결되어 있는 형태다.
노드를 제거하거나 추가하는 것이 쉽고, 부모 자식 관계에 있기 때문에 장애를 해결하는 데도 쉬움.
하지만 루트 노드에 문제가 생기면 전체 네트워크가 다운될 수 있으며, 부모 노드에 문제가 생기면 연결된 자식 노드들의 네트워크가 다운될 수 있다.
또한 특정 노드에 트래픽이 몰리면 네트워크 속도가 떨어질 수 있다.
모든 노드가 직접 연결되는 형태다.
특정 노드가 고장나도 전체 네트워크는 문제 없이 동작할 수 있다.
하지만 모든 노드를 연결해야 하니까 연결하기 위한 선이 많으니까 비용이 많이 든다.
노드끼리 1:1로 통신하는 방식이다.
모든 노드들은 고유의 주소를 가지고 있고, 데이터를 전송하려는 노드는 목적지 노드의 주소를 적고 연결된 모든 노드로 데이터를 전송한다.
노드들은 목적지 상관없이 데이터를 받고, 목적지 주소에 적힌 주소가 내 주소가 아니면 버리고, 내 주소라면 데이터를 수신해서 데이터를 처리한다.
주소 확인 작업은 랜카드를 통해 이루어지기 때문에 CPU에 부담을 주지 않는다.
가장 많이 사용하는 통신 방식이다.
브로드캐스트 또한 데이터를 전송하려는 노드가 연결된 모든 노드에게 데이터를 전송한다.
데이터를 받은 모든 노드는 주소를 확인하지 않고 일단 수신하며 랜카드가 인터럽트를 발생시켜서 CPU에서 이 데이터를 처리할지 말지 결정한다.
따라서 CPU에 부하가 발생한다.
데이터를 받고자 하는 그룹을 만들고 해당 그룹원에게만 데이터를 전송한다. 하지만 장비들이 멀티캐스트 기능을 지원해야만 사용이 가능한 통신방식이다.
특정 노드가 5개의 노드에 데이터를 전송하려고 한다고 가정하자.
유니캐스트 방식이면, 한 번에 한 목적지의 주소를 적어 전송하므로 5번의 데이터 전송이 발생한다.
브로드캐스트 방식이면, 한 번의 데이터 전송만 발생하지만, 이 데이터가 필요 없는 노드들도 일단 데이터를 수신하기 때문에 CPU 성능이 저하된다.
네트워크에 연결된 노드 중 가장 가까운 노드에만 전송하는 방식이다.
브로드 캐스트의 문제를 해결한 방식으로 IPv6에서 사용된다.
한 방향으로만 데이터 전송이 가능하다.(송신측 -> 수신측)
티비나 라디오에서 사용한다. 수신측은 송신측으로 데이터를 보낼 수 없기에 송신측은 수신측에 문제가 있는지 없는지 판단할 수가 없다.
송신하는 동안에는 수신할 수 없고, 수신하는 동안에는 송신할 수 없는 통신 방식이다.
무전기가 그 예다. 한 노드에서 데이터를 전송하고 송신을 종료하는 신호를 보내고 나면 이제 수신측이 송신할 수 있다.
송신과 수신을 동시에 할 수 있다. ex. 전화기
공감하며 읽었습니다. 좋은 글 감사드립니다.