일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 프로그래머스
- 백준
- 에라토스테네스의 체
- Effective Java
- dfs
- 문자열
- 시뮬레이션
- 그리디
- BFS
- JUnit 5
- 수학
- 플로이드-와샬
- 후니의 쉽게 쓴 시스코 네트워킹
- CS
- 유니온 파인드
- 위상정렬
- 구현
- 알고리즘
- mst
- 동적계획법
- 세그먼트 트리
- 완전탐색
- Kotlin
- 백트래킹
- Network
- swea
- 투 포인터
- 스택
- 이분탐색
- java
반갑습니다!
[Network] OSI 7 Layer 본문
우연히 네트워크 계층에 대해 잘 설명된 영상을 보게되어 정리하게 되었습니다.
1. Pysical Layer
두 대의 컴퓨터가 통신하려면?
- 모든 파일과 프로그램은 0과 1의 나열
- 0과 1만 주고받으면 된다.
- 1을 보낼 때는 +5V의 전기를 전선으로 흘려보내고 0을 보낼 때는 -5V의 전기를 전선으로 흘려보내면 0과 1의 전송이 가능.
→ 이론상으로는 간단하지만 실제로는 잘 작동하지 않음
왜 그런지는 다음 그림을 보며 생각해보자.
만약 전자기파가 위의 그림과 같다면?
→ 주파수 값이 숫자 하나로 고정되지 않는다.
그런데 전선은 모든 주파수를 다 통과시킬 수 없기 때문에 데이터가 유실될 것이고, 데이터를 받는 컴퓨터에서는 전송한 데이터와 다른 데이터를 받게 될 것이다.
- 이런 수직선과 수평선이 있는 전자기파는 항상 0~무한대 [Hz]의 주파수 범위를 가진다.
- 즉, 이런 전기 신호를 통과시킬 수 있는 전선은 없다.
→ 그렇기 때문에 아날로그 신호로 바꿔서 전송해야한다.
정리
- 0과 1의 나열을 아날로그 신호로 바꿔서 전선으로 흘려보낸다. (encoding)
- 아날로그 신호가 들어오면 0과 1의 나열로 해석한다. (decoding)
Physical Layer는 물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈(module)이라고 할 수 있다.
Physical Layer 기술이 구현된 곳은?
- PHY 칩
- 1계층 모듈은 하드웨어적으로 구현되어있다.
2. Data-Link Layer
모두 같은 네트워크에 있는 A, B, C가 D로 데이터를 동시에 전송하는 상황이라고 가정해보자. 이 때 어떻게 D에서 각각의 데이터를 구분할 수 있을까?
가장 쉬운 방법은 시작과 끝에 구분자를 두는 것이다.
예를 들어 시작을 1111, 끝을 0000이라고 한다면 D는 1111 0110 0000 1111 1100 0000 1111 0101 0000 가 들어오면 구분자를 통해 0110, 1100, 0101 을 구분할 수 있다. 그리고 이를 Framing이라고 한다.
Data-Link Layer란 같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고받기 위해서 필요한 모듈이라고 할 수 있다.
Data-Link Layer 기술이 구현된 곳은?
- 랜카드
- 2계층 모듈도 1계층 모듈처럼 하드웨어적으로 구현되어있다.
3. Network Layer
IP 주소
- 각 컴퓨터들이 갖는 논리적 고유 식별 주소
- 서로 다른 네트워크에 있는 A와 B가 데이터를 보내려고 하면 목적지 PC의 IP 주소를 알아야 한다.
정리
Network Layer란
- 수 많은 네트워크들의 연결로 이루어진 인터넷 속에서
- 어딘가에 있는 목적지 컴퓨터로 데이터를 전송하기 위해,
- IP 주소를 이용해서 길을 찾고 (routing)
- 자신 다음의 라우터에게 데이터를 넘겨주는 것 (forwarding)
- Network Layer에서 전송하는 데이터를 패킷이라고 한다.
Network Layer 기술이 구현된 곳은?
- 운영체제의 커널에 소프트웨어적으로 구현되어 있다.
4. Transport Layer
데이터를 받은 컴퓨터에 3개의 프로세스가 실행 중이라고 가정해보자.
이 때 컴퓨터는 어떤 데이터를 어떤 프로세스에게 전달해줘야할지 어떻게 알 수 있을까?
- 데이터를 받고자 하는 프로세스들은 포트 번호(Port Number)를 가져야 한다.
- 포트 번호란 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야하는 정수 값이다.
- 송신자는 전송할 데이터에 수신자 컴퓨터에 있는 프로세스의 포트 번호를 붙여서 전송한다.
데이터 전송자는 포트 번호까지 미리 알고 있다
- 사실 인터넷 브라우저에 www.naver.com을 입력하는 것은 www.naver.com:80이 생략된 것이다.
- 이는 곧 미리 네이버의 포트 번호를 알고 있다는 의미이다.
정리
Transport Layer란?
- Port 번호를 사용해서 도착지 컴퓨터의 최종 도착지인 프로세스가지 데이터가 도달하게 해주는 모듈
Transport Layer 기술이 구현된 곳은?
- 운영체제의 커널에 소프트웨어적으로 구현되어 있다.
5. Application Layer
왜 Session Layer랑 Presentation Layer는 건너뛴 것인지?
- 현대의 인터넷은 OSI 모델이 아니라 TCP/IP 모델을 따르고 있다.
- OSI 모델이 TCP/IP 모델과의 시장 점유 싸움에서 밀렸기 때문
- TCP/IP 모델 역시 네트워크 시스템에 대한 모델이다.
- 현재는 기존의 TCP/IP 모델에서 조금 더 개선된 TCP/IP 모델을 사용하고 이는 아래의 그림과 같다
TCP/IP 소켓 프로그래밍
- 운영체제의 Transport Layer에서 제공하는 API를 활용해서 통신 가능한 프로그램을 만드는 것을 TCP/IP 소켓 프로그래밍 또는 네트워크 프로그래밍이라고 한다.
- 소켓 프로그래밍 만으로도 클라이언트, 서버 프로그램을 따로따로 만들어서 동작시킬 수 있다.
- TCP/IP 소켓 프로그래밍을 통해서 자신만의 Application Layer 인코더와 디코더를 만들 수 있다.
- 누구든 자신만의 Application Layer 프로토콜을 만들 수 있다.
- 다른 Layer들과 마찬가지로 Application Layer에도 인코더와 디코더가 있다.
대표적인 Application Layer 프로토콜인 HTTP로 인코딩과 디코딩을 살펴보자.
다음과 같이 각 계층을 돌면서 encoding되고, 다시 decoding 되면서 데이터가 전송된다는 것을 알 수 있다.
출처
'CS' 카테고리의 다른 글
[Effective Java] 아이템 12: toString을 항상 재정의하라 (0) | 2021.08.08 |
---|---|
[Java] Effective Java Item1 (0) | 2020.11.05 |
[Network] 후니의 쉽게 쓴 시스코 네트워킹 Part 6 (0) | 2020.10.06 |
[알고리즘] 위상 정렬 (0) | 2020.10.06 |
[Network] 후니의 쉽게 쓴 시스코 네트워킹 Part 5 (0) | 2020.10.04 |