대망의 TCP와 UDP이다.. 이 책을 공부하기로 마음먹었던 가장 큰 내 걸림돌이기도 하다. 얼른 정리를 해보자.

4. TCP, UDP

앞서 설명한 2,3계층은 목적지를 정확히 찾아가기 위한 주소제공이 목적이지만 4계층에서 동작하는 프로토콜은 목적지 단말내에서 동작하는 어플리케이션 프로세스를 찾아가도록 하며 패킷 순서가 바뀌지 않도록 잘 조합하여 원래 데이터를 만들어 내는 역할을 한다.

4.1 4계층 프로토콜과 서비스 포트

TCP/IP 프로토콜 스택에서 4계층은 TCP와 UDP가 담당한다. 그리고 이 프로토콜에서 헤더에 들어있는 상위 프로토콜 지시자는 포트번호이다. 2,3계층에서의 상위 프로토콜 지시자는 출발지와 도착지를 구분해 사용하지 않고 한개만 사용하지만 4계층의 프로토콜 지시자인 포트 번호는 출발지포트와 목적지포트를 구분하여 처리한다.

포트는 다음과 같이 구분된다.

  • Well Known Port : 1023번 이하, HTTP 80, HTTPS 443, SMTP TCP 25 와 같은 잘 알려진 포트
  • Registered Port : 1024 ~ 49151, 다양한 어플리케이션에 할당된 또는 할당하는 포트
  • 동적, 사설, 임시 Port : 49152 ~ 65535

클라이언트의 13959포트에서 어떤 웹서버의 80번포트로 요청을 보냈다면, 응답측에서는 80에서 출발하여 13959번 포트로 전송한다.

4.2 TCP

TCP 프로토콜 (Transmission Control Protocol)은 개략적으로 다음과 같은 특징을 지닌다.

  • 세션을 안전하게 연결하고 데이터를 분할하여 잘 전송되었는지 확인한다.
  • 패킷에 번호를 부여하고 잘 전송되었는지 응답한다.
  • 전송크기를 고려해 통신한다
  • UDP와의 차이 : 흐름 제어, 오류 제어, 혼잡 제어 기능이 있다.

1) 패킷 순서, 응답 번호

TCP에서는 분할된 패킷을 잘 분할하고 수신측이 잘 조합하도록 패킷에 순서를 주고 응답 번호를 부여한다. 패킷에 순서를 부여하는 것을 시퀀스 번호, 응답 번호를 부여하는 것을 ACK 번호라고 부른다. 두 번호로 상호작용하여 순서가 바뀌거나 패킷의 손실여부를 파악할 수 있다.

위 순서도에 대해 하나씩 차근차근 알아가 보자.

  1. 3-Way Handshake (Init)

3-Way Handshaking 이란, TCP 프로토콜에서 통신전에 데이터를 안전하게 받을 준비가 되었는지 확인하는 방식이다. - 서버는 클라이언트의 접속을 받아들일 수 있도록 대기한다. - 클라이언트에서 먼저 SYN (J) 신호를 서버로 전달한다. - 서버는 이에대해 잘 받았다는 ACK(J+1) 번호와, 새로운 SYN(K) 신호를 같이 보낸다. - 클라이언트에서는 J에 대해 잘받았다는 ACK번호가 왔으므로, 패킷 재전송은 필요하지 않다고 판단한다. - 또, 서버에서 보낸 SYN(K) 신호에 대해 잘 받았다는 의미로 ACK(K+1)신호를 보낸다. - 위 과정이 끝나면 연결이 성공적으로 수행되었다고 판단하고 데이터 전송을 시작한다.

어떤 패킷이 새 연결시도이고, 기존 통신에 대한 응답인지 구분하기 위해서 헤더에 플래그라는 값을 넣어 통신한다. - SYN : 연결 시작 시 1로 표시 - ACK : - FIN : 연결 종료 시 1로 표시, 데이터 전송을 마친 후 정상 종료 시 - RST : 연결 종료 시 1로 표시, 강제 종료로 일방적으로 연결을 끊을 시 - URG : 긴급 데이터인 경우 1로 표시 - PSH : 서버 측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용프로그램에 즉시 전달할 것을 지시

  1. Data Transmission 실질적으로 데이터를 보내고 받는 과정이다.

  2. 4-Way Handshake (End)

2) 윈도우 사이즈

윈도우 사이즈는 한번에 보내는 패킷의 개수를 말한다. 네트워크 상태가 좋지 않으면