목차
전송계층 (Transport Layer)
End point 간 신뢰성 있고, 효율적인 데이터 전송을 담당하는 계층이다. 프로토콜(TCP, UDP)로 구성되어 흐름 제어, 혼잡 제어, 오류 제어 등을 담당한다. 순차 번호 기반의 오류 제어 방식을 사용한다.
전송계층이 없다면?
- 데이터의 순차 전송이 원활 x
- Flow (흐름 문제) : 송수신자 간의 데이터 처리 속도 차이
- Congestion (혼잡 문제) : 네트워크의 데이터 처리 속도
TCP (Transmission Control Protocol)
- 클라이언트와 서버가 연결된 상태에서 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
- 일반적이고 대중적인 방식
- 신뢰성이 높고 속도가 느림
- 연결 지향 : 상대가 데이터를 받았는지 확인하면서 통신하는 방식
- 데이터 순차 전송을 보장
- 패킷의 손실, 중복, 순서변경이 없음을 보장
- 흐름 제어, 혼잡 제어, 오류 감지
- Flow Control (흐름 제어): 송신 및 수신 속도를 일치시킴
- Congestion Control (혼잡 제어): 네트워크 혼잡시 데이터 전송 속도를 강제로 줄임
- Error Detection (오류 감지)
Segment : TCP 프로토콜의 PDU
* PDU : Protocol Data Unit 각 계층에서 헤더와 데이터를 합친 부분을 말한다. 계층마다 부르는 이름이 다르고, 3계층인 네트워크 계층 PDU는 패킷(Packet)이라고 부른다.
전송 계층에서는 세션 계층에서 전달된 데이터를 받아 실질적인 전송을 위해 일정 크기로 나눈다. 이렇게 나누어진 데이터에는 출발지 포트(보낸 이), 목적지 포트(받는 이), 순서 번호, 오류 검출 등이 헤더로 붙게 되는데 이것을 세그먼트라고 부른다. 세그먼트는 전송 계층의 TCP 프로토클이 응용 계층의 데이터 단위인 메시지를 받아 작은 조각으로 분할한 데이터 단위이다. 즉, TCP 프로토콜에 따라 분할된 데이터에 TCP 헤더가 붙어 캡슐화된 전송 계층의 패킷이 세그먼트이다. 이 세그먼트는 인터넷 계층으로 전송된다.
TCP 헤더
SYN : TCP가 Connection을 연결할 때 쓰는 플래그 비트
FIN : Connecion 연결 후 끊어낼 때 쓰는 플래그 비트
ACK : 데이터 전송을 받는 사람이 다시 전송할 때 제어하는 플래그 비트
TCP의 3 way-handshake (Connection 연결)
[STEP 1]
SYN 비트를 1로 설정해 패킷 송신
A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 되는 것이다.
[STEP 2]
SYN, ACK 비트를 1로 설정해 패킷 송신
B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.
[STEP 3]
ACK 비트를 1로 설정해 패킷 송신
A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 B서버 상태가 ESTABLISHED 이다.
TCP의 데이터 전송 방식
1. Client가 패킷 송신
2. Server에서 ACK 송신
3. ACK를 수신하지 못하면 재전송
TCP의 4 way-handshake (Connection close)
[STEP 1]
데이터를 전부 송신한 Client가 FIN 송신
클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.
[STEP 2]
Server가 ACK 송신, Server에서 남은 패킷 송신 (일정 시간 대기)
서버는 일단 확인메시지를 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태가 TIME_WAIT상태다.
[STEP 3]
Server가 FIN 송신
서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
[STEP 4]
Client가 ACK 송신
클라이언트는 확인했다는 메시지를 보낸다.
만약 Server에서 FIN을 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN패킷보다 늦게 도착하는 상황"이 발생한다면 어떻게 될까?
Client에서 세션을 종료시킨 후 뒤늦게 도착하는 패킷이 있다면 이 패킷은 Drop되고 데이터는 유실될 것이다.
이러한 현상에 대비하여 Client는 Server로부터 FIN을 수신하더라도 일정시간(디폴트 240초) 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거치게 되는데 이 과정을 "TIME_WAIT" 라고 한다.
TCP 상태도
TCP의 문제점
- 매번 Connection을 연결해서 시간 손실 발생 (3 way-handshake)
- 패킷을 조금만 손실해도 재전송
UDP (User Datagram Protocol)
- TCP보다 신뢰성이 낮지만 전송 속도가 빠른 프로토콜
- 신뢰성이나 정확성보다는 효율을 중시
- 비연결 지향: 상대가 데이터를 받았는지 확인하지 않고 일방적으로 통신하는 방식
- 데이터 순서를 보장 x
- Error Detection (오류 감지)만 있음
- 비교적 데이터의 신뢰성이 중요하지 않고 빠른 처리가 필요할 때 사용 (ex) 실시간 스트리밍)
User Datagram : UDP 프로토콜의 PDU
UDP Header
TCP Header처럼 복잡하지가 않다. TCP처럼 전송을 위해 포트 번호가 있고, 에러 검출을 위한 Checksum이 있다.
UDP의 데이터 전송 방식
1. Client가 패킷 송신
Connection이 없기 때문에 확인도 안하고 그저 전송하기 위해 열어두기만 한다.
UDP의 문제점
- 데이터의 신뢰성이 없다.
- 의미있는 서버를 구축하기위해서는 일일이 패킷을 관리해주어야 한다.
<출처 및 참고자료>
Network | 전송 계층 (TCP, UDP)
OSI_Model종단 간(End-To-End) 통신을 다루는 계층으로 종단 간 신뢰성 있고 효율적인 데이터를 전송한다.상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해준다.프로토콜(TCP, UDP)
velog.io
[ 네트워크 쉽게 이해하기 22편 ] TCP 3 Way-Handshake & 4 Way-Handshake
우선 TCP의 3-way Handshaking 에 대하여 알아보겠습니다. * TCP 3-way Handshake 란? TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 three-way handshake를 사용한다. TCP 3 Way Handshake..
mindnet.tistory.com
쉽게 이해하는 네트워크 17. TCP 프로토콜의 기능 및 특징 - 패킷 분할과 연결형 통신
TCP 프로토콜의 기능, 특징 - 세그먼트, 연결형 통신 TCP 프로토콜의 기능과 특징 전송 계층의 대표적인 프로토콜인 TCP는 신뢰할 수 있고 정확한 데이터를 전달하기 위해 연결형 통신을 사용하는
better-together.tistory.com
TCP의 헤더에는 어떤 정보들이 담겨있는걸까?
저번에 HTTP/3는 왜 UDP를 선택한 것일까? 포스팅을 진행하며 TCP에 대해 간단한 언급을 했었지만, 해당 포스팅에서는 기존의 HTTP에서 사용하던 TCP에 어떤 문제가 있었는지에 집중해서 이야기했었
evan-moon.github.io
https://en.wikipedia.org/wiki/TransmissionControlProtocol
'CS > Network' 카테고리의 다른 글
애플리케이션 레이어 (Application Layer) : UDP 기반의 DNS, 소켓 (Socket) (1) | 2023.08.24 |
---|---|
애플리케이션 레이어 (Application Layer) : HTTP 와 DNS (0) | 2023.06.27 |