레퍼런스
https://velog.io/@dev-joon/OSI-7-Layer%EB%A5%BC-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90



따라서 이번에 살피는 OSI 7 모델과 TCP/IP 모델은 전부 다 살피는 것이 아닌, 근래에 많이 쓰이는 TCP/IP Updated 모델이다. 5계층과 6계층의 Session Layer와 Presentation Layer는 Application Layer 하나로 뭉뚱그려 살펴볼 것이다.
0과 1로 이루어진 데이터 신호를 아날로그 신호로 바꾸어 전선을 흘려 보내고(encoding) 아날로그 신호가 들려오면 0과 1의 나열로 해석하여(decoding) 물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고 받을 수 있게 해주는 모듈이다.
깊게생각하기
PHY칩

위의 사진처럼 1계층 Physical Layer의 모듈은 사실, 하드웨어적으로 구현되어 있다.
즉, 물리적인 회로인 것이다.
위의 1계층 Physical Layer에서는 두 대의 컴퓨터를 전선 하나로 연결했었다.
하지만 만약에 단순히 두 대의 컴퓨터가 아닌 여러대의 컴퓨터를 연결하고자 한다면 우리는 전세계의 수많은 컴퓨터들을 모두 전선으로 연결해야 할까?
그것은 너무나도 비효율적이기에 우리는 적은 수의 전선으로 여러 대의 컴퓨터와 연결을 할 수 있는 보다 효율적인 방법을 모색해야한다. 이를 위해 나온 것이 바로 버스 토폴로지와 스타 토폴로지 이다.
버스 토폴로지

버스 토폴로지는 모든 컴퓨터가 하나의 전선(Bus)에 연결되어 있으므로, 한 대의 컴퓨터가 전기신호로 데이터를 전송하게 된다면, 의도한 컴퓨터 외의 연결되어 있는 다른 모든 컴퓨터들 또한 데이터를 수신하게 됩니다.
스타 토폴로지

스타토폴로지는 버스 토폴로지의 컴퓨터들이 버스에 접촉하는 부분들을 모두 모아서 하나의 중계장치에 구겨넣은 것과 같은 구조를 지닌다. 이때 구겨넣은 중앙의 중계기 역할을 하는 기계장치를 허브라고 부른다
허브의 역할은 자신이 수신한 신호를 자신에게 연결되어 있는 모든 컴퓨터들에게 전달하는 것이며 많은 컴퓨터들에게 전달하기에 신호 강도를 유지하기 위해 신호 증폭을 수행한다.
이때 연결된 모든 컴퓨터에게 신호를 전달하는 것이 아닌 원하는 특정한 컴퓨터에게만 신호를 전달할 수 있도록 허브를 개량한 것이 바로 스위치이다.

이렇게 하나의 스위치를 중심으로 여러 대의 컴퓨터들이 연결되어 있는 구조를 네트워크라고 칭하자
그렇다면 각각 서로 다른 2개의 네트워크 상에 위치한 두 대의 컴퓨터가 서로 데이터를 교환하고 싶을 때는 어떻게 하면 좋을까?
-> 스위치와 스위치를 연결하여 서로 다른 네트워크를 연결한다.
이때 이를 가능하게 하는 장비를 라우터라고 한다.
이때 보통 스위치와 라우터는 서로 결합되어 있으며 이를 보통 공유기라고 부른다.

여담으로 국가와 국가간의 장거리 네트워크를 연결하기 위해 지어진 시설들이 바로 해저케이블 같은 것들이다.
같은 네트워크상에 있는 여러 대의 컴퓨터들이 데이터를 주고 받기 위해서 필요한 모듈이다.
이때 Framing은 Data Link Layer에 속하는 작업들 중 하나이다.
랜카드

2계층 Data Link Layer 또한, 1계층처럼 하드웨어적으로 구현되어 있다.
네트워크 계층은 네트워크에서 아주아주 중요한 계층이다.
수많은 네트워크들의 연결로 이루어지는 inter-network 속에서 목적지로 지정한 컴퓨터로 데이터를 전송하기 위해 IP Address를 이용해서 길을 찾고(Routing) 자신 다음의 라우터에게 데이터를 넘겨주는것(forwarding)이 바로 Network Layer가 담당하는 기능이다.
조금만 깊게 가보자
데이터를 목적지까지 안전하고 빠르게 전달하는 기능을 말한다
수많은 네트워크들로 복잡하게 얽히고 계층화되어 있는 inter-network 속에서 목적한 컴퓨터를 향해 최소한의 경로와 시간으로 경로를 선택하고 주소를 정하고 그 경로에 따라 패킷을 전달해주는 것이 바로 라우팅이다.
네트워크 계층은 사용되는 프로토콜 종류도 다양하고 라우팅하는 기술도 다양하다.
더 많은 것을 알고 싶지만 굉장히 복잡하고 많은 공부량이 예상되므로 라우팅에 대한 자세한 내용을 다음에 공부해보자
IP
- 컴퓨터에게 데이터를 전송할때는 헤딩 컴퓨터의 주소를 알고 있어야 합니다.
이때 네트워크 주소를 지정해주는 것이 IP입니다.
어디어 구현이 되어 있는가?
운영체제의 커널에 소프트웨어적으로 구현되어 있다.
Port번호를 사용하여 IP Address로 명시된 목적지 컴퓨터의 최종 도착지인 프로세스(프로그램)에 까지 데이터가 도달하도록 하는 모듈이다.
4계층 Transport Layer은 말그대로 통신을 활성화하기 위한 계층입니다.
양 끝단의 사용자들이 신뢰성 있는 데이터를 주고 받게 해주는 역할을 합니다.
보통 TCP 프로토콜을 사용하여 port를 열어서 원하는 프로세스가 데이터를 전송하고 받을 수 있도록 한다
대표적인 프로토콜은 tcp와 udp 프로토콜이 있다.
패킷 생성시 포트 번호를 데이터에 덧붙인다
ex) ip address|port number | data
깊게가보자
1,2,3계층을 통해 이제 인터넷 상의 모든 컴퓨터가 서로 데이터를 교환하며 통신할 수 있게 되었다.
그러면 이제 받은 데이터를 활용해보자

전세계로부터 받은 데이터를 원하는 프로세스(실행중인 프로그램)에게 주기 위해서는
컴퓨터가 어떤 데이터를 어떤 프로세스에게 주어야 하는지 알고 있어야 한다
=> 이를 위해 만들어진 가상의 관문이 바로 포트 번호이다.
포트란
우리는 ip 주소를 통해 원하는 서버를 찾아낸다 포트는 ip address를 통해 찾아낸 서버 내에서 원하는 프로그램으로 연결해주는 가상의 관문이다.
포트 번호는 어떠한 프로세스(프로그램)으로 접속할 것인지 컴퓨터에게 알려주는 역할을 한다.

송신자는 데이터를 보낼 때, 데이터를 받을 수신자 컴퓨터에 있는 프로세스의 포트번호를 붙여서 보낸다. ex) port: 80| ip address | data
따라서 데이터 전송자는 목적지 프로세스의 포트 번호를 알고 있어야 한다. 하지만 각기 원하는 대로 포트 번호를 마구 지정하는 것을 방지하기 위해 자주 쓰이는 포트번호들과 임시로 지정하는 범위가 규격화 되어 정해져있다.
포트 번호 규정
- Well known port ~1023
의미 그대로 정말 잘 알려진 포트를 의미한다. 80번의 http, 22번의 ssh와 같이 자주 사용되는 포트들에 해당한다.
어디에 구현이 되어 있는가?
특별히 지정되지 않은 포트들로 자유롭게 사용해도 무방하다
어디에 구현이 되어 있는가?
3계층과 마찬가지로 운영체제의 커널에 소프트웨어적으로 구현이 되어 있다.
정의
사용자가 필요로 하는 인터페이스와 프로토콜을 제공하는 계층이다.
5계층 Session Layer와 6계층 Presentation Layer와 7계층 Application Layuer에 있는 기능을 결합한다.
대표적인 프로토콜로는
그 외
TCP/IP socket programing
소프트웨어 아키텍처 중에 layere 아키텍처라는 것이 있다.
그리고 이 layered architecture를 따르는 대표적인 예시가 바로 네트워크 시스템이다.
-> 네트워크 시스템은 하나의 거대한 소프트웨어이면 osi 7계층은 이 거대한 소프트웨어의 구조를 설명하는 것입니다.