[꼼꼼한 개발자] 꼼코더

3. 모든 개발자를 위한 HTTP 웹 기본 지식 - [01 인터넷 네트워크] - TCP/ UDP 본문

HTTP

3. 모든 개발자를 위한 HTTP 웹 기본 지식 - [01 인터넷 네트워크] - TCP/ UDP

꼼코더 2022. 9. 2. 09:08
반응형

개요

  • 애플리케이션 계층에서 전달된 정보(payload)에 TCP 정보를 생성하여 포함시킨다.
  • IP 패킷 정보가 가지고 있는 한계점(비신뢰성, 비연결성)을 TCP 정보를 통해 해결한다.

👨‍👩‍👧‍👦 프로토콜 4계층

  1. 채팅 프로그램이 Hello, world! 라는 메시지를 생성한다.
  2. 생성된 메시지를 SOCKET 라이브러리를 통해 OS 계층에 넘긴다.
  3. OS 계층의 TCP 계층에서 메세지 데이터(Hello, world!)를 포함해 TCP 정보를 생성한다.
  4. OS 계층의 IP 계층에서 TCP 정보를 포함해 IP 패킷을 생성한다.
        IP 패킷: (IP 관련 정보 + (TCP 관련 정보 + (메시지 데이터)))
  5. IP 패킷이 LAN 카드를 통해 나갈 때 Ethernet Frame 이 포함되어 나간다.
    Etheret Frame: LAN 카드의 MAC 주소 등 물리적 정보가 포함된다.

🕵🏻‍♂️ TCP/IP 패킷 정보

  • IP 패킷 정보                                                         ∙ TCP/IP 패킷 정보

TCP 정보가 추가되면서 IP의 한계점이 해결되었다.

  • TCP 정보: 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등..

 

👀 TCP 특징(5가지)

전송 제어 프로토콜(Transmission Control Protocol)

1️⃣ 번째 특징 : TCP 3 way handshake(가상 연결)

  • SYN(synchronize) : 접속 요청
  • ACK(acknowledge) : 요청 수락
  1. 클라이언트에서 먼저 SYN 메시지를 서버에게 접속을 허락해달라고 요청한다.
  2. 서버는 접속을 수락하고 ACK 메시지를 클라이언트 한테 보낼 때 서버도 접속을 허락해달라고 SYN 메시지와 함께 보낸다.
  3. 클라이언트가 접속을 수락하고 서버에서 ACK 메시지를 보낸다.
    👉🏻 참고로 요즘 최적화가 잘 되서 마지막 ACK를 보낼 때 데이터도 전송한다.
  4. 3단계를 거쳐 연결이 되고나면 데이터를 전송한다.
  • 위에 TCP 연결이 되었다고 연결이 된 게 아니라 개념적으로 연결되어 있을 뿐이다.
  • 인터넷 망에 있는 수 많은 서버들이 연결되어 있는 건지 잘 모른다.

2️⃣ 번째 특징 : 데이터 전달 보증

  • 메시지에 TCP 프로토콜이 포함되어 있으면 메시지 전송 후 서버에서 잘 받았다는 신호를 보낸다.
  • 따라서 클라이언트가 메시지를 잘 전달 됐는지 안됐는지 이해를 할 수 있다.

3️⃣ 번째 특징 : 순서 보장

  • 예시로 크기가 1500byte가 넘어가는 메시지를 보내는 경우 패킷을 1번, 2번, 3번 순서로 나눠서 보냈다.
  • 순서대로 보낼 수 있는 이유는 TCP 정보 안에는 전송 제어, 순서, 검증 정보가 있어서 TCP 프로토콜이 신뢰할 수 있는 프로토콜이라고 한다.
  • 이 때 서버에 1번, 3번, 2번 순서로 도착시 서버에서는 내부적으로 최적화하는 로직에 따라서 2번부터 다시 보내라고 클라이언트에 보낸다. 이러하여 순서가 보장이 된다.

4️⃣ 번째 특징 :  연결 지향 프로토콜

 

5️⃣ 번째 특징 : 신뢰할 수 있는 프로토콜

     (현재 대부분이 TCP를 사용한다.)


👀 UDP 특징

사용자 데이터그램 프로토콜(User Datagram Protocol)
  • TCP와 비교하여 연결지향도 아니고, 데이터 전달, 패킷 순서도 보장되지 않는다.
  • TCP는 데이터 양도 많고 3 way hands 때문에 전송 속도가 느린 반면에 UDP는 기능이 거의 없기 때문에 상대적으로 전송 속도가 빠르다.
  • 애플리케이션에서 추가적인 작업이 필요하다.
  • 클라이언트 PC에 IP가 한 개만 할당되어 있기 때문에 게임용, 음악용 등을 구분하기위해 PORT를 사용하고 메시지에 대해서 맞는지 검증해 주는 체크섬 특징이 있다.
    • 체크섬(checksum): 중복 검사의 한 형태로 송신된 자료의 무결성을 보호하는 방법으로 네트워크를 통해 전달되는 값이 위/변조 되는 경우를 대비해 체크섬 값을 같이 보내 무결성을 보호한다. (더보기)IP와 비슷해 보이지만, PORT정보는 포함되어있고, 체크섬 정도는 추가되어 있다.

 


🙋🏻‍♂️ Q&A

Q. TCP의 3 way-handshake 에서 SYN/ACK를 주고받을 때, TCP/IP 패킷을 주고 받는 것인가?

 

A. TCP/IP 패킷은 헤더 부분과 실제 데이터가 전송되는 데이터 부분으로 나눌 수 있다.

3 way-handshake 단계에서 TCP/IP 패킷이 전송되지만 헤더 부분만 전송된다고 이해하면 된다. 이 헤더에 SYN, ACK 등을 포함해서 보내는 것이다.

직접 데이터를 보내는 3/4단계에서는 헤더 + 데이터 부분이 함께 전송된다.

 

[출처] https://www.inflearn.com/questions/107934


Q. 웹 통신이 이루어지는 TCP/IP 4계층은 OSI 7계층과 별개의 것인가?

 

A. TCP/IP는 현재의 인터넷에서 컴퓨터들이 서로 정보를 주고받는데 쓰이는 통신규약으로 웹 통신에 있어서 TCP/IP 4계층을 참고하면된다.

[참고] https://www.inflearn.com/questions/134168

[출처] https://goitgo.tistory.com/25


Q. 3way-handshake를 통해 클라이언트 서버 간 논리적 연결의 의미는?

 

A. 물리적 연결은 PC와 PC를 직접 선으로 연결한 경우를 말한다.

반면, 논리적 연결은 클라이언트, 서버 사이에 무수히 많은 노드들을 거쳐 연결된 것이다.

3-way-handshake를 통한 연결이 직접 연결이 아닌 이유는 서버와 클라이언트는 서로 SYN, ACK를 통해 서로의 존재를 확인했음에도, 중간 노드의 결함이 발생할 경우 이 연결은 유효하지 않기 때문이다.


Q. UDP 특징 중 애플리케이션에서 추가 작업이 필요하다 것의 의미는?

 

A. 웹의 통신 규격인 HTTP는 여러가지 버전(0.9, 1.1, 2, 3)이 있다. HTTP/1.1 과 HTTP/2 는 TCP를 기반으로 작동하고 HTTP/3 은 UDP를 기반의 QUIC를 사용한 기술이 도입됐다. 이중 대부분을 차지하는 HTTP/1.1과 달리 HTTP/3은 아직 보편화된 단계가 아니고 구글의 크롬 브라우저에서만 도입되고 사용되는 단계다.

 

하나의 웹 사이트 페이지는 여러 개의 파일(이미지, css 파일 등)의 모음이다. 따라서 한 페이지를 요청할 때 파생되는 수백개의 요청을 효율적으로 처리하는 것이 HTTP/2, HTTP/3의 주요 목표다. 하나의 사이트를 불러오기 위해 브라우저는 TCP, UDP 등의 모든 통신을 동시에 활용한다. (서버가 UDP를 지원한다는 전제하에)

 

UDP는 3-way-handshake 과정이나 데이터 순서 보장을 하지 않아 클라이언트가 이를 알아서 해결해야 한다. 즉, 데이터 순서를 보장하지 않는 문제를 해결하기 위해 클라이언트에서는 추가적으로 작업이 필요하게 된다. 웹 개발에서 애플리케이션은 브라우저를 말하고 브라우저(클라이언트)가 TCP, UDP에 대한 처리를 담당하므로 웹 개발자가 이를 구분하여 작업할 필요는 없다.

[출처] https://www.inflearn.com/questions/336522

 

 

 

참고 : https://hseungyeon.tistory.com

 

위 자료는 김영한님의 ‘모든 개발자를 위한 HTTP 웹 기본 지식’ 강의를 참고하여 작성하였습니다.
https://www.inflearn.com/course/http-웹-네트워크/dashboard
Comments