3. TCP, UDP
앞서 보았던 IP 프로토콜의 한계점들을 해결해 주는 것이 바로 TCP 다.
1. 인터넷 프로토콜 스택의 4계층
2. 프로토콜 계층
채팅 프로그램에서 Hello, world! 라는 메시지를 보내는 상황을 가정한다.
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 이 포함되어 나간다.
- EtheretFrame: LAN 카드의 MAC 주소 등 물리적 정보가 포함됨
웹/HTTP 개발 공부에서는 IP 프로토콜까지만 깊이있게 공부하면 된다.
3. IP 패킷 정보
4. TCP/IP 패킷 정보
TCP 정보가 추가되면서 IP의 한계점이 해결되었다.
- TCP 정보: 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등..
5. TCP(전송 제어 프로토콜) 특징
1) 연결지향 - TCP 3 way handshake(가상 연결)
- 먼저 연결을 한 다음 메시지를 보냄
- 여기서 말하는 연결은 물리적인 연결이 아닌, 논리적인 연결이다!
2) 데이터 전달 보증
- 패킷 손실이 되어 서버가 메시지를 받지 못한 경우, 클라이언트가 알 수 있음
3) 순서 보장
4) 신뢰할 수 있는 프로토콜
4) 현재는 대부분 TCP 사용
5-1. TCP 3 way handshake
- SYN: 접속 요청
- ACK: 요청 수락
1) 클라이언트가 서버에게 접속을 요청하는 SYN을 보냄
2) 서버가 SYN을 받았으면, 서버에서 클라이언트로 접속을 요청하는 SYN과 함께 ACK를 보냄
3) 클라이언트가 SYN을 받았으면, 서버로 ACK를 보냄
→ 3 way handshake 후, 클라이언트와 서버는 서로 연결되었다는 것을 인식한다!
4) 클라이언트가 서버로 데이터를 전송한다. (요즘은 3번 단계에서 ACK와 함께 데이터를 보내기도 함)
5-2. 데이터 전달 보증
클라이언트가 데이터를 전송하고 서버가 데이터를 받았으면 클라이언트로 응답을 해준다.
5-3. 순서 보장
클라이언트에서 패킷을 보낸 순서대로 서버로 오지 않으면 서버가 클라이언트에 다시 순서대로 패킷이 전송되도록 요청한다.
6. UDP(사용자 데이터그램 프로토콜) 특징
- 3 way handshake, 데이터 전달 보증X, 순서 보장X
- 단순하고 빠름
- IP와 거의 유사(PORT, checksum 정도만 추가됨)
- 애플리케이션에서 추가 작업 필요
1-3. TCP, UDP 질문 정리
Q. TCP의 3 way-handshake 에서 SYN/ACK를 주고받을 때, TCP/IP 패킷을 주고 받는 것인가?
TCP/IP 패킷은 헤더 부분과 실제 데이터가 전송되는 데이터 부분으로 나눌 수 있다.
3 way-handshake 단계에서 TCP/IP 패킷이 전송되지만 헤더 부분만 전송된다고 이해하면 된다. 이 헤더에 SYN, ACK 등을 포함해서 보내는 것이다.
직접 데이터를 보내는 3/4단계에서는 헤더 + 데이터 부분이 함께 전송된다.
[출처] https://www.inflearn.com/questions/107934
Q. 웹 통신이 이루어지는 TCP/IP 4계층은 OSI 7계층과 별개의 것인가?
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 특징 중 애플리케이션에서 추가 작업이 필요하다 것의 의미는?
웹의 통신 규격인 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에 대한 처리를 담당하므로 웹 개발자가 이를 구분하여 작업할 필요는 없다.
'Spring > 모든 개발자를 위한 HTTP 웹 기본 지식' 카테고리의 다른 글
[모든 개발자를 위한 HTTP 웹 기본 지식] 03. HTTP 기본 - 모든 것이 HTTP, 클라이언트 서버 구조 (0) | 2022.05.26 |
---|---|
[모든 개발자를 위한 HTTP 웹 기본 지식] 02. URI와 웹 브라우저 요청 흐름 - URI, 웹 브라우저 요청 흐름 (0) | 2022.05.26 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - PORT, DNS (0) | 2022.05.26 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - 인터넷 통신, IP(인터넷 프로토콜) (0) | 2022.05.25 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 00. 소개 - 소개영상 (0) | 2022.05.25 |