헷갈린 점 정리
0. 이걸 나누는 이유? 단위를 쪼개서, 관리(버그 등 찾을 때) 쉽게 하기 위함임
1. 프리젠테이션 계층은 프리젠테이션 이라는 표현 때문에 7번째 라고 생각 됨. 그런데 6번째 임.
2. 앞글자만 따서 생각하느라 몰랐는데, 앞에 3개 파트는 "~션"으로 끝남.
3. 그다음에 transport이고 그 뒤 2개 계층은 마지막 단어가 kk로 끝남ㅋ(네트워크. 링크) 마지막은 물리계층(예: 랜선)
4. 어쨌든 어플리케이션은 UI를 떠올렸는데 정확히 구분하자면 UI(또는 클라이언트의 화면)가 아님. 네트워크에 집입하게 하는 명령어.
예를 들어 "FTP" 로 파일 "저장"하겠다. 아니면 "HTTPS" 또는 "SMTP"를 쓰겠다. 는 명령어 실행
5. 표현 계층은 뭐 6번인지 7번인지 매번 헷갈렸는데 UI를 떠올리면 안됨. 대신에, 컴퓨터가 이해할 수 있는 "표현"으로 바꾸겠다.
핵심 키워드는 주요하게 3가지가 있는데, 인코딩,암호화,압축 (송신 측)
(따라서, 수신하는 쪽은 디코딩, 복호화, 압축 해제가 필요함)
6. 세션은 시작과 중간과 끝의 연결 상태를 관리함.
(체크포인트 역할도 하기 때문에 중간이라는 단어를 썼음)
여기까지 정리해보면,
어플리케이션 : 뭘 하겠음
프리젠테이션 : 어떻게 바꾸겠음
세션 : 언제 하겠음
7. UI(클라이언트)와 (네트워크의) 어플리케이션 관계
UI: 파일 선택, (FTP 서버 주소), 전송 버튼
어플리케이션:
ㅡㅡㅡㅡㅡ
아래는 생성해준 코드라서 참고용인데, 저렇게 짜여진다는 느낌만 이해했음.
import socket
import ssl # 암호화(L6)를 위한 모듈
def send_file_network_example():
# --- [L7: 응용 계층 (Application)] ---
# 목적: "어떤 서비스"를 할지 정하고 명령어를 만듦
filename = "my_photo.jpg"
ftp_command = f"STOR {filename}\r\n" # FTP 규격에 맞는 명령어 생성
# --- [L6: 표현 계층 (Presentation)] ---
# 목적: 데이터를 네트워크용으로 "가공 및 암호화"
# 1. 파일을 읽어 바이트(0,1)로 변환
with open(filename, "rb") as f:
raw_data = f.read()
# 2. 인코딩 및 암호화 (예: 문자열을 바이트로 변환)
encoded_command = ftp_command.encode('ascii')
# (실제라면 여기서 SSL/TLS 암호화 코드가 들어감)
# --- [L5: 세션 계층 (Session)] ---
# 목적: 통신 통로를 "열고(Connect), 유지하고, 닫기"
server_ip = "1.2.3.4"
server_port = 21
# 1. 소켓 생성 (L4 TCP와 연결되는 입구)
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
# 2. 세션 확립 (Connection Establishment)
client_socket.connect((server_ip, server_port))
print("세션 연결 성공!")
# 3. 데이터 전송 (L7 명령어 전송 후 L6 파일 데이터 전송)
client_socket.send(encoded_command) # "파일 보낼게!" 라고 먼저 말함
client_socket.sendall(raw_data) # 실제 파일 덩어리를 소켓으로 밀어넣음
except Exception as e:
print(f"세션 오류 발생: {e}")
finally:
# 4. 세션 종료 (Connection Termination)
client_socket.close()
print("세션 종료.")
# 실행
send_file_network_example()
ㅡㅡㅡㅡㅡㅡㅡㅡㅡ
import socket
import ssl
from ftplib import FTP
# 1. [L5: 세션 계층 담당 코드] - socket
# 목적: 통로를 뚫고 유지한다.
raw_socket = socket.create_connection(("ftp.example.com", 21))
print("L5: 서버와 물리적인 대화 통로(세션) 개설 완료")
# 2. [L6: 표현 계층 담당 코드] - ssl
# 목적: 데이터를 암호화하거나 읽을 수 있는 형태로 변환한다.
# 여기서 L5 소켓을 '암호화 박스'로 감쌉니다.
context = ssl.create_default_context()
secure_socket = context.wrap_socket(raw_socket, server_hostname="ftp.example.com")
print("L6: 데이터를 암호화 전송할 수 있게 포장 완료 (TLS)")
# 3. [L7: 응용 계층 담당 코드] - ftplib
# 목적: FTP 전용 명령어(USER, STOR 등)를 생성한다.
# 이제 L6로 감싸진 통로 위에 FTP 규약을 올립니다.
ftp = FTP()
ftp.sock = secure_socket # L7 객체에 L6/L5 통로를 연결
ftp.login(user="admin", passwd="password")
print("L7: FTP 로그인 명령어 전송 및 응답 확인")
# 실제 파일 전송 (L7 -> L6 -> L5 순으로 데이터가 흐름)
with open("photo.jpg", "rb") as f:
ftp.storbinary("STOR photo.jpg", f)
8. Transport: 어떤 통신을 할 것인지 (TCP와 UDP)
TCP는 얌전하게 물을 마시는 거라, 물 손실이 없는 반면
UDP는 물을 뿌리듯 마시는거라, 물 흘리면서 마시는 것
9. Network : 어디로 전송할 것인지 (IP) 전체 경로 관점(최종 목적지. 최종 호스트. 최종 노드)
10. Link: 각 노드(장치)간 연결(그 다음 노드가 목적지). MAC 주소 (ARP)
11. Physical: 0과 1의 전기 신호(랜선)
12. 호스트(클라이언트)와 호스트(서버)가 있으면 그 사이에는 대표적으로 라우터가 있고. 그 라우터는 어플리케이션, 프레젠테이션, 세션, 전송 계층은 없음. 네트워크, 링크, 피지컬만 존재.
13. 왜 목적지(Network)부터 정하는게 아니라 전송 방법(Transport) 부터 정하는 것임?
TCP UDP가 정해져야 데이터 조각 크기가 정해지고, 각 데이터(패킷) 조각에 IP를 붙일 수 있다고 함
14. Transport
15. IP(Network)와 MAC(Data Link)의 차이? MAC은 세상 유일함.
16. Data Link에서 라우터를 만나면 MAC 주소가 바뀜. 유일하다는데 바뀐다? 다음 라우터의 고유한 MAC주소를 넣는 것 이기 때문. 그냥 그 다음 MAC주소를 넣는 것 뿐임. 하지만 그 라우터의 MAC 주소는 유일하다는 것임.
17. Transport는 중간 라우터가 열어보지도 않는데, 그러면 호스트와 호스트 가장 끝에서만 이렇게 통신하는지? 맞음(종단간 원칙. End-to-End). 라우터에서 그걸 다 확인하면 완전 느려짐. 라우터는 길찾기(라우팅) 에 최적화 한 것임
18. 중간에 라우터가 패킷을 잃어버릴 수 있음. 그걸 아는 순간은 수신 호스트의 Transport 계층 에서 임
19. 아잠시만. 그러면 Transport는 TCP아니면 UDP만 존재하나? 놉, 그러나 대부분은 둘중 하나. 중간 라우터는 7계층 중 3계층만 사용하기 때문에 전송 프로토콜 계층을 사용하지 않기도 함. 그러면? 그냥 IP에 함께 보내기도 한다고 함.
ping 찍을 때는 ICMP.
20. 캡슐화. 네트워크에서는 주로 Header를 붙이는 과정. 계층을 내려갈 때 헤더를 계속 씌워감.
역캡슐화: 계층을 올라갈 땐 헤더를 벗겨감.
21. 계층마다 패킷(packet)을 부르는 이름이 다른 이유? 세그먼트, ... 앞선 헤더 때문.
7,6,5: 데이터 > 4: 세그먼트(TCP), 데이터그램(UDP) > 3: 패킷 > 2: 프레임
22. 공인 IP (세계 유일) <> 사설 IP
IP는 IP인줄만 알았는데, 전세계 모바일 컴퓨터만 해도 엄청 많은 수일텐데.. 유일하면 감당이 되나? 그런데 공인 IP가 있어서 가능하다. 음 예를 들면 집에서 와이파이 하나 두고 가족들이 모두 사용할 수 있는 것 처럼. 와이파이라는 허브를 통해, 그에 접속하는 모든 기기가 각각 어떤 임시 IP를 통해 연결될 수 있음
카테고리 없음