
TransportLayer(전송계층/4계층)
목적
- 신뢰성: 데이터를 순차적, 안정적으로 전달
- 전송: 포트 번호에 해당하는 프로세스 데이터를 전달
필요성
1. 데이터 전송의 신뢰성 보장
- 오류 감지 및 수정: 전송 계층은 데이터가 올바르게 수신 되었는지 확인하고, 손실된 패킷을 재전송 하는 기능을 제공
- 순서 보장: 데이터 패킷이 올바른 순서로 수신 될 수 있도록 관리
ex. 송신: 123 --> 수신: 321 이런 현상 방지
2. 흐름 제어
- 전송 계층은 송신자의 전송 속도와 수신자의 처리 속도 간의 균형을 맞춘다. 이로 인해 수신자가 데이터 양을 조절하고, 버퍼 오버플로우를 방지할 수 있다.
3. 혼잡 제어
- 네트워크에서 발생할 수 있는 혼잡 문제를 처리한다. 전송 꼐층은 네트워크 상태를 모니터링하여, 네트워크가 혼잡할 때 데이터 전송 속도를 조절 가능함
4. 세그먼테이션 및 재조합
- 데이터는 전송 당시 작은 단위로 나누어져 전송된다(Segementation). 따라서 전송 계층은 이러한 세그먼트를 수신 측에서 다시 조합하여 원래 데이터로 복원하는 역할이 필요함
TCP(Tranmission Control Protocol)
- 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
- 데이터의 순차 전송 보장
- Flow Control(흐름 제어)
- Congestion Control(혼잡 제어)
- Error Detection(오류 감지)
- 양방향 통신(3-way-handshake)
- PDU: Segment(TCP Header + DATA)
- 플래그(Flags)
- ACK: 패킷이 유효하다는 응답
- SYN: 연결 요청
- FIN: 연결 종료 요청
등등
3-WAY-HANDSHAKE

- 클라이언트(송신자)가 서버에 접속을 요청하는 SYN 패킷을 보낸다.
- 서버(수신자)는 클라이언트의 요청인 SYN패킷을 받고 클라이언트에게 요청을 수락한다는 ACK 패킷과 SYN패킷을 보냄
- 이에 클라인트는 다시 ACK 패킷을 보냄
위의 3번의 패킷 교환 과정을 거쳐 연결을 성립시킴
연결 해제

- 클라이언트가 연결을 종료하겠다는 FIN 플래그를 보냄
- 클라이언트의 요청(FIN)을 받고 ACK 응답
- 데이터를 모두 보낼 때까지 잠시 TIME_OUT(기다림)
- 데이터를 모두 보낸 뒤 FIN 플래그를 클라이언트에 보냄
- 클라이언트가 FIN 패킷을 확인했다는 ACK를 서버에 보냄
- 서버는 ACK를 받고 소켓 연결을 Close하면서 연결 종료
TCP의 문제점
- 전송의 신뢰성을 보장받는 대신,
- 매번 Connection을 연결해서 3-way-handshake 만큼의 시간 손실
- 패킷을 조금만 손실해도 반드시 재전송
-> UDP의 필요성
UDP(User Datagram Protocol)
- TCP 보다 신뢰성이 떨어지지만, 전송 속도가 일반적으로 빠른 프로토콜
- 순차 전송x, 흐름제어x, 혼잡제어x
- Error Detection
- 비교적 데이터의 신뢰성이 중요하지 않을 경우 사용 (ex. 영상 스트리밍)
- PDU: Datagram(UDP Header + DATA)
데이터 전송
- Best Effort = 결과보장 x
- 비연결 지향
- 패킷 기반 전송(데이터그램)
- 신뢰성 보장 x
- 오류 검출: 체크섬을 이용한 오류 검출만 수행(무결성 확인)
- 패킷 손실: 전송 중 데이터그램이 손실되거나, 순서가 바뀌는 경우가 발생 가능
-> TCP와 달리, 오류 발견시 데이터그램은 폐기되지만 재전송을 요청하거나 복구 불가능
정리 (TCP vs UDP)
