HTTP 또한 인터넷 망 위에서 동작하기에 네트워크 지식이 필요하다.
내 PC에서 Server와 Client가 동시에 있으면 Table 연결해서 사용하면 된다.
하지만 Server와 Client가 물리적으로 먼 거리에 존재하면 우리는 인터넷을 사용해야 한다.
그리고 복잡한 인터넷 망을 이해해야 데이터를 인터넷 망을 통해 전달할 수 있다.
노드는 중간에 존재하는 각각의 서버이며 인공위성, 미국에 있는 아마존 서버 등등 여러 서버를 거쳐서 클라이언트에게 전달될까? 도대체 어떤 규칙으로 어떻게 넘어갈까?
IP(Internet Protocol)
복잡한 인터넷 망에서 내가 원하는 곳까지 도달하는게 가능할까?
우리는 영어를 못하는데, 미국에서 스마트폰 없이 가장 가까운 이마트를 찾아가는 것이 가능할까?
그것이 가능하려면 최소한의 공통 규칙이 필요하며, 인터넷 망은 Internet Protocol을 모두 지키고 있다.
각 node는 내가 도착해야할 노드가 맞는지 구분하는 Id value가 필요하고, 그것이 IP Address이다.
적어도 내가 어디에 도착해야 하는지는 알고 있어야 한다. 클라이언트와 서버, 각 노드는 각 IP Address를 갖고 있다.
Internet Protocol(IP)의 역할
- 지정한 IP Address에 데이터 전달하는 규칙이다.
- Packet이라는 통신 단위로 데이터 전달한다.
- 메세지를 IP Packet으로 감싸서 보내게 된다. 이 IP Packet은 규칙이 존재한다. (출발지 IP, 목적지 IP, 데이터, 기타...)
- 참고로, Packet을 Package(수하물) + bucket(덩어리)의 합성어이다.
- Client에서 Server로 데이터를 보낼때 IP Packet의 형태로 보내게 되고, 이 형태는 출발지, 목적지, 데이터, 기타.. 내용을 담고 있다.
- 클라이언트, 서버, 각 노트는 Internet Protocol을 지키고 있기 때문에 클라이언트에서 보낸 메세지의 목적지를 계속해서 찾게되고 결국 목적지로 데이터가 이동한다.
- 클라이언트 입장에서는 서버가 메세지를 정확히 받았는지 혹은 누군가 중간에 가로챘는지, 내가 잘못된 목적지로 보냈는지 확인할 수 없으면 안 된다.
- 결국, 서버에서는 클라이언트에게 잘 받았다는 메세지를 보내게 된다. 이 메세지 역시 통신 규약인 IP Packet 형태로 보낸다.
- 인터넷 망이 복잡하기 때문에, 서버에서 전달받을 때 경로와 전달을 줄때 경로가 다를 수 있다.
IP Protocol의 한계 -> 이를 해결하는 것이 TCP 이다.
- 비연결성
- 패킷을 받을 대상이 없거나 컴퓨터가 꺼져있는 서버스 불능 상태여도 패킷은 전송된다.
- 비신뢰성
- 중간에 패킷이 사라지면 해결방법 없음 (결국 패킷은 노드에서 노드로 계속 이동해서 전달되고, 각 노드는 서버이다. 전달하는 과정에서 서버가 문제가 생기거나 다운되면 해당 패킷은 유실된다.)
- 패킷을 여러개 보냈는데 순서대로 오지 않으면 해결방법 없음 (Packet의 용량이 되게 클때가 존재하고, 보통 1500byte가 넘으면 한번에 보내기 부담되서 여러개로 나누어 보내게 되는데 순서가 엉망으로 도착할 수 있다. 같은 노드 타지 않을 수 있기 때문이다.)
- 프로그램 구분
- 한 PC에서 게임도 하고 음악도 듣는 경우, 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이다. 같은 IP에서 여러 어플리케이션을 이용할때 이 프로그램들을 구분할 방법이 없다.
TCP (Transmission Control Protocol) - 전송 제어 프로토콜
# UDP는 IP의 한계를 해결 해주지는 않지만, 도움이 되는게 있어서 추가 설명해주겠다.
https://carnival.tistory.com/58
- 실제 네트워크를 진행하는 것은 LAN Driver, LAN 장비들이다.
- 채팅 프로그램으로 서버에 메세지를 보낼때의 상황이다.
- 애플리케이션에서 메세지를 보낼때, 보통 Socket Library를 사용해서 OS로 넘긴다.
- OS에서는 전달받은 메세지에 TCP 정보를 담는다.
- 다시, TCP로 감싸진 데이터를 IP Packet으로 생성해서 Network Interface Layer로 넘긴다.
- 그 후, Network Interface Layer에서 Ethernet frame으로 한번 더 감싸서 인터넷 망으로 던진다.
- 참고로, Ethernet frame은 LAN 카드에 입력된 MAC 주소와 같은 물리적인 값들이 포함되어 있다.
- TCP Segment에 포함된 정보를 통해 IP에서 발견된 문제를 해결한다.
TCP 특징 - 신뢰할 수 있는 프로토콜이며, 현재는 대부분 TCP 사용
- 연결지향 - TCP 3 way handshake (가상 연결)
- 연결이 되었는지 확인하고 데이터를 보낸다.
- 데이터 전달 보증
- 데이터가 중간에 탈취 당하거나 손실됨을 확인할 수 있다
- 순서 보장
연결지향
- 클라이언트에서 서버로 SYN(클라이언트의 연결요청)을 보낸다.
- 서버에서는 클라이언트에게 SYN(서버의 연결요청) + ACK(클라이언트의 연결요청 응답)을 보낸다.
- 클라이언트는 서버에서 ACK(서버의 연결요청 응답)을 보낸다.
- 이렇게 3단계를 거치면 연결이 된 것이고, 클라이언트와 서버는 원하는 데이터를 전송하게 된다.
이렇게 TCP의 3way-handshake를 이용하면 클라이언트는 서버를 믿을 수 있고, 서버 또한 클라이언트를 믿을 수 있게 된다.
요즘에는 최적화가 되서 3번 ACK를 보낼때, 데이터도 같이 전송한다.
중요한 점은 TCP 3way-handshake는 "TCP가 연결됐어요~, Socket 연결됐어요~"라고 표현하지만 가상 연결이며 개념적으로만 연결된 것이고 물리적으로는 연결되지 않았다. 물리적으로 연결된 것은 예전 전화를 할때 전화선을 직접 연결하는 것을 의미하는 것이며, TCP 3way-handshake는 연결요청과 응답을 받았으니 서로만 논리적인 연결이 되었다고 생각하는 것이다. 중간에 거쳐가는 노드(서버)들은 연결이 되었음을 알지 못한다.
데이터 전달 보증은 간단하다.
TCP를 통해서 데이터를 전달하게 되면 서버에서는 데이터를 잘 받았다고 응답을 하게 된다.
- 패킷이 순서에 맞지 않게 들어오면 잘못 들어온 순서부터 싹 버리고 다시 보내라고 요청한다.
- 물론, 받아둔 다음 순서를 바꾸는 최적화를 할 수 있지만, 그건 좀 더 윗단에서 일어나는 일이고 원리는 이렇다.
- 이게 어떻게 가능한가? TCP 정보에는 순서 정보가 포함되어 있어서 가능하다.
UDP: TCP와 같은 OS 계층에 존재하며, IP보다 윗 계층이다.
- IP와 거의 같은 원리이지만 두 가지가 추가된다. (PORT, Checksum)
- PORT는 하나의 IP에서 여러 애플리케이션이 동작(음악과 유투브 동시 동작 중)할때 사용된다.
- Packet은 IP 주소로 들어온다.
- 들어온 Packet이 음악용 packet인지 유투브용 packet인지 구분하는 용도가 PORT이다.
- Packet이 정상적으로 도착했는지 검증하는 용도가 Checksum 이다.
TCP가 훨씬 좋아 보이는데 UDP를 쓰는 이유는 전송속도와 데이터크기이다.
- TCP는 3way-handshake를 요청과 응답이 여러번 동작하기 때문에 시간적으로 UDP보다 느릴수 밖에 없다.
- TCP는 더 많은 정보를 담기 때문에 Packet의 크기가 커지고 부담이 된다.
- TCP는 인터넷에서 대부분 사용하고 있어서(90%) 최적화와 같은 작업을 할 수가 없다.
- 최적화를 하고 싶으면 TCP를 사용할 것은 사용하고, UDP로 최적화를 진행하면 된다. (내가 원하는 최적화를 애플리케이션 레벨에서 구현하면 된다.)
- CS를 배울때 UDP로 깨져도 되는 영상을 보낸다고 했지만, 현재는 영상도 TCP를 사용해서 보내고 있다.
- 최근에 UDP가 핫한 이유는 웹브라이져에서 HTTP 통신을 하는데, HTTP/3 스팩이 나오면서 3way-handshake와 같은 것을 줄여서 최적화를 진행하고 UDP를 사용하면서 각광받고 있다.
PORT (배가 도착하는 항구를 의미)
한 번에 여러 서버와 통신해야 하는 경우 요청과 응답이 다양하다. 보낼 때는 IP가 같은 경우 게임용인지 화상통화인지 구분해야하고, 받을 때는 게임과 화상통화, 웹 브라우저 요청에 대한 응답인지 구분해야 한다.
IP만 사용하면 이를 구분할 수 없고, PORT 개념을 이용해서 이를 해결하며, PORT는 TCP 정보에 포함된다.
- IP는 목적지의 서버를 찾는 용도 (아파트 동)
- PORT는 목적지 서버에서 목적지 애플리케이션을 찾는 용도 (아파트 호수)
앞으로는 TCP/IP 패킷 정보를 오른쪽과 같이 표기할 것이다.
0~1023은 PORT가 일반적으로 정해진 경우가 많아서 내가 할당할 경우 사용하지 않는 것이 좋다.
DNS (Domain Name Server)
- 전화번호부
- 도메인 명을 IP 주소로 변환
IP의 문제점
- 기억하기 어렵다.
- 변경될 수 있다. (이 경우가 많다.)
- 우리는 이를 해결하기 위해 DNS를 사용한다.
- DNS 서버에 도메인 명을 등록할 수 있다. 도메인 명은 돈으로 구매할 수 있다.
- 기억하기 쉽고, IP가 변경되면 DNS 서버에 등록되어 있는 Domain Name과 매칭된 IP만 수정하면 된다.
'Server > HTTP' 카테고리의 다른 글
[HTTP] HTTP 메서드 활용 - 클라이언트에서 서버로 데이터 전송 (0) | 2022.08.11 |
---|---|
[HTTP] HTTP Method (0) | 2022.08.11 |
[HTTP] HTTP 기본 (0) | 2022.08.10 |
[HTTP] URI와 웹 브라우저 요청 흐름 (0) | 2022.08.10 |
[HTTP] 기본 지식 (0) | 2022.08.09 |