목차
1. IP/IP 패킷
과거에는 데이터를 교환할 때 '회선 교환 방식'을 사용했다. 회선 교환 방식은 발신자와 수신자가 사용할 회선을 각각 설정해놓고, 중간에서 두 회선을 직접 이어 데이터를 교환하는 방식을 말한다.
직접 본 적은 없지만 전화 발명 초기의 전화 교환원을 생각하면 편할 듯 하다. A가 B에게 전화를 하고싶다면 우선 교환국에 연락하여 전화 요청을 하고, 교환원이 직접 B의 회선으로 연결해 주거나 B의 관할 교환국으로 연결한 뒤 해당 교환국에서 다시 B의 회선으로 연결하는 방식이다.
하지만 이 방식은 1:1 교환 방식이기 때문에 내가 연락하고 싶은 회선에 다른 사람이 먼저 연결되어 있으면 해당 연락이 끝날 때 까지 기다려야 했고, 회선이 끊어지기라도 하면 처음부터 다시 해야 했기 때문에 굉장히 불편했었다.
이러한 문제점을 해결하기 위해 등장한 것이 바로 '패킷 교환 방식'이다.
패킷교환 방식은 '패킷'이라는 단위로 데이터를 잘게 나누어 전송하는 방식이다. 각 패킷에는 출발지와 목적지 정보가 있고, 이 정보에 따라 데이터를 전송하기 때문에 빠르고 효율적으로 데이터를 전송할 수 있다.
전에 배웠던 IP 주소는 이 패킷의 '출발지'와 '목적지' 주소를 숫자로 나타낸 것이다.
패킷은 소포의 운송장과 비슷한 역할을 한다. 출발IP와 도착IP 등의 정보가 들어있으며, 이 패킷에 담긴 정보를 통해 원하는 서버로 데이터를 전달하는 것이다.
패킷으로 데이터를 전송하기 위해서는 먼저 패킷에 데이터를 담아야 한다. 데이터의 크기가 작으면 상관 없지만 크기가 클 경우 데이터를 쪼개주어야 한다. 클라이언트가 전송한 패킷은 node(하나의 서버 컴퓨터)들을 거쳐 원하는 IP로 전달된다.
서버가 데이터를 정상적으로 수신했다면, 똑같이 패킷을 통해 클라이언트에 응답을 전달한다.
상기했듯 패킷을 소포에 대입해 보면 이해가 쉽다. 자동차를 만드는 것을 예로 들어보자.
클라이언트 : 택배를 보내는 사람
서버 : 택배를 받는 사람
데이터 : 자동차
패킷 : 운송장
패킷에 담긴 데이터 : 자동차가 너무 커서 한번에 보낼 수 없으니 부품별로 나눈 것(타이어, 핸들, 기어 등등)
노드 : 우편국 혹은 물류창고, 택배 허브 등
응답 : 수령 확인증
정확한 출발지와 목적지를 파악할 수 있다는 점에서 인터넷 프로토콜은 적절한 통신 방법으로 보이지만 IP에도 이와 같은 한계가 존재한다.
1. 비연결성
패킷을 받는 서버가 없거나 서버가 꺼져 있는 상태여도 패킷은 무조건 전달된다.
받는 사람이 없는데 부품이 전달된다면, 수신자 확인이나 반품 등의 과정에서 문제가 생길 뿐더러 쓸데없는 자원을 낭비해야 한다는 페널티도 생긴다.
2. 비신뢰성
데이터 전달중 장애가 생겨 패킷이 제대로 전달되지 않더라도 클라이언트는 이를 제대로 파악할 방법이 없다.
또한 데이터들이 서로 다른 노드를 거쳐오다 보니 클라이언트에서 보낸 데이터 순서와 서버에서 받는 데이터 순서가 다른 경우가 생길 수 있다.
타이어를 받았는데 정작 휠이 오지 않아 장착할 수 없는 상황과 비슷하다.
2. TCP/UDP
위와 같은 패킷 IP의 문제점을 해결하기 위해 등장한 것이 TCP이다.
TCP는 전송 제어 프로토콜(Transmission Control Protocol)의 약자로, 상황에 따른 데이터 전송을 제어한다.
뒤에 나올 네트워크 계층에서 자세히 배우겠지만, 데이터를 전달하기 위해서는 전송 계층과 네트워크 계층을 차례로 거치게 된다.
이때 전송 계층에서는 TCP 세그먼트를 생성하고, 네트워크 계층에서 IP 패킷을 생성한다.
TCP는 다음과 같은 특징을 가지고 있다.
1. 3 way handshake
- 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 전송
- 서버는 클라이언트에게 접속을 허가하는 ACK 패킷과 SYN 패킷을 전송
- 클라이언트가 서버에 ACK 패킷을 전송하면 연결 성립
3 way handshake로 연결이 성립되어야지만 데이터 전송이 가능하기 때문에, 패킷 IP가 가지는 비연결성 문제를 해결할 수 있다.
※참고
HTTP 2.0에서는 클라이언트가 ACK 패킷을 보낼때 데이터를 같이 보낼 수 있다.
2. 순서 보장
만약 패킷이 순서대로 도착하지 않는다면 TCP 세그먼트에 있는 정보를 토대로 다시 패킷 전송을 요청할 수 있다.
이를 통해 IP 패킷의 한계인 비신뢰성(순서를 보장하지 않음)을 보완 가능하다.
UDP는 IP에 PORT, 체크섬 필드 정보만 추가된 단순한 프로토콜이다.
앞서 TCP 특징과 비교해 보면 신뢰성은 낮지만 3 way handshake 방식을 사용하지 않기 때문에 TCP보다 빠르고, 커스터마이징이 가능하다는 장점이 있다.
이를 등산가방으로 비유해보면 TCP는 온갖 등산용품과 생필품, 텐트 등이 전부 들어있는 무거운 가방, UDP는 정말 필요한 물, 스틱, 음식만 들어있는 가벼운 가방이라고 볼 수 있다.
TCP | UDP |
연결 지향 | 비 연결 지향 |
전송 순서 보장 | 순서 보장 X |
전송 속도 느림 | 전송 속도 빠름 |
수신 여부 확인 | 수신 여부 확인 X |
신뢰성 높음 | 신뢰성 낮음 |
3. 네트워크 계층
A. OSI 네트워크 7계층
데이터 전송시 데이터는 7개의 계층을 거쳐 전송된다. 각 계층은 다음과 같이 구분한다.
- 1계층 - 물리 계층: OSI 모델의 맨 밑에 있는 계층으로, 시스템 간의 물리적인 연결과 전기 신호를 변환 및 제어한다.
- 2계층 - 데이터링크 계층: 네트워크 기기 간의 데이터 전송 및 물리주소를 결정하는 계층. 물리 계층에서 들어온 전기 신호를 모아 알아볼 수 있는 데이터 형태로 처리한다.
- 3계층 - 네트워크 계층: 실제 네트워크 간에 데이터 라우팅을 담당하는 계층. 어떤 네트워크 안에서 통신 데이터를 최대한 빠르게 보낼 최적의 경로를 선택한다.
- 4계층 - 전송 계층: 컴퓨터 간 신뢰성 있는 데이터를 서로 주고받을 수 있도록 하는 서비스를 제공하는 계층. 데이터들이 실제로 정상적으로 보내지는지 확인하거나, 패킷 유실, 순서 변경 등을 바로잡는다.
- 5계층 - 세션 계층: 세션 연결의 설정과 해제, 세션 메시지 전송 등의 기능을 수행하는 계층. 양 끝 단의 프로세스가 연결을 성립하도록 도와주고, 작업을 마친 후에는 연결을 끊는 역할을 한다.
- 6계층 - 표현 계층: 응용 계층으로 전달하거나 전달받는 데이터를 인코딩 또는 디코딩하는 계층.
- 7계층 - 응용 계층: 최종적으로 사용자와의 인터페이스를 제공하는 계층. 사용자가 실행하는 응용 프로그램들이 속해있다.
네트워크 7계층에서 데이터를 전달할 때는 응용계층→물리계층 순서로 데이터를 전달한다.
이때 전송에 필요한 정보들을 각 계층에서 추가하는데, 이 정보들을 '헤더'라 하고, 헤더를 붙이는 과정을 '캡슐화'라고 한다.
TCP 부분에서 데이터→TCP 세그먼트→IP 패킷 순으로 감싸는 것이 바로 캡슐화이다.
반대로 데이터를 받는 쪽에서는 물리계층부터 응용계층까지 반대로 데이터가 전달된다.
받는 쪽에서는 헤더를 하나씩 제거해 나가는데, 이는 '역캡슐화'라고 한다.
B. TCP/IP 네트워크 4계층
- 4계층 - 애플리케이션 계층: OSI 계층의 세션 계층, 표현 계층, 응용 계층. TCP/UDP 기반의 응용 프로그램을 구현할 때 사용.
- 3계층 - 전송 계층: OSI 계층의 전송 계층에 해당. 통신 노드 간의 연결을 제어하고, 신뢰성 있는 데이터 전송 담당.
- 2계층 -인터넷 계층: OSI 계층의 네트워크 계층에 해당. 통신 노드 간의 IP 패킷을 전송하는 기능 및 라우팅을 담당.
- 1계층 - 네트워크 인터페이스 계층: OSI 계층의 물리 계층과 데이터 링크 계층에 해당.
'Frontend Study' 카테고리의 다른 글
[FE_Bootcamp] 56일차_쿠키와 세션 (0) | 2023.05.02 |
---|---|
[FE_Bootcamp] 37일차_Web Server (0) | 2023.05.01 |
[FE_Bootcamp] 53일차_Web 접근성 (0) | 2023.04.28 |
[FE_Bootcamp] 52일차_Web 표준 (1) | 2023.04.28 |
[FE_Bootcamp] 50일차_Redux 상태관리 (0) | 2023.04.26 |