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 | 31 |
Tags
- java
- 오블완
- 혼공챌린지
- MySQL
- CS
- 기술면접
- 안드로이드
- select
- 티스토리챌린지
- 자바
- 안드로이드스튜디오
- groupby
- 스터디
- join
- 정처기
- doitandroid
- 인프런
- Kotlin
- Android
- 프로그래머스
- 알고리즘
- SQL
- 코틀린
- 코테
- 정보처리기사
- 카카오코테
- 혼공파
- 자료구조
- Til
- 혼공단
Archives
- Today
- Total
Welcome! Everything is fine.
#08. TCP와 UDP의 특징 및 차이 본문
728x90
TCP(Transmission Control Protocol)
TCP는 패킷 전송을 제어해(패킷의 순서가 올바르게 전달되는지, 패킷이 유실되지는 않는지 등) 신뢰성을 보장하며 데이터를 전송할 때 사용하는 프로토콜이다. 통신을 시작하거나 종료할 때도 수신측에 미리 물어본 후에 패킷의 전송 순서를 정해 통신을 시작한다. 이러한 과정을 3-way handshaking과 4-way handshaking이라고 한다. 자세한 특징은 다음 설명과 같다.
1. 3-way handshaking을 통해 연결 설정, 4-way handshaking을 통해 연결 해제
TCP 연결을 생성하면 SYN과 ACK(Positive Acknowledge) 혹은 NAK(Negative Acknowlede)라는 패킷을 주고받는다. SYN은 접속 요청을 할 때 가장 먼저 보내는 패킷이다. ACK는 "에러없이 패킷을 잘 받았어!"라는 의미이고, NAK는 "받은 패킷에 문제가 있어. 다시 보내줘!"라는 의미이다.
1) 3-way handshaking 과정
- 클라이언트가 서버에게 SYN 패킷을 보내 접속을 요청한다.
- 서버가 SYN를 정상적으로 받았다면 ACK(= 네가 보낸 패킷 잘 받았어!)와 SYN(= 나도 접속 요청할게!)를 보낸다.
- 서버가 보낸 패킷을 받은 클라이언트가 잘 받았다는 의미로 다시 ACK를 보내면 연결 설정이 무사히 완료된다.
2) 4-way handshaking 과정
- 클라이언트가 CLOSE() 함수를 호출하여 FIN(접속 종료를 위한 프래그)을 보낸다. 이때 클라이언트는 FIN_WAIT1 상태가 된다.
- FIN을 받은 서버는 CLOSE_WAIT 상태로 바꾼 후 ACK를 전송한다.
- ACK를 받은 클라이언트는 FIN_WAIT2 상태가 되고 서버 역시 CLOSE() 함수를 호출하여 클라이언트에게 FIN을 보낸다.
- FIN을 받은 클라이언트는 서버에게 ACK를 보낸 후 TIME_WAIT 상태가 된다. 그리고 연결 해제가 무사히 완료된다.
2. 신뢰성 보장
3. 연결지향
4. 흐름 제어
- 수신 측의 데이터 처리 속도를 파악해 데이터의 전송 속도 제어
- Stop and Wait
- Sliding Window
5. 혼잡 제어
- 네트워크 내 패킷의 수가 과도하게 증가하는 것을 방지
6. 오류 제어
- 데이터가 잘못 전송되거나 전송이 되지 않았을 경우 해당 데이터를 재전송
- ARQ(Automatic Repeat Request)
- Stop-and-wait ARQ
- Go-back-N ARQ
- Selective Repeat ARQ
UDP(User Datagram Protocol)
UDP는 데이터그램 패킷 교환 방식으로, TCP와 달리 순서가 보장되지 않는 프로토콜이다. 당연히 3-way handshaking나 4-way handshaking 과정이 없다. 잘 받았다는 응답을 받지 않고 그냥 데이터를 마구 보낸다. 따라서 속도는 TCP보다 빠르다는 장점이 있다.
1. 비신뢰성
- UDP는 기본적으로 handshaking 과정이 없어 비신뢰성이라는 특징을 가지지만, 커스터마이징을 통해 직접 구현이 가능하다.
2. 순서화되지 않은 데이터그램 서비스 제공
3. 실시간 응용 및 멀티캐스팅 가능
- UDP는 실시간 스트리밍이나 음성채팅, 온라인 게임 등에서 사용된다.
4. 단순 헤더
- 아래 그림에서 보듯이 UDP는 데이터 전송 자체가 목적이기 때문에 TCP에 비해 헤더가 단순하다.
TCP와 UDP 비교
정리하자면, TCP는 신뢰성이 높고 순서가 보장되는 대신 속도가 느리다. 신뢰성을 보장하기 위해 오류 제어, 혼잡 제어, 흐름 제어 등 많은 기능을 가지고 있기 때문이다. 반면 UDP는 헤더가 단순해 속도가 빠른 대신 패킷이 손실되거나 순서가 바뀌어도 해결하지 않아 신뢰성이 낮다.
'CS 스터디' 카테고리의 다른 글
#10. 스케줄러의 종류 (0) | 2024.02.13 |
---|---|
#09. RESTful API 정리 (0) | 2024.02.13 |
#07. OSI 7계층(OSI 7 Layer) 개념 / 각 계층별 특징 (0) | 2024.02.05 |
#06. 절차지향 vs 객체지향 (0) | 2024.01.30 |
#05. 객체 지향 프로그래밍(OOP)의 개념 / 특징 / 설계 원칙 (0) | 2024.01.30 |