일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래밍
- 디지털
- 공채
- 스터디
- 스프링
- Public
- IT
- 운영체제
- OS
- 이펙티브 자바
- 세마포어
- 메모리
- github
- 자바
- spring
- 우리카드
- 컴퓨터공학
- 깃허브
- CS
- 정보처리기사
- 깃
- 뮤텍스
- package-private
- 컴퓨터과학
- 개발
- 신입사원
- java
- 신입
- Effective Java
- 알고리즘
Archives
- Today
- Total
주니어 개발자 성장기
(22.10.04) HTTP(2) - TCP, UDP 본문
TCP의 역할
IP 프로토콜에서 발생하는 문제들(비연결성, 비신뢰성, 프로그램 구분)을 해결할 수 있는 프로토콜이다.
먼저 인터넷 프로토콜 스택을 확인해보자.
다음과 같이 4계층으로 구성되어 있으며, IP 계층 위에 TCP, UDP 전송 계층이 존재하고
그 위에 애플리케이션 계층 - HTTP, FTP 가 존재한다.
위의 그림만 보면 4계층이 매우 추상적으로 다가온다.
좀 더 상세하게, 한 PC 내에서 각 계층이 어떤식으로 나타나는지 살펴보자
순서는 다음과 같다.
1. 어플리케이션 프로그램이 전송 데이터를 생성
2. SOCKET 라이브러리를 통해 OS 계층에 데이터를 전달
3. OS 계층에서 전송 데이터를 포함한 TCP 정보 생성
4. TCP 정보 + 전송 데이터를 포함한 IP 패킷을 생성
5. LAN 카드를 통해서 인터넷으로 전달 -> 이 때, 패킷에 Ethernet frame이 포함되어 전송된다.
이때 TCP 정보는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등을 담고있다.
TCP 특징
전송 제어 프로토콜(Transmission Control Protocol)로서 다음과 같은 특징이 있다.
- 연결 지향 - TCP 3 way handshake (가상 연결)
- 데이터 전달 보증
- 순서 보장
더 많은 기능을 갖고 있긴 하지만 웹 어플리케이션을 구축하는데 이해하는데는 이정도면 충분하다.
TCP 3 way handshake (가상 연결)
연결 과정은 다음과 같다.
- Client -> Server
SYN 메세지를 보낸다. - Server -> Client
SYN + ACK 전송 - Client -> Server
ACK 전송
(요즘에는 최적화되어서 여기서 바로 데이터 + ACK를 전송할 수 있다.) - 서로 데이터 전송
*참고
SYN: 접속 요청
ACK: 요청 수락
*TCP 연결은 Client 와 Server 사이의 Node들이 물리적으로 연결되어 있는지는 관심이 없고 논리적으로만 연결되어 있다고 가정하는 것이다.
데이터 전달 보증
- Client -> Server
데이터 전송 - Server -> Client
데이터 잘 전달 되었는지 응답
순서 보장
- Client -> Server
패킷1, 패킷2, 패킷3 순서로 전송
But, Server에 패킷1, 패킷3, 패킷2 순서로 도착 (순서 꼬임) - Server -> Client
패킷 2번(순서가 잘못된 데이터)부터 다시 보내라고 Client에게 전달
UDP 특징
사용자 데이터그램 프로토콜(User Datagram Protocol)
- 기능이 거의 없어서 하얀 도화지에 비유한다.
- TCP 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
- 정리
- IP와 거의 같다. + PORT + 체크섬 정도만 추가된다.
- 애플리케이션에서 따로 추가 작업이 필요하다.
- TCP는 데이터의 양도 많고 3 way handshake 등으로 속도가 느리므로
더 성능 최적화가 필요할 때 사용한다. - 기존에는 데이터가 깨져도 상관 없는 영상 스트리밍 등의 목적으로만 사용되고 나머지는 전부 TCP프로토콜을 이용하는 것이 정석이었다.
- 최근에는 UDP가 각광을 받고 있다. (HTTP 3.0 에서도 TCP가 아닌 UDP를 사용한다.)
'Web' 카테고리의 다른 글
(22.11.14) HTTP(6) - 헤더(2) (0) | 2022.11.14 |
---|---|
(22.11.14) HTTP(6) - 헤더(1) (0) | 2022.11.14 |
(22.10.29)HTTP(5) - 상태코드 (0) | 2022.10.29 |
(22.10.26) HTTP(3) - 메서드 활용 (0) | 2022.10.27 |
(22.10.04) HTTP(1) - IP (1) | 2022.10.04 |