들어가기전에 앞서 현대의 인터넷은 OSI Model이 아니라 TCP/IP 모델을 주로 사용하고 있다.
두 대의 컴퓨터가 통신하려면?
- 모든 파일과 프로그램은 0과 1의 나열이다.
- 결국 0과 1만 주고받을 수 있으면 된다.
1계층: Physical Layer (물리 계층)
0과 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려 보내고(encoding),
아날로그 신호가 들어오면 0과 1의 나열로 해석하여(decoding)
물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열로 주고받을 수 있게 해주는 모듈이라고 볼 수 있다.
일반적으로 집에서 사용하는 LAN선이 물리 계층에 속하며, 물리 계층에서의 데이터 전송은 bit로 이루어진다.
1계층에 속하는 기술만으로 여러 대의 컴퓨터가 통신하도록 만들 수 없다.
2계층: Data Link Layer (데이터 링크 계층)
(직접 연결된)같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고받기 위해서 필요한 모듈
물리적인 연결을 통하여 인접한 두 장치간의 신뢰성 있는 정보 전송을 담당(Point-To-Point 전송)
MAC 주소를 통해서 통신하며 장비로는 스위치, 브릿지가 있다.
만약, 아래와 같이 4대의 컴퓨터가 스위치라는 장비를 통해 연결되어있고,
3대의 컴퓨터가 예림이의 컴퓨터로 거의 동시에 데이터를 보낸다고 가정하자.
예림이는 010111110001의 데이터를 받게 되는데 해당 데이터를 잘못 끊어 읽게되면 이상한 데이터를 받게된다.
그렇다면 어떻게 해야 제대로 데이터를 끊어 읽을 수 있을까?
이를 위해 송신자는 데이터 앞 뒤에 특정한 비트열을 붙이게 된다.
예를 들어, 송신자가 데이터를 보낼 때 앞에는 1111을, 뒤에는 0000을 붙인다고 한다면
데이터의 시작과 끝을 구분하기 위해서 1111과 0000을 찾으면 된다.
그래서 아까 위의 예림이의 예시처럼 3대의 컴퓨터가 동시에 보내게 될때,
아래와 같이 시작과 끝을 끊어 읽어서 데이터를 제대로 받으면 되는것이다.
이러한 작업들을 Data Link Layer에서 하게 되는것이다.
정리하자면 아래와 같이 작업이 이루어진다고 볼 수 있다.
3계층: Network Layer (네트워크 계층)
수많은 네트워크들의 연결로 이루어지는 inter-network 속에서 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해,
IP주소를 이용해서 길을 찾고(routing) 자신 다음의 라우터에게 데이터를 넘겨주는것이다(forwarding)
여러 대의 컴퓨터가 통신하려면?
만약 아래와 같이 서로 다른 두개의 네트워크가 구축되어 있을때, 예림이가 혜림이한테 데이터를 보내려고 한다면 보내지지 않을것이다.
왜냐하면 두 컴퓨터는 전선으로 연결되어 있지 않아 통신할 수 없기 때문이다.
하지만, 아래와 같이 스위치와 스위치를 연결해서 서로 다른 네트워크에 속한 컴퓨터끼리 통신이 가능하게 해주는데,
이를 라우터라고 한다.
즉, 위의 초록색 장비는 스위치 + 라우터인 L3스위치를 말하는 것이다. 이는 우리가 사용하는 공유기에 해당되기도 한다.
만약, 아래와 같이 네트워크가 형성되어 있고 A가 B에게 데이터를 보내고 싶어한다면
A는 데이터 앞에 목적지의 주소, 즉 B의 주소를 붙이게 된다. 55.10.54.75와 같이, 각 컴퓨터들이 갖은 고유한 주소를 IP주소라고 한다.
이렇게 데이터와 목적지의 주소가 담긴 초록색 박스를 패킷이라고 부를 수 있고,
A 패킷은 B의 목적지에 도달하기 위해 (가) 라우터 -> (마) 라우터 -> (바) 라우터 -> (라) 라우터로 이동해 무사히 도착하게 된다.
그렇다면 목적지의 IP주소는 어떻게 알 수 있을까?
우리가 주소창에 사이트 URL을 입력하면 DNS를 통해 URL이 IP주소로 변환되기때문에
도메인 주소를 안다는건 IP 주소를 알고있는것과 마찬가지이다.
위의 과정들을 정리하자면 아래와 같다.
4계층: Transport Layer (전송 계층)
포트 번호를 사용하여 도착지 컴퓨터의 최종 도착지인 프로세스에 까지 데이터가 도달하게 하는 모듈이다.
대표적으로 TCP, UDP 프로토콜이 있다.
이제 인터넷 상의 모든 컴퓨터는 서로와 통신할 수 있게 되었고,
데이터를 받는 수신자는 전 세계의 컴퓨터로부터 데이터를 받을 수 있게 되었다.
그런데 컴퓨터에는 여러 개의 프로그램들이 실행되고 있었고,
아래와 같이 3개의 데이터를 프로세스들에게 나누어 주려고 한다면
어떤 데이터를 무슨 프로세스에 줘야할 지 컴퓨터는 어떻게 알 수 있을까?
먼저, 데이터를 받고자 하는 프로세스들은 포트 번호 (Port Number)라는 것을 가져야한다.
포트 번호는 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야하는 정수 값이다.
한편, 송신자는 데이터를 보낼 때 데이터를 받을 수신자 컴퓨터에 있는 프로세스의 포트 번호를 붙여서 보낸다.
5계층: Session Layer (세션 계층)
세션 계층(Session layer)은 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다. 동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex)의 통신과 함께, 체크 포인팅과 유휴, 종료, 다시 시작 과정 등을 수행한다. 이 계층은 TCP/IP 세션을 만들고 없애는 책임을 진다.
통신하는 사용자들을 동기화하고 오류복구 명령들을 일괄적으로 다룬다.
6계층: Presentation Layer (표현 계층)
표현 계층(Presentation layer)은 코드 간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어 준다. MIME 인코딩이나 암호화 등의 동작이 이 계층에서 이루어진다. 예를 들면, EBCDIC로 인코딩된 문서 파일을 ASCII로 인코딩된 파일로 바꿔 주는 것이 표현 계층의 몫이다.
7계층: Application Layer (응용 계층)
대표적인 Application Layer 프로토콜인 HTTP는 응용 프로그램인 웹 브라우저에게 필요한 데이터를 송수신할때 사용한다.
응용 계층에서는 사용자 측(클라이언트)의 요청을 전달하기 위해 통신 대상(서버)이 이해할 수 있는 메시지로(데이터)로 변환하고
전송 계층에 전달하는 역할을 한다.