Transport Layer:
엔드포인트 간 신뢰성특정 데이터 전송담당하는 계층
신뢰성: 데이터를 순차적이고 안정적으로 배포
전송: 포트 번호에 해당하는 프로세스에 데이터 전달
Transport Layer가 없다면?
1. 데이터 순차 전송이 원활하지 않습니다.
2. Flow(흐름 문제)
– 원인: 송수신자 간의 데이터 처리 속도 차이
3. Congestion(혼잡 문제)
– 원인: 네트워크 데이터 처리 속도(예: 라우터)
결과: 데이터 손실 발생
TCP(Transmission Control Protocol)
- 신뢰할 수 있는 데이터 통신을 가능하게 하는 프로토콜
- 특징: 연결 연결 (3way-handshake) – 양방향 통신
- 데이터 순차 전송 보장
- Flow Control(플로우 제어)
- Congestion Control(혼잡 제어)
- Error Detection(오류 감지)
세그먼트 – TCP 프로토콜 PDU
세그먼트: IP 프로토콜 패킷과 같이 프로토콜 내에서 처리되는 데이터 단위
데이터에 TCP Header를 붙인 한 조각을 세그먼트라고합니다.
TCP 헤드
중요: 9비트 플래그 필드. TCP 연결을 제어하고 데이터를 관리합니다.
ACK: 수신자가 재전송할 때 제어할 때 쓰는 플래그 비트
SYN : TCP가 연결 연결에 사용하는 플래그
FIN: TCP가 연결을 끊을 때 사용되는 플래그
TCP 3웨이 핸드셰이크
1. SYN
클라이언트에서 서버로의 연결 신청을 할 때 SYN 비트를 1로 설정하여 패킷 전송
2. SYN+ACK
서버는 데이터를 수신했음을 알리기 위해 SYN, ACK 비트를 1로 설정하여 패킷 전송.
연결은 양방향이므로 서버도 클라이언트에 연결 신청을 하기 위해 SYN 비트를 1로 설정
3. ACK + Packet
클라이언트도 서버의 접속 신청을 받아 알았다는 의미에서 ACK 비트를 1로 설정하여 패킷 송신
TCP 데이터 전송 방식
1. 클라이언트가 패킷을 보냅니다.
2. 서버에서 ACK 보내기
3. ACK를 수신할 수 없는 경우 재전송
이 과정을 통해 TCP는 신뢰할 수 있는 통신을 수행하고 있습니다.
4 way-handshake (Connection close)
1. 데이터를 모두 보낸 클라이언트가 FIN 전송
2. Server가 ACK를 보냅니다.
3. 서버로부터의 나머지 패킷 전송(일정 시간 대기)
4. Server가 FIN을 보냅니다.
5. 클라이언트가 ACK를 보냅니다.
클라이언트가 데이터를 모두 보냈다고 해서 서버도 데이터를 전부 보낸 것은 아니다.
서버에 아직 보낼 데이터가 남아 있을 수 있습니다.
그래서 잠시 기다린 후 서버에서 남은 패킷을 전송하고 클라이언트처럼 FIN 비트를 1로 설정하여 패킷 전송.
이제 클라이언트도 알았다는 의미에서 ACK를 보내 서버는 그것만으로 CLOSED 상태가 된다.
TCP 문제
- 전송의 신뢰성은 보증
- 매번 Connection을 연결하여 시간 손실 발생 (3way-handshake)
- 패킷을 조금 잃어도 재전송
UDP(User Datagram Protocol)
- TCP보다 신뢰성이 낮지만 전송 속도가 일반적으로 빠른 프로토콜
- 순차 전송 X, 흐름 제어 X, 혼잡 제어 X
- Connectionless(3 way-handshake X)
- 오류 감지
- 상대적으로 데이터의 신뢰성이 중요하지 않을 때 사용합니다(예: 비디오 스트리밍).