앞서 전송 계층은 데이터의 전송을 담당한다.
보낼 데이터의 용량과 속도, 목적지를 처리한다.
대표적인 프로토콜은 TCP, UDP가 있다.
TCP란? (Transmission Control Protocol)
인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
특징
- 연결 지향 방식으로 패킷 교환 방식을 사용
- 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.
- 흐름 제어 및 혼잡 제어.
- 높은 신뢰성 보장
- UDP보다 속도가 느리다.
- 전이중(Full-Duplex), 점대점(Point to Point)방식.
TCP 서버의 특징
- 서버소켓은 연결만을 담당.
- 연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용된다.
- 서버와 클라이언트는 1대1로 연결된다.
- 스트림 전송으로 전송 데이터의 크기가 무제한이다.
- 패킷에대한 응답을 해야하기 때문에 성능이 낮다.
- Streaming 서비스에 불리하다.
- 웹 페이지 로딩이나 파일전송 즉 데이터의 무결성이 중요한 프로그램에 적합하다.
3way handshake란?
3way handshake는 TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
-
클라이언트가 SYN 패킷을 서버에 보내어 접속 요청을 한다.
-
서버가 클라이언트의 SYN 패킷을 수락하고 SYN-ACK 패킷을 클라이언트에 전송한다.
-
클라이언트가 서버의 SYN-ACK 패킷을 수신한 후 ACK 패킷을 서버에 보내면, 클라이언트와 서버 간의 연결이 수립되고 데이터 전송이 가능해진다.
여기서 SYN과 SYN-ACK
- SYN: 클라이언트가 서버에 연결을 요청하는 패킷.
- SYN-ACK: 서버가 클라이언트의 요청을 수락하고 응답하는 패킷.
4way handshake란?
4 way handshake는 세션을 종료하기 위해 수행되는 절차이다.
- 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송
- 서버는 확인메세지를 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태가 TIME_WAIT상태
- 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
- 클라이언트는 확인했다는 메세지를 보낸다.
UDP란? (User Datagram Protocol)
데이터를 데이터그램 단위로 처리하는 프로토콜이다.
특징
- 비연결형서비스로 데이터그램 방식을 제공한다.
- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않음
- UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다
- 신뢰성이 낮다
- TCP보다 속도가 빠르다
- 실시간 게임이나 동영상 스트리밍같이 데이터 전송 속도가 빨라야하는 서비스에 적합하다.
UDP 서버의 특징
- UDP에는 연결 자체가없어서 서버 소켓과 클라이언트 소켓의 구분이 없다.
- 소켓을 활용해 IP와 PORT를 기반으로 데이터를 전송한다.
- 서버와 클라이언트는 1대1 1대N N대N등으로 연결될 수 있다.
- 데이터그램(메세지) 단위로 전송되며 그 크기는 65535바이트로 크기가 초과하면 잘라서 보낸다
- 흐름제어가 없어서 패킷이 제대로 전송되었는지 오류가 없는지 확인할 수 없다.
- 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용됨.
비교
| 프로토콜 종류 | TCP | UDP |
|---|
| 연결 방식 | 연결형 서비스 | 비연결형 서비스 |
| 전송 순서 | 전송 순서 보장 | 전송 순서가 바뀔 수 있음 |
| 수신 여부 확인 | 수신 여부를 확인 | 수신 여부를 확인하지 않음 |
| 통신 방식 | 1:1 통신 | 1:1 OR 1:N OR N:N 통신 |
| 신뢰성 | 높음 | 낮음 |
| 속도 | 느림 | 빠름 |
결론
- 데이터의 신뢰성과 정확성이 좋아야하는 서비스는 TCP가 적합.
- 속도가 빨라야 하는 서비스라면 UDP가 적합.