[IT 엔지니어를 위한 네트워크 입문] 을 읽고 작성한 글입니다.
3.4 TCP와 UDP
4계층에서 동작하는 프로토콜은 만들어진 목적이 2, 3계층 프로토콜과는 조금 다르다. 통신해야 할 목적지 프로세스를 정확히 찾아가고 패킷 순서가 바뀌지 않도록 잘 조합해 원래 데이터를 잘 만들어내기 위한 역할을 한다.
3.4.1 4계층 프로토콜과 서비스 포트
TCP/IP 프로토콜 스택에서 4계층은 TCP와 UDP가 담당한다. 4계층의 목적은 목적지를 찾아가는 주소가 아니라 애플리케이션에서 사용하는 프로세스를 정확히 찾아가고 데이터를 분할한 패킷을 잘 쪼개 보내고 잘 조립하는 것이다.
- 패킷을 분할하고 조합하기 위해 TCP 프로토콜에서는 시퀀스 번호와 ACK 번호를 사용한다.
- TCP/IP 프로토콜 스택에서 4계층의 상위 프로토콜 지시자는 포트 번호이다.
- HTTP TCP 80, HTTPS TCP 443과 같이 잘 알려진 포트를 Well Known 포트라고 한다.
3.4.2 TCP
정보유실 없는 통신을 보장하기 위해 세션을 안전하게 연결하고 데이터를 분할해 분할된 패킷이 잘 전송되었는지 확인하는 기능이 있다.
- 패킷에 번호(Sequence Number)를 부여하고 잘 전송되었는지에 대해 응답(Acknowledge Number)한다.
- 또한, 한꺼번에 얼마나 보내야 수신자가 잘 받아 처리할 수 있는지 전송 크기(Window Size)까지 고려해 통신
3.4.2.1 패킷 순서 응답 전송
- 분할된 패킷을 잘 분할하고 수신 측이 잘 조합하도록 패킷에 순서를 주고 응답 번호를 부여
- 패킷에 순서를 부여하는 것을 시퀀스 번호, 응답 번호를 Ack 번호라고 부른다.
- 이 번호를 통해 순서가 바뀌거나 손실을 알 수 있다.
- 위 그림에선 송신 측이 1번 패킷을 보냈는데 수신 측이 패킷을 잘 받았으니 다음엔 2번을 달라는 표시로 Ack 번호 2를 준다.
위 그림을 설명하면
- 출발지에서 시퀀스 번호를 0으로 전송 (SEQ = 0)
- 수신 측에서 0번 패킷을 잘 받았다는 의미로 ACK 1 전송. 이때 수신 측에서는 자신이 처음 보내는 패킷이므로 SEQ 0을 적어 전송
- 이 패킷을 받은 송신 측에서는 수신에서 ACK 1을 왔으므로 SEQ 1을 부여해 전송
3.4.2.1 윈도 사이즈와 슬라이딩 윈도
가능하면 한번에 많은 패킷을 보내는 것이 효율적이지만 네트워크 상태가 안좋으면 유실 가능성이 커지므로 적절한 송신량을 정해야 하고 한 번에 데이터를 받을 수 있는 데이터 크기를 윈도 사이즈라고 한다.
이 윈도 사이즈를 조절하는 것을 슬라이딩 윈도라고 한다.
TCP는 데이터에 유실이 발생하면 윈도 사이즈를 절반으로 떨어뜨리고 정상적인 통신이 되는 경우, 서서히 하나씩 늘린다.
3.4.2.3 3방향 핸드셰이크
통신 전, 데이터를 안전하게 보내고 받을 수 있는지 미리 확인하는 작업을 거친다. 패킷 네트워크에서는 동시에 많은 상대방과 통신하므로 정확한 통신을 위해서는 통신 전, 각 통신에 필요한 리소스를 많이 확보하는 작업이 중요하다. TCP에서는 3번의 패킷을 주고받으면서 통신을 서로 준비하므로 3방향 핸드셰이크라고 부른다.
상태 정보를 부르는 이름이 다르다.
- 서버에서는 서비스를 제공하기 위해 클라이언트의 접속을 받아들일 수 있는 LISTEN 상태로 대기한다.
- 클라이언트에서 통신을 시도할 때 SYN 패킷을 보내는데 클라이언트에서는 이 상태를 SYN-SENT라고 부른다.
- 클라이언트의 SYN을 받은 서버는 SYN-RECEIVE 상태로 변경되고 SYN, ACK로 응답한다.
- 이 응답을 받은 클라이언트는 ESTABLISHED 상태로 변경된다.
- ESTABLISHED 상태는 서버와 클라이언트 간의 연결이 성공적으로 완료되었음을 나타낸다.
3방향 핸드셰이크 과정이 생기다보니 기존 통신과 새로운 통신을 구분해야 한다.
이때 플래그(Flag)라는 값이 사용된다. 총 6가지가 있고 통신의 성질을 나타낸다.
- SYN
- 연결 시작 용도. 연결이 시작될 때 SYN 플래그에 1로 표기
- ACK
- ACK 번호가 유효할 경우 1로 표시
- FIN
- 연결 종료 시 1로 표시. 데이터 전송을 마친 후 정상적으로 양방향 종료 시 사용
- RST
- 연결 종료 시 1로 표기. 연결 강제 종료를 위해 연결을 일방적으로 끊을 때 사용
- URG
- 긴급 데이터인 경우 1로 표시
- PSH
- 서버 측에 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 즉시 전달할 것을 지시할 때 사용
3.4.3 UDP
UDP는 4계층 프로토콜이 가져야 할 특징이 거의 없다. 4계층에서는 패킷 번호를 부여하고 수신된 데이터에 대해 응답하는 작업, 유실 이있으면 시퀀스 번호와 AKC 번호를 비교하며 재전송하는 기능 등 이러한 특징들은 TCP만 해당되며 UDP에는 이런 기능이 전혀 없다.
UDP는 음성 데이터나 실시간 스트리밍과 같이 시간에 민간함 프로토콜이나 애플리케이션을 사용하는 경우나 사내 방송이나 증권 시세 데이터 전송에 사용되는 멀티캐스트처럼 단방향으로 다수의 단말과 통신해 응답을 받기 어려운 환경에서 주로 사용한다.
UDP는 TCP와 달리 사전에 연결을 확립하는 절차가 없다. 그 대신 UDP에서 첫 데이터는 리소스 확보를 위해 인터럽트(Interrupt)를 거는 용도로 사용되고 유실된다. 그래서 UDP 프로토콜은 사용하는 애플리케이션이 대부분 이런 상황을 인지하고 동작하거나 연결 확립은 TCP 프로토콜을 사용하고 애플리케이션끼리 모든 준비를 마친 후 실제 데이터만 UDP를 이용하는 경우가 대부분이다.
'Network > 네트워크' 카테고리의 다른 글
IP주소, 서브네팅, 공인 IP, 사설 IP (1) | 2025.05.07 |
---|---|
유니캐스트, 멀티캐스트, 브로드캐스트, 애니캐스트, MAC 주소 (1) | 2025.05.04 |
네트워크 연결과 구성 요소 (0) | 2025.05.01 |
네트워크 구성도, OSI 7 Layer (1) | 2025.04.30 |
SSH vs SSL, STelnet vs Telnets (0) | 2025.04.08 |