흔하게 네트워크가 뭐냐고 물어 보면 2개 이상의 컴퓨터가 연결되 통신하는 것이라는 말을 한다. 하지만 그렇게 단순하게 넘어갈 수 없다.....
A, B 두 사람은 서로가 가진 정보를 공유해 더욱 성장하고 싶다. 하지만 매일 종이를 들고 다녀갈 수는 없지 않은가? 서로 가진 컴퓨터를 연결해 보자 짜잔 가장 단순한 네트워크가 생겼다.
A:왜 B 너는 처음에 날짜를 적지 않는 거야!
A, B 두 사람 서로 정보를 공유하다 보니 서로가 가진 글쓰기 습관이 너무 다르다 (날짜, 이름 등등) 그래서 두 사람은 만나서 약속된 데이터 형식(프로토콜)을 만들어 지키기로 한다.
나도 끼워줘! C의 등장
A, B 사이에 한사람이 추가 되었다. 바로 C이다. 서로 1:1:1로 연결하려 하지만 나중에 또 누가 껴달라고 할 수도 있는 상황이다. 중간에 장치 하나(허브)를 둘까? 이제 더 많은 사람이 등장해도 허브에 연결만 하면 된다
B: A야 이거 이렇게 해줘, C:ㅇㅋㅇㅋ, B:?
B는 A에 어떤 요청을 했다. 하지만 C가 그것을 보고는 본인 해버렸다. 이런 허브에 역할을 더하자 원하는 곳으로만 데이터를 흘려줘(스위치)의 등장
근데 스위치에 어떻게 특정 위치로 가게 하지...?
그래 편지처럼 보내는 컴퓨터, 받는 컴퓨터를 쓰기로 약속(프로토콜)하자!
우리 [ABC….] 왕국이 생겼다. 근데 저기 [가나다….] 왕국도 있는데?
[ABC….][가나다….] 이렇게 큰 네트워크 왕국을 이뤄 그것을 LAN(Local Area Network) 부르기로 하자
그런데 LAN끼리 어떻게 연결할까 너무 많고 먼 것 같은데...?
처음 생각은 똑같이 서로 스위치를 두는 것이었지만 LAN마다 스위치는 너무 많다. 그래
경로을 표시하는 거니까 라우터란 것을 만들자! 이제 그럼 프로토콜에 [보낸 사람, 받는 사람, 보낸 국가, 받는 국가, 내용(형식 맞게)] 이렇게 다시 약속(프로토콜)하자!
네트워크1에 거주민 A, B 컴퓨터가 있다. A가 B에 정보를 어떻게 전달할까?
A가 먼저 양식을 찾아 작성한다(프로토콜)
A가 보내는 사람, 받는 사람을 적고 담는다(캡슐화)
A가 보내는 주소, 받는 주소를 적고 또 담는다(캡슐화)
우체국은 주소를 구체화해서 보내는 주소, 받는 주소를 적고 또또 담는다(캡슐화)
(이렇게 계속 담는 이유는 이적에 담은 것을 다른 곳으로 옮기기 위함이다)#### 여기까지가 캡슐화 과정입니다.
B의 주소 지킴이가 우체국에서 온 것을 받았다. 열어볼까? 처음 열어보니까 여기의 구체적인 주소가 맞는구먼!
음 보내는 주소 받는 주소도 맞고 B에 주기만 하면 되겠네
B는 온 것을 받고 보내는 사람, 받는 사람을 확인하고 내용도 확인한다.
c(먼 곳에 거주 중): 나는?
응용 계층 : 데이터를 담는다? 데이터를 생성해 보낼 준비를 한다.
먼저 A는 데이터를 생성하는 주체이므로 크롬이고 보낸 것은 HTTP 데이터이다.
물론 HTTP도 그래서 프로토콜이 존재하는 것이다.
전송 계층 : 응용 프로그램이(A가) HTTP 데이터(보내는 것)를 운영체제(보내는 주소)로 보는 것과 그 역순 과정.
쉽게 말하면[A-보내는 주소-받는 주소]가 [HTTP 데이터-보내는 포트-받는 포트]인 것이다.
이는 netstat명령어로 확인할 수 있다. 물론 보내고 받아서 응용프로그램에 전달하는 객체는 운영체제이다.
인터넷 계층 : 만약 같은 컴퓨터가 아니라면? IP주소를 이용하자
같은 컴퓨터가 아니라면 다른 컴퓨터의 주소가 필요하다. IP가 이것의 주소이다.
네트워크 엑세스 계층 : 구체적인 주소? (동일 주소 대비) NIC를 이용한 이더넷프로토콜의 MAC 주소!
MAC 주소 덕분에 정확한 위치에 정확한 데이터 전달 가능!
운영체제는 이처럼 응용/전송/인터넷 순으로 캡슐화하고 NIC 전달 최종적으로 네트워크 엑세스계층 캡슐화를 진행한다. 이렇게 캡슐화가 완료된 것을 프레임이라 한다. 이후 bit 단위로 통신하는 것이다.
그러면 더 나아가 통신할 때는? 스위치는 2계층, 라우터는 3계층이 된다!
이는 OSI 7계층의 2, 3계층을 의미한다.
1계층 : 물리
2계층 : 데이터링크 (1~2 네트워크 엑세스)
3계층 : 네트워크 (인터넷)
4계층 : 전송 (전송)
5계층 : 세션
6계층 : 표현
7계층 : 응용 (5~7 응용)
2계층에는 MAC 이용하는 이더넷 프로토콜 - 스위치
3계층에는 IP 이용하는 인터넷 프로토콜 - 라우터
응용계층 : 데이터
전송 : 세그먼트
인터넷 : 패킷
네트워크 엑세스 : 프레임
캡슐화된 데이터를 각각 다음과 같이 부른다.
굳이 나눈 이유는 누가 패킷이라고 말한다면 아! 인터넷까지 캡슐화된 데이터! 하고 알 수 있기 때문이다.
프레임을 다루는 이더넷 프로토콜 알아보기
주요 용어 :
목적지 MAC 주소 (6 bytes) - 출발지 MAC 주소 (6 bytes) : 어디서 출발? 어디로 도착?
상위계층 프로토콜 유형 (2 bytes) : 상위 계층 즉 인터넷 계층의 프로토콜이 무엇인지 알고자 하는 것이다. 이유는 프로토콜마다 해줘야 하는 작업이 다르다! (ex: IP 프로토콜)
페이로드 (46~1500bytes) : 상위 계층의 데이터 즉 패킷 -> 즉 다른 계층도 최상위 계층 응용을 빼면 모드 페이로드 존재한다.
MAC 주소는 12개의 16진수의 조합이다. 48bit(6bytes)로 이루어진다
MAC의 또 다른 특징은 마지막 값은 전체 전달을 뜻하는 브로드캐스트이다.
또 스위치의 메모리에는 포트와 MAC주소가 매핑된 MAC 주소 테이블을 가지고 있다.
지금까지 데이터 출발에 관해서는 모든 정보를 알 수 있었다. 그렇다면 도착은 어떨까?
IPv4 패킷 속 중요정보 3개 상위프로토콜, 출발지 IP, 목적지 IP
MAC이 물리주소라면. IP는 논리주소 0~255 .로 4개 분리 총 4bytes
MAC이 같은 네트워크 스위치라면 IP는 다른 네트워크 라우터(=게이트워이)이다.
2계층과 3계층의 역 캡슐화를 통해 다른 네트워크의 같은 네트워크 속 다른 기계를 찾을 수 있다.
ARP : 주소결정프로토콜로 TP 주소를 통해 MAC을 찾을 수 있다. (2.5 계층)
브로드캐스트가 왜 필요할까를 다시 생각하면 타깃에 ARP 프레임을 전달하면 브로드캐스트에의해 스위치로 연결된 모든 컴퓨터에 ARP 프레임을 뿌리고 타깃 IP만이 자신의 MAC 주소를 돌려 보내어 자신에게 데이터가 도착하도록 하는 것이다.
그럼 전송계층에서는?
목적지에서 세그먼트에 포함된 포트 번호를 읽고 그에 맞게 응용프로그램을 찾는 것입니다.
마지막 응용계층에서는?
진짜 데이터를 의미하는 응용계층에서는 네트워크를 통해 얻고자 하는 수많은 데이터를 저마다의 프로토콜을 이용해 사용한다. ex) HTTP
먼저 주소창(URL)에 www.velog.io를 검색하면 어떤 일이 벌어질까?
위에서 확인했듯이 MAC 주소도 결국 IP주소로 찾기 때문에 IP주소를 알아야 한다.
그런데 이렇게 영어단어로 검색한다고 어떻게 찾는 것일까? 먼저 첫 번째 방법이다.
하지만 사이트가 한두 개도 아니고 수많은 것을 어떻게 적을 것인가?
이렇게 사용해도 늘어나는 이름은 감당할 수 없었고 결국 DNS가 등장한다.
DNS가 확장성 있게 만든 도메인 이름을 통해 부하도 줄일 수 있게 되었다.
또 URN이라는 개념이 등장하는데 html 파일과 URL의 요청 이름이 다르면 서로 곤란해진다.
그래서 URN은 경로가 아닌 이름을 주어서 쓰는 방식을 택하고 이것은 URN, URL을 포괄하는 URI 개념으로 정착한다.
DNS 서버는 라우터를 통해 접속하여 원하는 IP주소를 받을 수 있다.