해당 포스팅은 우아한 테크코스 10분 테코톡 르윈의 TCP UPD를 정리한 내용입니다.
📍 전송 계층 (Transport Layer)
전송계층은 엔드포인트간 신뢰성 있는 데이터 전송을 담당하는 계층이다.
- 신뢰성 : 데이터를 순차적 , 안정적으로 전달한다.
- 전송 : 포트 번호에 해당하는 프로세스에 데이터를 전달한다.
전송계층이 없다면 ?
- 데이터의 순차 전송이 원활하지 않다.
- 흐름 문제 (Flow) : 송수신자 간 데이터 처리 속도 차이가 존재 할 수 있으며, 수신자가 데이터 한계량을 초과했는데 송신자 측에서 데이터를 전송하려고 할 경우 데이터가 누락되는 문제가 발생한다.
- 혼잡 문제 (Congestion) : 네트워크 데이터 처리 속도에 의해서 데이터가 제대로 전송되지 않을 수 있다.
데이터의 손실이 발생한다.
이런 문제를 해결하기 위해서 TCP가 등장한다.
📍 TCP (Transmission Control Protocol)
- 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
- 양방향 통신을 통해 Connection 을 연결한다 (3-way handshake)
- 데이터 순차 전송을 보장한다.
- Flow Control, 흐름을 제어 한다.
- Congestion Control, 혼잡을 제어한다.
- Error Detection , 오류를 감지한다.
세그먼트 (Segment)
- TCP 프로토콜 내부 데이터 단위
- 상위 레이어에서 전송된 데이터를 TCP 내부에서 자르고 TCP 헤더를 추가한 것
TCP 헤더
SYN
: 커넥션 연결
FIN
: 커넥션 연결 종료
ACK
: 데이터 수신자의 응답 제어
TCP 3-way handshake (Connection 연결)
1. 클라이언트 측에서 SYN 비트를 1로 설정하여 패킷을 전송한다.
2. 서버 측에서 응답을 알리기 위해 SYN, ACK 비트를 1로 설정하여 패킷을 전송한다.
3. 클라이언트측에서 다시 ACK 비트를 1로 설정하여 패킷을 전송한다.
이렇게 해서 양방향 커넥션이 연결되면 아래와 같이 데이터 전송을 한다.
데이터 전송 과정
- 클라이언트 측에서 패킷을 송신한다.
- 서버 측에서 응답을 알리기 위해 ACK를 송신한다.
3. ACK 를 수신하지 못했을 경우 , 클라이언트 측에서 패킷을 재전송한다.
4 way-handshake (Connection close)
1. 클라이언트 측에서 FIN 비트를 1로 설정하고 서버측에 전송한다.
2. 서버측에서 응답을 알리기 위해 ACK 를 전송한다.
(TIME_WAIT) 서버측에서 남은 패킷을 클라이언트 측에 전송한다.
3. 서버측에서 남은 패킷을 모두 전송한 후, 클라이언트 측에 FIN을 전송한다.
4. 클라이언트 측에서 응답을 알리기 위해 ACK를 전송한다.
TCP 의 문제점
- 매번 커넥션을 연결해서 시간 손실 발생
- 패킷을 조금만 손실해도 재전송하는 문제점
이러한 TCP의 단점을 보완하기위해 나온 것이 UDP
📍 UDP (User Datagram Protocol)
- TCP보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜 ( 순차전송 X, 흐름제어 X, 혼잡 제어 X)
- 무연결성
- Error Detection
- 비교적 데이터의 신뢰성이 중요하지 않을 때 사용한다. (ex) 영상 스트리밍)
User Datagram
- UDP 프로토콜 내부 데이터 단위
- TCP와 달리, 데이터를 자르지 않고 데이터에 UDP 헤더를 추가한다. (따라서 데이터를 쪼개야 할 경우 응용 계층에서 데이터를 직접 잘라야 한다.)
UDP 헤더
UDP 데이터 전송 과정
참고 / 이미지 출처