전송 계층 (Transport Layer)
2022.10.21 - [CS/네트워크] - [네트워크] OSI 7계층, TCP/IP 4계층
[네트워크] OSI 7계층
OSI 7계층이란? OSI(Open System Interconnection)는 국제표준화기구(ISO)에서 개발한 네트워크 표준 모델로 세계적으로 사용되고 있습니다. 네트워크 프로토콜과 통신이 7계층으로 구성되어 있어 OSI 7계층
c4u-rdav.tistory.com
전송 계층은 IP에 의해 전달되는 패킷의 오류 검사, 재전송 등의 제어를 담당하는 계층이고, TCP와 UDP는 전송 계층에서 사용되는 프로토콜입니다. 이 두 프로토콜은 IP를 기반으로 구현되어 있지만 서로 다른 특징을 갖고 있습니다.
TCP
TCP의 개념
TCP는 Transmission Control Protocol의 약어로 연결 지향적이라는 특징을 가집니다. 연결 지향 프로토콜은 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 프로토콜을 의미합니다. 즉, 패킷 전송을 위한 논리적 경로를 배정합니다. 이러한 연결 지향 프로토콜은 신뢰성을 보장해주고, 흐름 제어를 하지만, 데이터를 송신할 때마다 연결하기 위한 절차(3-way handshaking, 4-way handshaking)가 필요하므로 전송속도가 느리다는 단점이 있습니다.
TCP의 특징
- 연결 지향 프로토콜
- 3-way handshaking으로 연결 설정, 4-way handshaking으로 연결 해제
- 높은 신뢰성 보장
- 흐름 제어(수신자 버퍼 오버플로우 방지), 혼잡 제어(패킷 수 과도하게 증가하는 현상 방지)
- 데이터의 전송 순서 보장
- 전이중(Full-duplex, 전송이 양방향으로 동시에 일어날 수 있음), 점대점 (Point to point, 각 연결이 정확히 두 개의 종단점을 갖고 있음) 방식
- UDP보다 속도가 느림
- 일반적인 애플리케이션이 데이터를 송수신할 때 사용
Handshake
1) 포트 상태 정보
- CLOSED: 포트가 닫힌 상태
- LISTEN: 포트가 열려있고, 연결 요청 대기
- SYN_RCV: SYN 요청받고, 상대방 응답 대기
- ESTABLISHED: 포트 연결 상태
- FIN_WAIT1: 첫 FIN이 보내진 상태
- FIN_WAIT2: 첫 FIN을 받고 ACK을 받은 상태
- CLOSE_WAIT: 첫 FIN을 받고 ACK를 보낸 상태
- TIME_WAIT: 두 번째 FIN을 받고 ACK를 보낸 상태
- LAST_ACK: 두 번째 FIN을 보내고 ACK를 대기하는 상태
2) 플래그 정보
TCP 헤더에 존재하는 Flag Bit
- SYN(Synchronize Sequence Number): 연결 설정 플래그, sequence number를 랜덤으로 설정하여 세션을 연결하는 데 사용
- ACK(Acknowledgement): 응답 확인 플래그, 패킷을 받았다는 것을 의미
- FIN(Finished): 연결 해제 플래그, 세션 연결 종료할 때 사용
3-way handshake
TCP에서 연결을 설정하는 단계입니다.
1) 클라이언트에서 서버로 접속 요청의 SYN 패킷 전송. 이때 전송되는 패킷의 일련번호는 x라고 가정.
2) 서버에서 LISTEN상태에 클라이언트로부터 SYN 패킷을 받고, SYN_RCV로 상태 변경.
3) 클라이언트로부터 요청을 정상적으로 받았다는 ACK 패킷과, 클라이언트도 포트를 열어달라는 SYN 패킷 전송
이때 SYN 패킷의 일련번호는 y라고 가정하고, ACK 패킷의 일련번호는 x+1이 됨.
4) 클라이언트에서 서버로부터 SYN 패킷과, ACK 패킷을 받고, ESTABLISHED로 상태 변경.
5) 서버로부터 요청을 정상적으로 받았다는 ACK 패킷 전송. 이때 ACK 패킷의 일련번호는 y+1이 됨.
6) 서버는 클라이언트로부터 ACK 패킷을 받아 ESTABLISHED로 상태 변경.
위와 같은 통신이 이루어지고, 서로의 포트 상태가 ESTABLISHED가 되어 연결이 됩니다.
4-way handshake
TCP에서 연결을 해제하는 단계입니다.
1) 클라이언트에서 서버로 연결 종료 요청의 FIN 패킷 전송하고, FIN_WAIT1로 상태 변경.
2) 서버는 클라이언트로 부터 FIN 패킷을 받고, 응답으로 ACK 패킷을 전송. 이때 CLOSE_WAIT로 상태 변경.
3) 클라이언트는 서버로부터 ACK 패킷을 받고, FIN_WAIT2로 상태 변경.
4) 서버는 연결을 종료할 준비가 되면 클라이언트로 FIN 패킷 전송하고, LAST_ACK로 상태 변경.
5) 클라이언트는 서버로 부터 FIN 패킷을 받고, 응답으로 ACK 패킷을 전송. 이때 TIME_WAIT으로 상태 변경.
6) 서버는 클라이언트로부터 ACK 패킷을 받고, CLOSED로 상태 변경. 이후 클라이언트는 TIME_WAIT 상태로 어느 정도의 시간을 대기한 후 CLOSED로 상태 변경(혹시 모를 패킷 손실을 대비해 존재).
위와 같은 통신이 이루어지고, 서로의 포트 상태가 CLOSED가 되어 연결이 해제됩니다.
TIME_WAIT 상태에서 CLOSED 상태가 되기까지 일정 시간을 기다리는 이유 - 혹시 모를 패킷 손실을 대비! 만약 FIN 패킷을 받고, 서버로 ACK 패킷을 보냈을 때 서버가 ACK 패킷을 잘 받았다면 CLOSED 상태로 변경된 것. 하지만 ACK 패킷을 받지 못해 클라이언트로 다시 FIN 패킷을 보낼 수 있으니 이를 대비하여 TIME_WAIT 상태에서 일정 시간 대기한다.
UDP
UDP의 개념
UDP는 User Datagram Protocol의 약어로 데이터를 데이터그램 단위로 처리하는 프로토콜을 의미합니다. TCP와 달리 데이터를 주고받을 때 연결 절차를 거치지 않고 데이터를 일방적으로 보낸다는 의미에서 비연결 지향적이라는 특징을 갖고 있습니다. 따라서 TCP보다는 속도가 빠르지만 신뢰성이 보장되지는 않습니다. 전송되는 패킷은 각각 다른 경로로 전송이 되어 독립적으로 처리가 되고, 이런 이유로 데이터의 순서를 보장하지 않으며 최악의 경우 패킷이 손실될 수도 있습니다. TCP와 달리 패킷이 손실되어도 패킷을 재전송하지 않습니다.
UDP의 특징
- 비연결 지향 프로토콜
- 데이터를 주고받을 때 따로 신호 절차가 없음
- 신뢰성이 보장되지 않음
- TCP보다 속도가 빠름
- 패킷 오버헤드가 적어 네트워크 부하 감소
- UDP 헤더의 CheckSum 필드로 최소한의 오류만 검출
- 패킷 관리 필요
- 음성이나 동영상 데이터를 송수신할 때 사용
TCP vs UDP
TCP | UDP | |
연결 방식 | 연결 지향 | 비연결 지향 |
패킷 교환 방식 | 가상 회선 | 데이터그램 |
전송 순서 | 보장 | 보장하지 않음 |
수신 여부 확인 | 확인 | 확인하지 않음 |
통신 방식 | 1:1 | 1:N, N:N |
신뢰성 | 높음 | 낮음 |
속도 | 느림 | 빠름 |
'CS > 네트워크' 카테고리의 다른 글
[네트워크] HTTP와 HTTPS (0) | 2022.11.27 |
---|---|
[네트워크] 라우팅(Routing) (0) | 2022.11.09 |
[네트워크] OSI 7계층, TCP/IP 4계층 (0) | 2022.10.21 |
[네트워크] 네트워크 토폴로지(Network Topology) (0) | 2022.10.19 |