우하한테크코스 테코톡 히히의 OSI7 Layer 를 바탕으로 쓰여진 포스팅입니다.
물리계층은 하드웨어적으로 구현되어 있다.
두 대의 컴퓨터가 통신하기 위해서는 위와 같이 0과 1을 주고받으면 된다.
하지만 수직선과 수평선이 있는 전자기파는 항상 0~무한대[Hz]의 주파수 범위를 갖는다. 따라서 위와 같은 전기신호를 통과 시킬 수 있는 전선은 없다.
따라서 위와 같은 신호는, 아날로그 신호
로 바꿔서 전송해야한다.
이렇게 두 대의 컴퓨터가 통신하는 과정은 아래와 같다.
encoding
decoding
encoder 함수의 파라미터 값은 원본 데이터이고 반환 값은 아날로그로 변조된 신호이고, 반대로 decoder 함수의 파라미터 값은 아날로그 신호이고, 반환 값은 원본 데이터가 된다.
데이터 링크 계층 역시 하드웨어적으로 구현되어 있다.
서로 통신하고자 하는 컴퓨터마다 전선을 모두 연결하는 것은 비용측면에서 비효율적이므로 전선 하나를 가지고 여러 대의 컴퓨터와 통신할 수 있어야 한다.
위와 같이 더미 허브를 통해 여러 대의 컴퓨터가 연결되고, 통신할 수 있게 된다.
하지만 만약 A컴퓨터에서 B컴퓨터에게 데이터를 전송한다면 중간에 있는 다른 컴퓨터도 해당 메시지를 읽을 수 있는 문제가 있다.
따라서, 더미 허브가 메시지의 목적지를 확인하여 정확히 목적지에만 메시지를 전달 할 수 있도록 구현한 것이 스위치
이다.
그렇다면 만약 송신측 컴퓨터와 수신측 컴퓨터가 각각 다른 네트워크에 속한다면 어떻게 될까? 이를 위해서 라우터
를 통해 서로 다른 네트워크끼리 연결시킬 수 있다. 라우터는 스위치의 기능도 하며, 우리가 익히 알고 있는 공유기가 라우터의 역할을 한다.
라우터와 라우터를 연결하여 전 세계의 컴퓨터들을 모두 연결한 것을 인터넷
이라고 한다.
같은 네트워크 (같은 스위치로 연결된) 에 있는 여러 컴퓨터들이 데이터를 주고 받기위해 필요한 모듈로써, 전송받은 데이터를 구분하여 받는 (Framing) 작업을 수행 한다.
네트워크 계층은 운영체제의 커널에 소프트웨어적으로 구현되어 있다.
수많은 네트워크들의 연결로 이루어지는 inter-network 속에서 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해, IP 주소를 이용해 길을 찾고 (routing) 자신 다음의 라우터에게 데이터를 넘겨주는 역할 (forwarding) 을 한다.
따라서, 네트워크 계층까지의 과정을 정리하면 아래와 같다.
패킷
형태로 만든 후 해당 패킷을 2계층에 전달한다.전송 계층은 운영체제의 커널에 소프트웨어적으로 구현되어 있다.
컴퓨터가 전송받은 데이터를 어떤 프로세스에 줘야할지 어떻게 구분 할 수 있을까? 이를 위해서 데이터를 받고자 하는 프로세스들은 포트 번호
를 가져야 한다.
즉, 전송 계층이란 포트번호를 사용하여 도착지 컴퓨터의 최종 도착지인 프로세스까지 데이터가 도달하게 하는 모듈이다. 따라서 위의 3계층에 Input 값으로 들어오는 데이터는 포트번호를 가지고 있다.
HTTP는 응용계층의 대표적인 프로토콜로서, 다른 계층과 마찬가지로 인코더와 디코더를 가진다.
따라서 송신측에서 HTTP 인코더에 데이터를 Input 값으로 넣으면 Status code, header, request
등의 값이 붙고, 해당 데이터가 4계층 인코더 Input 값으로 들어가서 포트번호를 가지게 되고, 1~3계층을 통과한다. 이렇게 전송된 데이터는 HTTP 디코더를 통과하여 원본 데이터를 수신측에 전달한다.