Web/HTTP

섹션 1. 인터넷 네트워크

hmhmchm 2022. 7. 20. 17:36

인터넷 통신

- 클라이언트와 서버가 바로 붙어 있다면 문제가 되지 않겠지만 그 사이에 인터넷 망이 아주 복잡하게 얽혀있다.

데이터를 안전하게 전송하기 위해 방법을 생각해보자.

 

IP (Internet Protocol) 인터넷 프로토콜

 

역할

 

- 지정한 IP 주소에 데이터 전달

- 패킷이라는 통신 단위로 데이터 전달

 

IP 패킷 정보

 

- 출발지 IP, 목적지 IP, 전송 데이터, 기타

 

IP 프로토콜의 한계

 

- 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 (클라이언트는 대상 서버가 패킷을 받을 수 있는 상태인지 모른다. 서버가 꺼져 있더라도 일단 패킷은 전송한다.)

- 비신뢰성 : 중간에 패킷이 사라질 수 있다? , 패킷이 순서대로 오지 않을 수 있다? (중간에 노드가 꺼지거나 문제가 생기면 패킷이 소실된다.)

- 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 어플리케이션이 둘 이상이라면?

(패킷의 용량이 크다면 쪼개서 보낸다. 문자는 최대 1500byte로 끊어서 보낸다. 가장 빠른 길을 찾기 때문에 순서가 바뀌어서 도착할 수 있다.) 

이러한 문제들을 TCP가 해결해 준다. TCP에 대해서 알아보자.

 

TCP

                           애플리케이션 계층 - HTTP, FTP

                           전송 계층 - TCP, UDP

                           인터넷 계층 - IP

                           네트워크 인터페이스 계층

 

프로토콜 계층 예시

 

(SOCKET 라이브러리를 사용하여 채팅 프로그램을 사용한다고 하자.)

1. 프로그램이 Hello, world! 메시지를 생성

2. SOCKET 라이브러리를 통해 전달

3. OS 에서 TCP 정보를 생성, 메세지 데이터도 포함.

4. OS 에서 IP 패킷 생성, TCP 데이터도 포함.

5. LAN 카드로 서버에 보낸다. (Ethernet frame) 

 

TCP/IP 패킷 정보 : IP 패킷 정보 안에 TCP 패킷 정보가 있다.

TCP 세그먼트 : 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보 등

 

TCP 특징 (전송 제어 프로토콜)

 

- 연결지향 - TCP 3 way handshake (가상 연결이다. 이게 실제로 연결된 것이 아닌 개념적으로만 연결 되었다라고 생각하자.)

- 데이터 전달 보증 : 클라이언트가 서버로 데이터 전송을 하면 서버는 클라이언트에게 데이터를 잘 받았다고 보낸다.

- 순서 보장 : 패킷1,패킷2,패킷3 순서대로 보냈을 때 패킷2보다 패킷3이 먼저 도착한다면 2부터 다시보내라고 요청보낸다.

- 신뢰할 수 있는 프로토콜

- 현재는 90프로 이상 TCP를 사용한다.

 

TCP 3 way handshake

 

1. 클라이언트에서 서버로 SYN 을 보낸다. (SYN 은 씽크로나이즈로 접속 요청)

2. 서버에서 클라이언트로 SYN + ACK 를 보낸다. (ACK 는 잘 받았다라는 대답. 즉, 요청 수락)

3. 클라이언트에서 서버로 ACK 를 보낸다. (역시나 클라이언트도 잘 받았다라는 대답을 보낸다.)

4. 클라이언트에서 서버로 데이터 전송.

 

1,2,3 은 connect 과정이다.

 

UDP 특징 (사용자 데이터그램 프로토콜)

 

- 하얀 도화지에 비유 (기능이 거의 없음)

- 연결지향 - TCP 3 way handshake X 

- 데이터 전달 보증 X

- 순서 보장 X

- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름.

- IP 와 거의 같다. 거기에 PORT , 체크섬 정도만 추가

- 어플리케이션에서 추가적으로 작업 필요

 

 * Port : 내 PC의 IP 는 하나인데 게임이나 음악 등 여러 어플리케이션을 사용할 때 어떤 패킷인지 구분하는 역할

 * 체크섬 : 메세지에 대해 맞는지 검증해주는 데이터가 추가 되어있다.

 

TCP 는 좋지만 전송속도가 늦다. 데이터 양도 많아진다. 그리고 TCP 는 이제 손을 댈 수 없을정도로 고착화 되어있다. 하지만 UDP 는 위에다가 내가 원하는 것을 작업할 수 있다. 

 

PORT

 

클라이언트에서 한번에 둘 이상의 서버와 연결 할 때 게임인지 음악인지 등 구분하기 위해 사용한다.

TCP/IP 패킷 정보에는 출발지 (IP, PORT).  목적지 (IP, PORT) , 전송 데이터 가 포함 되어있다.

 

 PORT 예시

- 0 ~ 65535 할당 가능

- 0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음

    -  FTP : 20, 21

   -   TELNET : 23

   -   HTTP : 80

   -   HTTPS : 443

 

 

DNS (도메인 네임 시스템)

 

IP 주소는 기억하기 어렵다.

IP 는 변경될 수 있다.  과거 IP : 200.200.200.2.  -> 현재 IP : 200.200.200.3 

 

- 전화번호부

- 도메인 명을 IP 주소로 변환

 

* DNS 서버에 google.com 은 200.200.200.1 라고 되어있다라는 의미.

 

[인터넷 네트워크 정리]

 

  • IP 의 한계를 극복하기 위해 TCP 가 도입되었고, UDP 는 IP와 비슷하지만 PORT 와 체크섬이 추가되었다. 필요하다면 UDP 는 기능확장이 가능하다.
  • PORT 는 같은 IP 안에서 동작하는 어플리케이션을 구분하기 위해 사용되며, IP 가 하나의 아파트라면 PORT 는 몇 동 몇 호인지라고 생각하면 편하다.
  • DNS 는 변경될 수 있고 외우기 힘든 IP를 대신해서 사용한다.

 

<참고 자료>

 

1. 인프런 - 모든 개발자를 위한 HTTP 웹 기본 지식 강의 (김영한님)

 

2. 

https://velog.io/@chss3339/httplecture

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 김영한님 강의 정리

HTTP 기본 지식 - 인프런 김영한님

velog.io

 

728x90