728x90
🤔 IP
- Internet Protocol 의 약자
- IP는 클라이언트와 서버 간의 원활한 통신을 위한 규칙이다
- 클라이언트와 서버가 통신하기 위해 IP 주소를 컴퓨터에 부여한다
- 이후 지정한 IP 주소에 패킷(Packet)이라는 통신 단위로 데이터를 전달한다
- IP 패킷에는 출발지 IP, 목적지 IP와 같은 정보가 포함되어 있어, 전송 데이터를 무사히 목적지까지 보낸다
- 클라이언트에서 전송한 데이터가 무사히 서버에 전달되면, 서버도 IP 패킷을 이용해 클라이언트에 응답한다
IP의 한계
1) 비연결성
- 클라이언트는 서버의 상태를 파악할 수 없다
- 따라서 클라이언트는 패킷을 받을 대상이 없거나, 서버가 서비스 불능 상태여도 패킷을 전송한다
2) 비신뢰성
- 전달하는 데이터의 용량이 큰 경우, 이를 패킷 단위로 나눠 전송하게 되는데 해당 패킷들은 전달 과정에서 각각 다른 노드를 통해 전달될 수 있다
- 위와 같은 전송 과정에서 중간에 패킷이 사라질 수도 있고, 서버가 전달받는 패킷의 순서를 보장할 수 없다
🤔 TCP / UDP
- IP는 OSI 7계층에서는 네트워크 계층에 위치하고, TCP/IP 4계층에서는 인터넷 계층에 위치하고 있다
- OSI 7계층의 네트워크 계층의 상위 계층으로 전송 계층이 있다
- 전송 계층에 TCP와 UDP가 존재한다
- 전송 계층(Layer 4)은 송신자와 수신자를 연결하는 통신 서비스를 제공하고 IP에 의해 전달되는 패킷의 오류를 검사하며 재전송 요구 제어 등의 데이터의 전달을 담당한다
- 따라서 IP의 한계는 전송 계층의 TCP와 UDP를 통해 보완할 수 있다!
TCP
- TCP는 전송 제어 프로토콜(Transmission Control Protocol)이다
- TCP 프로토콜을 사용하는 경우, 네트워크에서 데이터를 송수신할 수 있도록 IP 패킷을 사용하기 전에 TCP 데이터를 소켓에 담는다
- 여기서 소켓(Socket)은 네트워크 환경에 연결할 수 있게 만들어진 연결부이다
- 데이터는 TCP 데이터가 담긴 소켓(TCP 세그먼트) 에 먼저 담기고, 그 데이터를 IP 패킷에 담아 LAN 카드와 같은 물리적 계층을 지나기 위해 이더넷 프레임워크에 포함하여 서버로 전송한다
- TCP 세그먼트에는 IP 패킷의 출발지 IP와 목적지 IP 정보를 보완할 수 있는 출발지 PORT, 목적지 PORT, 전송 제어, 순서 등의 정보를 포함하고 있다
- 위의 정보가 IP 패킷과 함께 전송되기 때문에 IP의 한계였던 데이터 전달과 순서를 보장한다
- 또한 TCP는 TCP 3way Handshake를 통해 통신하기 때문에 연결 지향적이고 신뢰성 있는 프로토콜이다
💡 TCP는 연결을 수립할 때는 3way-Handshake, 연결을 종료할 때는 4way-HandShake를 사용한다
TCP 3 way Handshake
연결 순서
- 클라이언트는 서버에 접속을 요청하는 SYN(Synchronize) 패킷을 보낸다
- 서버는 SYN 패킷을 받고, 클라이언트에게 접속 요청을 수락한다는 ACK(Acknowledgement)와 SYN 가 설정된 패킷을 발송한다
- 클라이언트가 서버에게 ACK 요청을 보내면 이후 클라이언트와 서버 간의 연결이 성립되어 데이터를 주고받는다
장점
- 위의 과정을 통해 클라이언트와 서버 간에 연결을 위한 응답을 주고받기 때문에 IP의 한계인 비연결성을 보완할 수 있다
- 만약 패킷이 순서대로 도착하지 않으면 TCP 세그먼트에 있는 정보를 토대로 다시 패킷 전송을 요청하기 때문에 IP의 한계인 비신뢰성을 보완할 수 있다
UDP
- UDP는 사용자 데이터그램 프로토콜(User Datagram Protocol)이다
- UDP는 IP에 PORT, 체크섬 필드 정보만 추가된 TCP보다 단순한 프로토콜이다
- 체크섬(checksum)은 중복 검사의 한 형태로, 오류 정정을 통해 공간(전자 통신)이나 시간(기억 장치) 속에서 송신된 자료의 무결성을 보호하는 단순한 방법이다
- TCP와 비교했을 때, 3way Handshake를 사용하지 않고 추가되는 것이 적기 때문에, 신뢰성은 낮지만 빠른 속도를 보장한다
- HTTP3도 UDP를 사용하는데, 이미 다양한 기능이 구현된 TCP보다 커스터마이징이 쉽다는 장점이 있기 때문이다
TCP vs UDP
TCP | UDP |
연결 지향 프로토콜 | 비 연결 지향 프로토콜 |
전송 순서 보장 O | 전송 순서 보장 X |
데이터 수신 여부 확인 O | 데이터 수신 여부 확인 X |
신뢰성 높음 | 신뢰성 낮음 |
속도 느림 | 속도 빠름 |
- TCP는 신뢰성이 더 요구될 때, UDP는 서비스의 연속성(ex. 실시간 스트리밍)이 더 요구될 때 사용된다
🤔 HTTP
- HTTP는 하이퍼텍스트 전송 프로토콜(HyperText Transfer Protocol)이다
- HTTP의 구조는 클라이언트 - 서버 구조이다
- 클라이언트가 서버에 Request 요청을 보내고, 서버는 클라이언트에게 Response 응답을 보낸다
- HTTP는 서버가 클라이언트의 상태를 보존하지 않는 무상태(Stateless) 프로토콜이다
- 무상태성의 장점으로는 서버가 클라이언트의 상태를 보존하지 않으므로, 서버를 확장하기 용이하다
- 서버가 클라이언트의 상태를 보존하는 경우, 서버를 확장할 때에도 그 상태를 같이 포함해야 하기 때문에 확장이 어렵다
- 단점으로는 클라이언트가 이미 전송한 요청을 반복적으로 추가적인 데이터를 전송해야 한다
- HTTP는 무상태성과 함께 비연결성을 가진다
- HTTP 1.0 기준으로, HTTP는 연결을 유지하지 않는 모델이다
- 비연결성을 가지는 HTTP에서는 실제로 요청을 주고받을 때만 연결을 유지하고 응답을 주고나면 TCP/IP 연결을 끊는다
- 이를 통해 최소한의 자원으로 서버 유지를 가능하게 한다
- 트래픽이 많지 않고 빠른 응답을 제공할 수 있는 경우, 비연결성의 특징은 효율적으로 작동한다
- 하지만 트래픽이 많고 큰 규모의 서비스를 운영하는 경우에는 매번 연결하는데 많은 시간이 소요되기 때문에 한계를 보인다
- 지금은 HTTP 지속 연결(Persistent Connections)로 문제를 해결한다
- HTTP 종류에는 TCP와 UDP 방식이 있으며 80 포트를 사용한다
HTTP의 역사
- HTTP/0.9
- 1991년에 출시됐으며, GET 메서드만 지원하고 HTTP 헤더는 없었다
- HTTP/1.0
- 1996년에 업그레이드되면서 POST 등 메서드가 추가됐고, 헤더가 추가되었다
- HTTP/1.1
- 1997년에 출시되었으며, 현재까지도 이 버전을 주로 사용한다
- HTTP/2
- 2015년에 출시되었으며, HTTP/1.1에 성능이 개선된 버전이다
- HTTP/1.1과 HTTP/2는 TCP 기반이며, HTTP/3은 UDP 기반 프로토콜이다
HTTP 메시지 구조
Request Message
- 클라이언트가 서버에게 보내는 메시지
- Header
- GET /HTTP/1.1 : HTTP 전송 방법과 프로토콜 버전
- Host : 요청하는 서버 주소
- User-Agent : OS/브라우저 정보
- Accept : 클라이언트가 이해 가능한 컨텐츠 타입
- Accept Language : 클라이언트 인식 언어
- Accept-Encoding : 클라이언트 인코딩 방법
- Content-Type : 클라이언트에게 반환되어야 하는 컨텐츠 유형
- Content-Length : 본문 크기
- Body
- 본문은 요청의 마지막 부분에 들어간다
- 모든 요청에 본문이 들어가지는 않는다
Response Message
- 서버가 클라이언트에게 보내는 메시지
- Header
- HTTP/1.1 200 OK : 프로토콜 버전과 응답상태
- Access-Control-Allow-Origin : 서버에 타 사이트의 접근을 제한하는 방침
- Connection : 전송 완료 후 접속 유지 정보 (keep-alive)
- Content-Encoding : 미디어 타입을 압축한 방법
- Date : 헤더가 만들어진 시간
- ETag : 버전의 리소스를 식별하는 식별자
- Keep-Alive : 연결에 대한 타임아웃과 요청 최대 개수 정보
- Last-Modified : 웹 시간을 가지고 있으며, 수정되었을 때만 데이터를 변경한다 (캐시와 연관됨)
- Server : 웹 서버로 사용되는 프로그램 이름
- Set-Cookie : 쿠키 정보
- Transfer-Encoding : 인코딩 형식 지정
- X-Frame-Options : frame/iframe/object 허용 여부
- Body
- 본문은 응답의 마지막 부분에 들어간다
- 모든 응답에 본문이 들어가지는 않는다
💡 DNS
- Domain Name System
- 인터넷에서는 컴퓨터를 식별하기 위해 IP 주소를 사용하는데, 이 숫자만으로는 무엇에 사용되고 있는지 알 수 없다
- 따라서 인터넷에서는 IP 주소에 도메인명 이라는 이름을 붙혀 알기 쉽게 한다
- IP 주소와 도메인명을 서로 교환하는 장치를 DNS라고 한다
- DNS 서버는 트리구조로 되어 있다
참고)
https://velog.io/@shitaikoto/CS-IP-TCP-UDP-HTTP
728x90
'야미스터디 > Network' 카테고리의 다른 글
[Network] 로드밸런스 (0) | 2023.03.30 |
---|---|
[Network] DNS (0) | 2023.03.16 |
[Network] OSI L4 (0) | 2023.03.16 |
[Network] OSI 7계층 (0) | 2023.03.15 |
[Network] HTTP Status code 📌 (0) | 2022.11.19 |
댓글