Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- DI
- 티스토리챌린지
- 보따리
- Database
- 사이드 프로젝트
- redis
- SQL
- 오블완
- 트러블슈팅
- 코드트리
- 동적 SQL
- open contribution jam
- 눈송이
- 체험
- dto projection
- jscode
- 모의면접
- 테오의 스프린트
- bean
- 구슬
- 북극곰
- 후기
- 글또
- 글또 #다짐
- Spring
- 부꾸
- 프로그래머스
- jooq
- spring context
- 부꾸러미
Archives
- Today
- Total
벤티의 개발 로그
[Network #6] TCP vs UDP 본문
이번 포스트는 네트워크에서 가장 기본적인 프로토콜인 TCP와 UDP에 대해 정리해보았다!

TCP와 UDP, 어떻게 다를까?

TCP
- 패킷 사이의 순서를 보장
- 연결지향 프로토콜(가상 회선)을 사용해서 연결
- 경로를 따라 대역폭과 기타 자원을 예약할 수 있음
- 연결하고 해제하는데 비용 발생
- 신뢰성을 구축해서 수신 여부를 확인
- 오류 검사: 시간 초과, Checksum
UDP
- 패킷 사이의 순서를 보장하지 않음
- 비연결지향 프로토콜(데이터그램)을 사용
- 경로를 따라 대역폭과 기타 자원을 예약할 수 없음
- 연결하고 해제하는 과정이 필요하지 않음
- 수신 여부를 확인하지 않고 단순히 데이터만 제공
- 오류 검사: Checksum만!
UDP: 장점과 단점
장점
- 비연결형 서비스이므로 TCP에 비해 속도가 빠르며 네트워크 부하가 적다.
- 1:1, 1:N, N:N 통신이 가능하다.
단점
- 데이터의 신뢰성이 없다.
UDP: Checksum
- UDP 세그먼트의 오류 검출을 위해 사용된다.
- 체크섬은 송신할 세그먼트를 16비트 단위로 나누고, 모두 더한 다음 1의 보수를 취해서 만들어진다.
- 이제 이 체크섬을 세그먼트와 같이 전송한다.
- 수신자는 수신된 세그먼트에 대해 동일한 방식으로 체크섬을 만들고, 헤더의 체크섬과 일치 하는지 비교함으로써, 수신된 세그먼트의 오류를 검출할 수 있다.
TCP: 연결 과정과 종료 과정
TCP는 아래 과정들이 있으므로 UDP에 비해 신뢰성이 있다고 할 수 있다.
전체 과정

- 왼쪽이 클라이언트고, 오른쪽이 서버이다!
- SYN(Synchronization): 연결 요청 플래그
- ACK(Acknowledgement): 응답 플래그
- ISN(Initial Sequence Number): 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호
연결 (3-way Handshaking)

- SYN 단계: 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보냄
- SYN + ACK 단계: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보냄
- ACK 단계: 클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보냄
종료 (4-way Handshaking)

- 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보내고, 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다림
- 서버는 클라이언트로 ACK라는 승인 세그먼트를 보내고 CLOSE_WAIT 상태에 들어감 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어감
- 서버는 LAST_ACK상태가 되며 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보냄
- 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 되며 이후 클라이언트는 어느 정도의 시간(TIME_WAIT으로 설정된 시간)을 대기한 후 연결이 닫힘
빠른 재전송 (Fast Retransmit)
- 타임아웃의 주기가 때때로 긴 타임아웃에 의한 재전송의 문제점을 보완하기 위한 방법으로, 타임아웃에 상관없이 재전송을 하는 방법이다.
- 수신자는 순서가 올바르지 않은 세그먼트를 수신하면, 마지막으로 올바르게 수신된 세그먼트에 대한 ACK를 송신 측에 전송한다.
- 송신자는 중복 ACK 수신을 통해 타임아웃이 일어나기 전에 송신된 패킷이 손실되었음을 인지할 수 있어, 재전송을 할 수 있다.
신뢰적 데이터 전송의 원리
전송 후 대기 프로토콜
- 패킷을 전송하고 그 패킷에 대한 수신 확인 응답을 받고 나서, 다음 패킷을 전송하는 방식이다.
- 이러한 방식은 네트워크 링크 이용률이 낮아 속도가 느리다는 단점이 있습니다.
파이프라인 프로토콜
- 전송한 패킷에 대한 수신 확인 응답을 받지 않고도, 여러 개의 패킷을 연속으로 전송하여 링크 이용률과 전송 속도를 높이는 프로토콜이다.