나의 브을로오그으

#1. [HTTP] 인터넷 네트워크 본문

HTTP

#1. [HTTP] 인터넷 네트워크

__jhp_+ 2022. 7. 29. 08:31

목차

1. 인터넷 통신

2. IP(Interanet Protocol)

3. TCP, UDP

4. PORT

5. DNS

 

 

인터넷에서 컴퓨터 둘은 어떻게 통신할까?

P2P(Pear to Pear)통신(그냥 컴퓨터 2개 연결해서) 통신을 하는 경우에는 그냥 하면 되지만,

멀리 있는 컴퓨터와 통신을 하려면, 인터넷(Internet)을 통해 통신을 해야하는데 인터넷 안에는 수많은 중간 노드(컴퓨터)들이 있고, 이런 수많은 노드(컴퓨터)들을 통해서 어떻게 목적지까지 안전하게 도착할까?

그것을 아는것이 중요하다!!

 

멀리 있는 컴퓨터로 데이터를 보내고 싶다면 어떻게 해야 할까?

먼저 각 컴퓨터를 구분 할 수 있는 IP Address(Internet Protocol Address)라고 하는 주소를 가져야 한다. 우리가 네비게이션을 통해 목적지 까지 가려면 목적지의 주소를 알아야 하지 않나? 그것과 똑같다.

따라서 각 컴퓨터에는 IP(Internet Protocol) 주소라고 하는 것을 가지고 있다.

 

IP(Internet Protocol)

IP는 인터넷 프로토콜이라 한다.

IP는 지정한 IP 주소(Address)에 데이터를 전달하며, 패킷(Packet, 네트워크 상에서 전달되는 데이터의 단위)이라는 통신 단위로 데이터를 전달한다.

사실 정확하게는 데이터를 전달하는 것이 아닌 데이터가 인터넷을 통해 전달되는데 인터넷상의 무수히 많은 중간 노드(컴퓨터)들에서 어떤 중간 노드들을 거쳐서 목적지 까지 도달해야 하는지 경로를 선택하고, 안내하는 네비게이션 같은 역할을 하는 프로토콜이 바로 인터넷 프로토콜이다. 

 

예) 패킷이 전달되는 간단한 방식(IP 관점에서)

100.100.100.1 주소를 가진 컴퓨터 A

200.200.200.1 주소를 가진 컴퓨터 B 가있다.

컴퓨터 A에서 컴퓨터 B로 패킷을 보낸다면, 인터넷을 통해 컴퓨터 B로 보내야 한다.

이때 무수히 많은 인터넷상의 컴퓨터들 중 특정 노드(컴퓨터)들을 선택하여, 목적지까지 도달한다.

만약 목적지까지 잘 도착했다면, 컴퓨터 B에서 컴퓨터 A로 잘 받았다는 메시지를 보낸다.

(이때도 역시 인터넷의 수많은 노드들을 거쳐서 컴퓨터 A로 도착하게 되는데, A->B로 갔던 경로와 B->A로 가는 경로는 같을수도 다를수도 있다.)

 

IP프로토콜의 한계

- 비연결성

  * 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송

(뭔말? 데이터를 받을 IP 주소가 존재하지 않는 IP주소 또는 엉뚱한 IP 주소일 경우에도 IP프로토콜의 규칙은 "일단 그 IP주소로 보낸다."이다. 그것이 잘못되었든 말든 상관없이..)

- 비신뢰성

  * 중간에 패킷이 사라지거나, 패킷이 순서대로 안온다면?

(내가 분명히 100byte 크기의 패킷을 보냈는데, 받은곳에서는 50byte만 받을수도, 아무것도 못받을 수도 있다. 즉, 중간에 패킷이 사라지든, 아니면 늦게 도착했든간에 IP 프로토콜에서는 패킷이 수신측에 잘 도착할거라는 것을 보장하지 않는다. 또한 데이터를 순서대로 보내면, A -> B -> C.. 이게 그 순서대로 도착하지 않을 수도 있다. 받는쪽에서 순서대로 받을 수 있다는 것도 보장하지 않는다.)

- 프로그램 구분

  * 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?

(동일한 IP 주소로 게임도 하고, 유튜브도 보고, 그렇다면 외부 서버에서 게임 관련 데이터와, 유튜브 동영상 관련 데이터를 동일한 IP 주소로 받아올텐데 이 데이터가 게임 관련 데이터인지... 유튜브 동영상 관련 데이터인지... 어떻게 구분할거야? 이것 역시 IP프로토콜에서 구분해주지 않는다.)

 

 

TCP

인터넷 프로토콜 스택의 4계층

- 어플리케이션 계층

- 전송 계층

- 인터넷 계층

- 네트워크 인터페이스 계층(링크 계층)

 

데이터가 네트워크(인터넷)를 통해서 보내질때는 위에서 아래 방향으로 데이터가 보내지기 위한 규칙을 만족하기 위해 추가적으로 여러 정보들이 붙는다.

 

인터넷 계층에서는 IP 패킷 정보가 추가되는데, 이 정보안에는 출발 IP주소와 목적지 IP주소가 들어있다. (이외에도 여러 데이터가 있음)

TCP/UDP 계층(전송 계층)에는 TCP 패킷 정보로는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 등의 정보가 들어있음.

 

(정리, 데이터가 보내지기 위해서는 위의 4가지 계층을 거쳐서 인터넷으로 나간다. 이때, 각 계층에는 목적지까지 데이터가 도착하기 위해 필요한 정보들이 채워진다.)

 

TCP(Transmission Control Protocol, 전송 제어 프로토콜) 특징

- 연결지향 - TCP 3 way handshake (가상 연결)

- 데이터 전달 보증

- 순서 보장

 

- 신뢰할 수 있는 프로토콜

- 현재는 대부분 TCP 사용

 

연결지향

SYN : 접속 요청

ACK : 요청 수락

 

상대 컴퓨터와 연결 시

여기서도 컴퓨터 A와 컴퓨터 B를 이용해서 설명

컴퓨터 A에서 컴퓨터 B로 패킷을 하나 보낸다. SYN 메시지(AAA)를 보냄

(일종의 연결 요청, 연결요청은 클라이언트에서 함.)

 

컴퓨터 B에서 이것을 잘 받았으면,

(컴퓨터 B에서 SYN 메시지를 다시 컴퓨터 A로 보내고 동시에 ACK메시지도 같이 보냄. ACK메시지는 뭐냐면 네가 나한테 SYN메시지(AAA)를 보냈지? 다음에 보낼때는 AAB라는 SYN메시지를 보내 라는 일종의 미래에 컴퓨터 A가 컴퓨터 B에게 보내야 할 메시지임)

 

그리고 나서 컴퓨터 A가 SYN, ACK를 잘 받았다면, ACK롤 응답해줌.

 

이런과정을 거쳐서 서로 연결이 되었다는 것을 양쪽다 알게됨.

이렇게 3번 보내는 것을 3-ways handshaking이라고 부름

(요즘은 최적화가 되어서 마지막 ACK를 보낼 때 데이터도 같이 보내줌)

 

 

데이터 전달 보증 및 순서 보장

TCP는 데이터가 잘 전달받았는지를 항상 응답해줌. 또한 순서도 설령 A -> B -> C순으로 패킷을 보냈고, 이 패킷을 수신측에서 순서대로 도착하지 않았다면, 순서대로 도착하지 않은쪽부터 다시 보내라고 송신측에 요청함. 그래서 순서대로 도착하지 않은곳 부터 다시 보냄.

 

 

UDP(User Datagram Protocol) 특징 

- 하얀 도화지와 같다.(기능 없음)

- 비연결지향

- 데이터 전달 보증 x, 순서 보장 x

- 그렇기 때문에 빠름

- IP와 거의 유사하고, 포트와 체크섬이 있음

 

(TCP는 이미 많은 통신에서 이 방식을 쓰고 있기 때문에 바꿀 수가 없음. 단, UDP는 하얀 백지와 같기 때문에 통신할 때 추가적인 제약사항, 규칙등을 서로 합의하에 추가 할 수 있음. 요즘은 UDP가 뜨고있다. TCP의 3-ways handshaking, 데이전 보증, 순서 보장을 위한 방법 등을 더 최적화 해보자 해서...)

 

 

PORT

같은 IP내에서 프로세스를 구분, 정확하게는 socket을 구분하는 번호임.

(포트번호는 참고로 전송계층에서 패킷을 보낼 때 출발, 목적 포트번호가 다 담겨있음.)

0~1023까지 : 잘 알려진 포트(well-known port number)이라 해서 이미 예약된 포트임. (쓰지 않기를 권장)

1024~65535까지 할당 가능 (65535까지인 이유? PORT번호는 2byte할당함.)

 

 

DNS (Domain Name System)

IP는 기억하기 힘듬. IP는 변경 가능함.

우리가 SK, KT 등의 통신사만 바꾸더라도 IP는 바뀜. 혹은 라우터를 종료했다가 다시 켰을 때 역시도 IP는 바뀔 수 있음. 따라서 이것을 유연하게 대응하기 위해 Domain Name을 사용함.

 

DNS서버에 IP 주소와 Domain이름을 같이 등록하면, 우리가 웹 브라우저같은걸 이용해서 서버에 도메인 이름으로 요청을 하면 요청된 이름을 DNS서버에 등록된 IP주소로 요청함.

쉽게 예로 보자)

웹 브라우저의 주소창에 "www.naver.com"을 입력하면 인터넷으로 해당 요청 패킷이 들어오고, DNS서버를 찾아서 이 도메인 이름이 있는지 확인한다. 그리고 있다면, 이 이름이랑 같이 등록되어 있는 IP 주소를 찾아서 해당 주소의 서버로 우리의 요청이 들어간다. 들어온 요청에 따라 네이버 서버에서는 html파일을 웹브라우저에게 보내주고, 웹 브라우저에서는 이 html을 랜더링한다. 

그러면 이 웹브라우저를 통해 네이버 메인 포탈 사이트를 볼 수 있다.