[꼼꼼한 개발자] 꼼코더
3. 모든 개발자를 위한 HTTP 웹 기본 지식 - [01 인터넷 네트워크] - TCP/ UDP 본문
개요
- 애플리케이션 계층에서 전달된 정보(payload)에 TCP 정보를 생성하여 포함시킨다.
- IP 패킷 정보가 가지고 있는 한계점(비신뢰성, 비연결성)을 TCP 정보를 통해 해결한다.
👨👩👧👦 프로토콜 4계층
- 채팅 프로그램이 Hello, world! 라는 메시지를 생성한다.
- 생성된 메시지를 SOCKET 라이브러리를 통해 OS 계층에 넘긴다.
- OS 계층의 TCP 계층에서 메세지 데이터(Hello, world!)를 포함해 TCP 정보를 생성한다.
- OS 계층의 IP 계층에서 TCP 정보를 포함해 IP 패킷을 생성한다.
IP 패킷: (IP 관련 정보 + (TCP 관련 정보 + (메시지 데이터))) - 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) : 요청 수락
- 클라이언트에서 먼저 SYN 메시지를 서버에게 접속을 허락해달라고 요청한다.
- 서버는 접속을 수락하고 ACK 메시지를 클라이언트 한테 보낼 때 서버도 접속을 허락해달라고 SYN 메시지와 함께 보낸다.
- 클라이언트가 접속을 수락하고 서버에서 ACK 메시지를 보낸다.
👉🏻 참고로 요즘 최적화가 잘 되서 마지막 ACK를 보낼 때 데이터도 전송한다. - 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
'HTTP' 카테고리의 다른 글
6. 모든 개발자를 위한 HTTP 웹 기본 지식 - [URI와 웹 브라우저 요청 흐름] - URI (0) | 2022.09.11 |
---|---|
5. 모든 개발자를 위한 HTTP 웹 기본 지식 - [01 인터넷 네트워크] - DNS (0) | 2022.09.08 |
4. 모든 개발자를 위한 HTTP 웹 기본 지식 - [01 인터넷 네트워크] - PORT (2) | 2022.09.08 |
2. 모든 개발자를 위한 HTTP 웹 기본 지식 - [01 인터넷 네트워크] - IP(인터넷 프로토콜) (0) | 2022.08.31 |
1. 모든 개발자를 위한 HTTP 웹 기본 지식 - [01 인터넷 네트워크] - 인터넷 통신 (0) | 2022.08.30 |