OSI 7계층에서 4번째 계층에 해당한다.
전송 계층은 End Point간 신뢰성있는 데이터 전송을 담당하는 계층이다.
여기서 신뢰성은 '데이터를 순차적, 안정적인 전달'을 의미하고 데이터 전송은 포트 번호에 해당하는 프로세스에 데이터를 전달하는 것을 의미한다.
만약 전송계층이 없다면?
데이터가 순차적으로 전송되는 것을 보장할 수 없다. 즉, 데이터의 유실이 발생할 수 있다.
원인은 송수신자 간의 데이터를 처리하는 속도의 차이이다.
TCP(Transmission Control Protocol)는 신뢰성있는 데이터 통신을 가능하게 해주는 프로토콜이다.(IP는 데이터를 보낼 때 순차 전송을 보장하지는 못한다.)
Connection 연결을 통해 3 way-handshake 방식으로 양방향 통신을 지원한다.
그리고 가장 중요한 데이터의 순차 전송을 보장한다.
3 way-handshake란?
3 way-handshake는 TCP/IP를 이용해서 통신하는 클라이언트와 서버가 데이터를 주고받기 전에 정확한 전송을 보장하기 위해 서로 간의 연결이 잘 되어있는지 확인하는 과정이다.
TCP 패킷(세그먼트)는 다음과 같은 구조를 가지는데 Data Offset를 중점적으로 보면 된다.
URG ~ FIN은 TCP 연결을 제어하고 데이터를 관리하는 역할을 한다.
3 way-handshake 개념에서는 ACK, SYN, FIN 얘네를 알아둬야 한다.
SYN은 Connection을 연결할 때 사용하고 FIN은 Connection을 연결하고 통신을 주고받은 뒤 마지막에 연결을 끊을 때 사용하고 ACK는 데이터 수신자가 수신한 데이터를 전송자에게 다시 전송하면서 제어할 때 사용한다.
1. 데이터를 전송할 때 SYN에다가 비트를 1로 설정해 패킷을 송신하고
2. 서버는 '나도 너랑 통로를 연결하고 싶다'라는 의미로 SYN, ACK 비트를 1로 설정해 패킷을 송신하며
3. 클라이언트는 '서버도 나랑 통로를 연결하고 싶구나. 알겠어'라고 응답을 보내기 위해 ACK 비트를 1로 설정하여 패킷을 다시 송신한다.
3 way-handshake 이후 TCP가 데이터를 주고 받는 과정
1. 클라이언트가 패킷을 송신하며
2. 서버에서 잘 받았다는 의미로 ACK를 송신하고
3. 클라이언트에서 ACK를 받지 못했으면 데이터 송신이 잘못된 것이므로 다시 패킷을 송신한다.
데이터 전송의 신뢰성을 보장할 수는 있지만, 매번 Connection을 연결해야 하기 때문에 3 way-handshake 시간 손실이 발생한다.
또한 패킷을 조금만 손실해도 재전송해야 한다.
UDP(User Datagram Protocol)은 TCP보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜이다.
이는 데이터를 순차적으로 송수신하는 것을 보장하지 않는다. 또한 3 way-handshake 과정이 없다.
따라서 음성을 전달하거나 영상을 스트리밍하는 등의 데이터의 신뢰성이 중요하지 않을 때 주로 사용한다.
UDP의 데이터 전송 방식