TCP&UDP
TCP & UDP
TCP와 UDP는 OSI 7계층 중 Transport(전송) 계층에서 사용되는 프로토콜이다.
전송계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하고 IP에 의해 전달되는 패킷의 오류를 검사하며 재전송 요구 제어등을 담당하는 계층이다.
쉽게 말해, 데이터의 전달을 담당하는 계층이다.
TCP vs UDP
TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol) 두 프로토콜 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜을 기반으로 구현되어 있지만, 서로 다른 특징을 가지고 있다.
먼저, 그 특징을 그림으로 비교해보자.
- TCP
위 그림처럼 TCP는 신뢰성 있는 데이터 전송을 위해 전송 후에 확인 작업을 거쳐가며 신뢰성을 높인다.
- UDP
반면 UDP는 일방적인 통신으로 확인작업이 없기 때문에 수신여부를 확인하지 않지만, 속도가 빠르다.
그렇다면, 이제 각각의 TCP와 UDP에 대해 좀 더 자세하게 살펴보자.
TCP
TCP는 신뢰성을 보장하는 연결 지향적 프로토콜이다.
연결 지향적 프로토콜이란, 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 프로토콜을 의미하는데, 클라이언트가 연결 요청을 하고 서버가 연결을 수락하면 통신 선로가 고정이 되며 모든 데이터는 이 고정된 선로를 통해 순차적으로 전달되는 구조이다.
데이터 전송 후에는, 신뢰성을 위해 확인 작업을 거치게 되는데 TCP는 패킷을 성공적으로 전송하면 ACK라는 신호를 날리고
만약, ACK신호가 제시간에 도착하지 않으면 타임아웃이 발생하여 패킷 손실이 발생한 패킷을 재전송해준다.
이렇게 TCP는 매번 전송시 확인작업을 거치기 때문에 신뢰성이 올라가게 되며
연속성보다 신뢰성이 중요할 때에 사용하게 된다.
TCP의 특징
연결형 서비스(가상 회선 방식을 제공)
- 3 - way handshaking 과정을 통해 연결을 설정
- 4 - way handshaking 을 통해 연결을 해제
흐름제어(Flow control)
데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지
혼잡제어(Congestion control)
네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지
(정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴현상을 방지)
신뢰성 높은 전송(Reliable transmission)
ACK 값이 연속적으로 전송되어야 하며, 중복일 경우 패킷 이상을 감지하여 재전송 요청
일정시간동안 ACK 값 미수신 시 재전송 요청.
전이중(Full-Duplex), 점대점(Point to Point) 방식
전송이 양방향으로 동시에 일어나며, 각 연결이 정확히 2개의 종단점을 가짐.
( 멀티태스킹이나 브로드캐스팅을 지원하지 않음 )
TCP의 연결 및 해제 과정
TCP Connection ( 3 - way handshake)
- 먼저 open()을 실행한 클라이언트가
SYN
을 보내고SYN_SENT
상태로 대기한다. - 서버는
SYN_RCVD
상태로 바꾸고SYN
과 응답ACK
를 보낸다. SYN
과 응답ACK
을 받은 클라이언트는ESTABLISHED
상태로 변경하고 서버에게 응답ACK
를 보낸다.- 응답
ACK
를 받은 서버는ESTABLISHED
상태로 변경한다.
TCP Disconnection (4 - way handshake)
- 먼저 close()를 실행한 클라이언트가 FIN을 보내고
FIN_WAIT1
상태로 대기한다. - 서버는
CLOSE_WAIT
으로 바꾸고 응답 ACK를 전달한다. 동시에 해당 포트에 연결되어 있는 어플리케이션에게 close()를 요청한다. - ACK를 받은 클라이언트는 상태를
FIN_WAIT2
로 변경한다. - close() 요청을 받은 서버 어플리케이션은 종료 프로세스를 진행하고
FIN
을 클라이언트에 보내LAST_ACK
상태로 바꾼다. - FIN을 받은 클라이언트는 ACK를 서버에 다시 전송하고
TIME_WAIT
으로 상태를 바꾼다.TIME_WAIT
에서 일정 시간이 지나면CLOSED
된다. ACK를 받은 서버도 포트를CLOSED
로 닫는다.
TCP state 용어 (netstat 명령어를 통해 확인 가능)
LISTEN : 서버의 데몬이 떠서 접속 요청을 기다리는 상태 SYN-SENT : 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태 SYN_RECEIVED : 서버가 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게 응답을 하였지만 아직 클라이언트에게 확인 메시지는 받지 않은 상태 ESTABLISHED : 3 way-handshaking 이 완료된 후 서로 연결된 상태 FIN-WAIT1, CLOSE-WAIT, FIN-WAIT2 : 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고 회신을 받아 종료하는 과정의 상태 TIME-WAIT : 연결은 종료되었지만 분실되었을지 모를 느린 세그먼트를 위해 당분간 소켓을 열어두고 있는 상태 CLOSING : 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태 CLOSED : 완전히 종료
UDP
UDP(User Datagram Protocol)는 전송계층의 비연결 지향적 프로토콜이다.
데이터를 주고받을 때, 연결 과정 없이 발신자가 일방적으로 데이터를 전송하기 때문에 TCP보다 빠르다는 장점이 있지만 신뢰성이 떨어진다는 단점이 존재한다.
UDP는 연결을 위해 할당되는 논리적 경로가 없기 때문에 각각의 패킷은 서로 다른 경로로 전송되며, 각각의 패킷은 독립적인 관계를 지니게 된다.
그래서 먼저 보낸 패킷이 느린 선로를 통해 전송된다면, 나중에 보낸 패킷보다 늦게 도착할 수 있으며 최악의 경우에는 잘못된 선로로 전송되어 유실될 수도 있다.
하지만 UDP는 TCP와는 달리 중간에 패킷이 유실되거나 변조되어도 재전송을 하지 않는다.
UDP의 특징
- 비연결형 서비스 ( 데이터그램 방식 제공 )
- 데이터 경계를 구분
- 정보를 보내거나 받는다는 신호절차 X
- UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
- 신뢰성이 낮다
- TCP보다 속도가 빠르다
- 패킷관리가 필요
- 패킷 오버헤드가 적어 네트워크 부하가 감소된다.
TCP 와 UDP의 비교 및 정리
공통점
TCP와 UDP의 공통점 |
---|
포트 번호를 이용하여 주소를 지정 |
데이터 오류 검사를 위한 체크섬(CheckSum) 존재 |
차이점
TCP | UDP | |
---|---|---|
연결방식 | 연결형서비스 | 비 연결형 서비스 |
패킷 교환 방식 | 가상 회선 방식 | 데이터그램 방식 |
전송 순서 | 전송 순서 보장 | 전송 순서가 바뀔 수 있음 |
수신 여부 확인 | 수신 여부를 확인함 | 수신 여부를 확인하지 않음 |
통신 방식 | 1:1 통신만 가능 | 1:1 / 1:N / N:N 통신 모두 가능 |
신뢰성 | 높음 | 낮음 |
속도 | 느림 | 빠름 |
면접 예상 질문
- TCP와 UDP란 무엇인지 대표적인 특징을 들어 이야기해보세요.
- 3-way handshaking과 4-way handshaking가 무엇인지 간략하게 설명해보세요
- TCP가 왜 신뢰성이 높다고 하는지 구체적인 이유를 들어 설명해보세요
참고 자료
기여자
HongEunho
📦