우당탕탕 개발일지
[HTTP] 인터넷 프로토콜 스택의 전송 계층: TCP와 UDP의 특징과 차이 본문
인터넷 프로토콜 스택의 계층 4가지
1. 애플리케이션 계층으로는 HTTP, FTP, SOCKET 라이브러리가 있다.
2. 전송 계층으로는 TCP, UDP가 있다.
3. 인터넷 계층으로는 IP가 있다.
4. 네트워크 인터페이스 계층으로는 LAN 드라이버, LAN 장비 등이 맨 하단에 위치하고 있다.
이 글에서는 이 계층들 중 전송 계층에서 사용하는 프로토콜, TCP와 UDP에 대해 다뤄볼 예정이다!
프로토콜 계층에 따른 데이터 전송 과정
전송 계층 프로토콜이 일단 어떻게 동작하는지 알아야겠죠?
1. 예를 들어 프로그램이 Hello, world! 메시지(즉, 데이터) 생성하
2. SOCKET 라이브러리를 거쳐 OS에 전달합니다
3. OS에서 TCP 정보를 생성하고, IP 패킷을 생성해서 메시지와 TCP 데이터를 포함한 데이터를 LAN 드라이버에 저장
4. LAN 드라이버에서 LAN 카드로 인터넷망을 통해 데이터를 서버에 전달
IP 패킷: 데이터 전달, TCP: 패킷 전송 과정 추적 및 관리
'옷 구매'에 비유하자면 아래와 같다고 볼 수 있다.
옷 = 데이터,
IP 패킷 = 택배 박스,
TCP = 배송이 어디까지 되었는지 추적하는 서비스
TCP란 무엇인가?
TCP(Transmission Control Protocol)은 전송 제어 프로토콜이다.
즉, 전송을 하는 방식을 제어한다.
IP 패킷만으로 해결이 안 되었던 문제들(데이터 전달 순서 오류, 데이터 누락)을 TCP를 통해 해결할 수 있다.
출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보를 가지고 있다.
신뢰할 수 있는 프로토콜이다.
TCP 특징
연결지향 | 연결 후 연결 여부 확인 |
데이터 전달 보증 | 전송과정에서 패킷이 누락되었을 경우 파악 가능 |
순서 보장 | 패킷이 전달되는 순서대로 서버에게 도달 |
TCP 3 way handshake
TCP를 통해 클라이언트와 서버가 연결하는 방식을 뜻함.
* SYN: Synchronize, 연결 접속 요청
* ACK: Acknowledge, 접속 요청이 들어온 걸 인지하고 요청 수락
요청 및 수락을 서로 3번 주고받으면서 연결이 되었음을 확실하게 파악 가능. 연결 확인 후 데이터 전송한다.
따라서 중간에 서버가 꺼지더라도 연결 확인 과정에서 걸러지기 때문에 연결 안 되어있는데 데이터를 보내는 경우(누락 문제)가 사라짐.
주의해야 할 점은 TCP 3 way handshake는 진짜 연결된 것이 아니고, 개념적으로만 연결된 것이다.
단지 클라이언트와 서버가 연결이 되어있는지 확인하는 용도일 뿐.
TCP의 장점 1: 데이터 전달 보증
데이터를 전송 시 서버가 데이터 잘 받았으면 "데이터 잘 받았다~"라고 응답해주기 때문에, 데이터가 잘 전달되었는지 파악 가능
TCP의 장점 2: 데이터 전달 순서 보장
만약 클라이언트가 보낸 순서대로 데이터가 서버에 도달한 게 아니라면, 순서가 잘못된 부분부터 서버측에서 반환해서 클라이언트에게 다시 돌려보냄.
TCP의 한계점
TCP 좋아보이지만, 3-way handshaking을 하면 시간이 걸려서 전송속도가 느려진다.
TCP는 연속성보다 신뢰성 있는 전송이 중요할 때 사용회는 프로토콜이고, 빠른 전송을 중요시할 때에는 UDP를 사용한다!
UDP란 무엇인가?
UDP(User Datagram Protocol)은 데이터그램 프로토콜로, 데이터를 데이터그램 단위로 처리하는 프로토콜을 뜻한다.
여기서 '데이터그램'이란 독립적인 관계를 지니는 패킷이라는 의미를 갖고 있다.
데이터 전달 및 순서 보장하지 않지만 단순하고 빠름
하나의 컴퓨터로 들어오는 여러 종류의 IP 패킷을 분류해준다.
TCP vs UDP
이전에는 TCP만 썼지만, 요즘은 UDP를 주로 사용하는 추세이다.
참고: