반응형
이전 글에서는 IP 프로토콜이 무엇인지, 한계가 무엇인지 알아보았다.
이번에는 TCP, UDP에 대해 알아보자.
인터넷 프로토콜 스택의 4계층
계층 | 프로토콜 |
애플리케이션 | HTTP, FTP |
전송 | TCP, UDP |
인터넷 | IP |
네트워크 인터페이스 | 랜카드, 랜드라이버 |
인터넷 프로토콜 계층은 위와 같이 나뉘지만,
좀 더 적게 구분시키면 애플리케이션 (http) -> OS(TCP,UDP,IP) -> 네트워크 인터페이스(랜카드)와 같이 나뉠수 있다.
그럼 이 계층들을 통과하는 예시로 메세지의 전송 순서를 나타내보자.
메세지 전송 순서
- 프로그램이 hello, world! 메시지 생성
- http 정보 생성
- socket 라이브러리 통해 전달
- 애플리케이션 계층 -> 전송 계층으로 이동
- tcp 정보 생성, 메시지 데이터 포함
- 전송 -> 인터넷 계층으로 이동
- ip 패킷 생성, tcp 데이터 포함
- 인터넷 -> 네트워크 계층으로 이동
- 네트워크 인터페이스에서 eternet frame 정보 포함
- 인터넷을 통해 데이터를 전송
최종적으로 전송 데이터에 포함된 정보
- http, tcp, ip, ethernet frame
IP 패킷에 들어있는 정보
- 출발지 ip, 목적지 ip, 전송 데이터
- ip 패킷
TCP/IP 패킷 정보
- IP 프로토콜의 부족한 점을 위해 추가적인 정보를 가짐
- 출발지 port, 목적지 port
- 전송제어, 순서, 검증 정보
TCP 특징
- 전송 제어 프로토콜
- 연결지향 - tcp 3 way handshake
- 컴퓨터 꺼져있네? 연결 안해~
- 데이터 전달 보증
- 데이터를 전송함.
- 데이터를 잘 받았다고 응답해줌
- 순서 보장
- 패킷 1~3 순서로 전송
- 서버가 패킷 1,3,2 순서로 도착함.
- 패킷 2부터 다시 보내
- 최적화가 따로 있을수는 있음
- TCP가 신뢰성이 보장되는 이유
- 위와 같이 전송제어, 순서, 검증 정보가 포함돼서 신뢰성이 보장됨.
TCP 3 way handshake (연결)
- syn (클라이언트 -> 서버)
- syn+ack (서버 -> 클라이언트)
- ack (클라이언트 -> 서버)
- 데이터 전송
- syn: 접속 요청
- ack: 요청 수락
- ack시에 데이터도 같이 전송
- 연결 지향을 한다는 의미는 중간 노드들은 데이터가 지나갔다는것에 대한 상태를 따로 가지지 않으므로
논리적으로만 출발지, 도착지가 서로 연결됐다고 정한다.
TCP 4 way handshake (해제 - 해제에 대한 설명이 없어서 추가)
- FIN (클라이언트 -> 서버)
- ACK (서버 -> 클라이언트)
- FIN (서버 -> 클라이언트, ACK 패킷과 함께 전달하여 3-way로 표현될 수 있음)
- ACK (클라이언트 -> 서버)
- 이해 편의상 클라이언트, 서버라고 표시했지만
커넥션을 끊을 주체(active close)와 해제를 요청받은 자(passive close)로 표현하는 것이 더 적절하다.
UDP 특징
- 기능이 거의 없음
- 연결 지향도 아님 — tcp 3 way handshake x
- 데이터 전달 보증 x, 순서 보장 x
- port, 체크섬 정도만 추가
- 단순하고 빠름
- 애플리케이션에서 추가 작업 필요
- 최근에 각광을 받고 있음
- 왜?
- 웹브라우저 http/3 스펙에서 더 최적화하면서 udp를 쓰는거를 시도해보고 있음
PORT
- 포트는 같은 ip 내의 애플리케이션들 사이에서 통신하기 위한 통로로 사용함.
- tcp/ip 패킷에 포함
- 출발지 ip/port, 도착지 ip/port
- ip는 아파트라면 port는 동호수다.
- 포트는 0~65535 할당 가능
- 앞 번호대 포트는 기존에 사용하는게 많아서 사용하지 않는게 좋음
DNS
- ip는 외우기 어려움
- 142.250.207.78 (X) -> google.com (O)
- ip는 변경될 수 있음
- 도메인은 계속 사용 가능
- 도메인으로 서버를 찾는 방법
- 클라이언트가 dns 서버에 도메인 명으로 호출함
- DNS 서버에서 ip를 가져다 줌
- 받은 ip로 메세지를 보냄.
내용 출처
반응형
'개발 > web' 카테고리의 다른 글
[http] http 메소드, 메소드 속성 (0) | 2024.01.07 |
---|---|
[http] http 개요 (0) | 2024.01.02 |
[spring] rest api 응답 컨텐츠 압축하기 (1) | 2024.01.01 |
[http] URI와 웹 브라우저 요청 흐름 (0) | 2023.12.31 |
[http] IP (인터넷 프로토콜) (0) | 2023.12.29 |