출처
인터넷 프로토콜 스택의 4계층
더 쉽게 이해하기 위해 프로토콜 계층 구조의 예시를 살펴보자
메시지 전송 과정
1. 미국에 있는 친구에게 "Hello, World!" 라는 메시지를 전송하면, 보통 Socket 라이브러리를 사용하여 OS 계층에게 "Hello World!" 라는 메시지를 넘긴다.
2. OS가 TCP 프로토콜을 사용하여 메시지 데이터에 TCP 정보를 씌운다.
3. 다음 IP 정보를 씌워 IP 패킷을 생성한다.
4. 마지막 LAN 카드를 통해 나갈 때 Ethernet Frame 을 씌운 후 인터넷 망으로 나간다.
EthernetFrame: LAN카드에 등록된 MAC주소 (실제 물리적인 정보들이 포함)등을 포함한다.
Mac주소는 NIC(네트워크 인터페이스 카드)별로 할당된 48비트의 고유 번호이다. 데이터 링크 계층에서 작동하는 네트워크 장비인 브리지와 스위칭 허브는 Mac 주소를 기반으로 각 노드를 식별한다. Mac 주소의 앞자리 24비트는 제조사의 식별 번호이고, 뒷자리 24비트는 제조사가 자사 제품에 할당하는 고유 번호이므로 양쪽을 조합한 개별 NIC에 할당된 Mac 주소는 전 세계에서 단 하나뿐임을 보장한다.
IP 패킷 정보
TCP / IP 패킷 정보
TCP의 특징
: 전송 제어 프로토콜 (Transmission Control Protocol)
- 연결 지향 - TCP 3 way handshake (가상 연결)
- 연결 후 패킷을 전송한다.
- 데이터 전달을 보증
- 중간에 패킷이 손실되도 알 수 있다.
- 순서 보장
- 따라서 신뢰할 수 있는 프로토콜
- 현재는 대부분 TCP를 사용한다.
TCP 3 way handshake
먼저 3단계를 통해 클라이언트와 서버 연결 후 데이터를 전송하는 방식
주의! 가상 연결이다. 물리적인 연결이 아니다.
옛날엔 내가 친구 집에 전화를 하면 중간에 전화교환원이 중간에서 전화 포트를 뽑아서 옆의 친구 집 포트에 꼽아줬었다. TCP는 그런 물리적인 연결이 아니다. 그냥 Syn, Ack 를 통해서 클라이언트와 서버가 통신이 가능하도록 연결이 됐나보다 하고 생각하는 것
중간에 수많은 노드들은 연결이 됐는지 안됐는지 모른다.
나를 위한 전용 랜선이 보장된게 아님
데이터 전달 보증
- 데이터 잘 받았다는 전송이 설정한 시간내에 오지 않으면, 클라이언트에서 다시 서버로 데이터를 전송하거나 하는 대처방안이 있다.
순서 보장
- 패킷 1 다음 패킷 2가 아닌 패킷 3이 도착했다면 패킷 3 이후로 도착한 패킷은 버리고 다시 패킷 2 를 요청한다.
- 내부적으로 최적화하는 로직은 다르겠지만 기본적으론 이 방식을 사용한다.
이와 같은 특징들은 TCP 세그먼트 (TCP 정보가 포함된 데이터 단위를 세그먼트라고 한다) 안에 포함되어 있는 전송 제어 정보, 순서 정보, 검증 정보에 의해 가능하다.
따라서 TCP 프로토콜은 신뢰할 수 있는 프로토콜이다.
UDP 특징
: 사용자 데이터그램 프로토콜 (User Datagram Protocol)
- 하얀 도화지에 비유된다. (기능이 거의 없다)
- 연결 지향 - 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠르다.
- 정리
- IP 과 같다. + PORT, + 체크섬 정도만 추가된다.
- 애플리케이션 단계에서 추가 작업이 필요하다.
궁금증❔ IP와 기능이 거의 비슷하면 IP를 개선하여 사용하면 안되나?
일반적으로 많이 알려지고 사용되고 있는 프로토콜을 수정하게 되면 혼란이 발생한다. 기능을 추가하거나 수정하고 싶다면 기존의 것은 그대로 두고 새로운 프로토콜을 만드는게 좋음
참고 : 최근엔 TCP에서 UDP로 변경되는 추세다. 이유는 3 way shandshake 가 번거롭고, 개발중인 HTTP 3 버전에선 TCP의 특징들을 포함되어 개발된다는 말이 있기 때문에 빠르고 단순한 UDP로 변경되고 있다.
'CS > 네트워크' 카테고리의 다른 글
[HTTP] HTTP 기본 (무상태, 비연결성, HTTP 메시지 구조) (0) | 2023.04.12 |
---|---|
[네트워크] 네트워크 기초 (0) | 2023.04.11 |
[HTTP] IP (인터넷 프로토콜) (0) | 2023.04.05 |
[HTTP] 인터넷 통신에 대해 알아보자 (0) | 2023.04.05 |
[HTTP] URI에 대해 알아보자 (0) | 2023.04.03 |