물리 계층
- 0과 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려보내고 아날로그 신호가 들어오면 0과1의 나열로 해석한다.
물리 계층은 물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈이다.
데이터 링크 계층
- 전선 하나를 가지고 여러 대의 컴퓨터와 통신할 방법을 모색해야 한다
- 전선 하나에 여러 컴퓨터를 연결할 경우, 모든 컴퓨터가 전선에 흐르는 아날로그 신호를 들을 수 있다.
- 스위치를 통해 특정 목적지로만 신호를 전달할 수 있다. → 하나의 스위치로 연결된 망을 네트워크라고 한다
- 서로 다른 네트워크에서 데이터를 주고 받고 싶다면 → 서로 다른 네트워크를 연결할 수 있도록 스위치를 라우터로 바꾸면 된다. (공유기가 바로 라우터)
- 전세계의 여러 라우터들을 계층구조로 연결한 것을 인터넷이라고 한다
- 여러 나라의 네트워크를 연결하기 위해 해저 테이블을 설치한다
- 물리 계층만으로 여러대의 컴퓨터가 통신할 수 없다
- 여러 컴퓨터는 하나의 스위치로 연결할 수 있다.
- 여러 컴퓨터들이 하나의 컴퓨터에 데이터를 보내면 → 수신측은 데이터를 잘 끊어서 읽어야 한다.
- 0과 1로 이뤄진 신호의 앞 뒤를 특정 규칙으로 묶는다
- 0000(신호의 시작) + 0과1의 신호 + 1111(신호의 끝)
- 이렇게 원본 데이터를 감싸는 것을 프레이밍이라고 한다.
데이터 링크 계층은 같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고 받기 위해 필요한 모듈이다
- 랜카드에 구현되어있다 (하드웨어적으로 구현되어 있다)
네트워크 계층
- 서로 다른 네트워크의 컴퓨터에서 A, B가 데이터를 주고 받을 경우, A는 데이터 앞에 B의 IP주소를 담아 전송한다. → (목적지 IP 주소 + 데이터) = 패킷
- IP 주소는 DNS Lookup 과정을 통해서 얻는다.
- 전송된 패킷은 목적지까지 연결된 경로의 여러 라우터를 거친다.
- 그 과정에서 라우터들은 패킷의 목적지 IP 주소를 확인한다
- 자신과 직접적으로 연결된 장치 중에 해당 패킷의 목적지 주소에 매핑되는 장치가 없다면 → 자신과 연결된 다른 라우터에게 패킷을 전달한다
- 라우팅 과정을 통해 목적지 IP로 가는 경로에 있는 주변 라우터에게 패킷을 전달한다.
- 수많은 네트워크들의 연결로 이루어지는 inter-network 속에서 어딘가에 있는 목적지 컴퓨터로 데이터를 전송해야한다
- IP 주소를 이용하여 길을 찾고 (라우팅)
- 자신의 다음 라우터에게 데이터를 넘겨주어 (포워딩) 목적지 컴퓨터로 전송한다.
전송 계층
- 인터넷 상의 모든 컴퓨터가 서로와 통신이 가능하게 되었다 (1,2,3 계층 덕분)
- 전송지에서 데이터를 수신지로 전송한 경우
- 수신 컴퓨터에는 여러 프로세스가 실행중이다. → 어떤 프로세스에 데이터를 전송해야할지 알 수 있을까?
- 수신 컴퓨터의 데이터를 받고자 하는 프로세스들은 Port 넘버를 가져야 한다.
- Port 번호 : 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야하는 정수 값
- 송신자는 데이터를 보낼 떄, 데이터를 받을 수신 컴퓨터에 있는 프로세스의 포트 번호를 붙여서 보낸다.
- 송신자는 그 포트번호를 미리 알고 있어야 한다.
전송 계층은 Port 번호를 사용하여 수신지 컴퓨터의 최종 도착지인 프로세스로 데이터가 도달할 수 있게하는 모듈이다.
- 운영체제의 커널에 소프트웨어적으로 구현되어있다
응용 계층
- 세션 계층, 표현 계층을 건너 뛰었다
- 사실 현대의 인터넷은 OSI 모델이 아니라 TCP/IP 모델을 따른다 (이 두 모델 모두 네트워크 시스템에 대한 모델이다)
- TCP/IP 모델을 따르는 이유는 OSI 모델이 TCP/IP 모델과의 시장 점유 싸움에서 졌기 떄문이다.
- TCP/IP 모델
-
네트워크 인터페이스 계층, 인터넷 계층, 전송 계층, 응용 계층
-
오늘날에는 Original TCP/IP 모델보다 Updated TCP/IP 모델이 더 많이 사용된다.
- TCP/IP 소켓 프로그래밍 : 운영체제의 전송계층에서 제공하는 API를 활용하여 통신 가능한 프로그램을 만드는 것을 말한다.
- TCP/IP 소켓 프로그래밍을 이용하여 자신만의 응용계층 인코더, 디코더를 만들 수 있다
- 즉, 누구든지 자신만의 응용계층 프로토콜을 만들 수 있다는 의미이다.
- 응용계층에서도 다른 계층과 마찬가지로 인코더와 디코더가 있다.