인터넷 네트워크

yiwoojung·2023년 9월 1일
0
post-thumbnail


만약 내가 내 메세지를 전달해야 하는 pc가 굉장히 멀리 있다면 어떻게 통신할까??

복잡한 인터넷 망을 통해서 안전하게 넘어가야 한다.

이것을 이해하려면 인터넷 프로토콜, IP에 대해서 알아야 한다.

IP(Internet Protocol)

  • 인터넷 상에서 하나의 컴퓨터에서 다른 컴퓨터로 데이터를 보낼 때의 통신 프로토콜
  • 컴퓨터와 컴퓨터간의 식별자
  • 목적지 서버를 찾는 것
  • 역할
    • 지정한 IP 주소(IP Address)에 데이터 전달
    • 패킷(Packet)이라는 통신 단위로 데이터 전달

IPv4

32bit 주소체계 = 8bit * 4

  1. client는 IP Address를 부여받는다.
  2. 지정한 IP 주소에 데이터 전달

IP Address

  • 컴퓨터의 고유한 주소
  • 메세지를 전달할 수 있도록 정해놓은 규칙
  • 패킷(Packet)이라는 통신 단위로 데이터 전달
    • Package + bucket의 합성어

IP 패킷 정보

  • 출발지 IP, 목적지 IP, 기타…IP 관련 정보 안에 전송데이터가 들어있는 형태

패킷 전달

  1. IP 패킷(출발 IP, 목적지 IP, 메세지)을 만든 다음에 인터넷 망에 던진다.
  2. 서버 노드끼리 던지다보면 도착지 IP에 도달하게 된다.

IP 프로토콜의 한계

  1. 비연결성
    1. 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송함
    2. 대상 서버가 패킷을 받을 수 있는 상태인지 모름
  2. 비신뢰성
    1. 패킷 소실 (중간에 패킷이 사라지면?)
    2. 패킷 전달 순서 문제 발생(패킷이 순서대로 도착하지 않으면?)
  3. 프로그램 구분
    1. 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?

이러한 IP 프로토콜의 한계를 해결해주는 것이 TCP 프로토콜이다.

TCP, UDP

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

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

2. 전송 계층 - TCP, UDP

3. 인터넷 계층 - IP

  • IP는 3계층 네트워크 계층에서 동작
  • IP 주소를 보고 스위칭이 일어난다.

4. 네트워크 인터페이스 계층

L3 Packet

단위 데이터(L3 Packet)

  • Header와 Payload 로 나뉜다.
  • 최대 크기는 MTU
    • 일반적으로 1500 bytes (1.4kb)

Public IP

외부 네트워크와 통신을 하기 위해서 사용되는 고유한 주소

Dynamic IP

계속 바뀔수 있는 Public IP

  • 공유기, 인스턴스 등을 껐다 키는 경우
  • 오래도록 사용되지 않는 경우

Static IP

고정된 Public IP

Private IP

내부 네트워크의 서버와 통신하기 위한 목적으로 할당된 IP

  • 하나의 네트워크 대역을 공유하면 해당 네트워크 안에 있는 서버들은 Private IP로 통신 가능
  • 각각의 네트워크 마다 같은 Private IP 존재
    • 고유하지 않음
  • 네트워크 하나를 공유할 때 컴퓨터들끼리 통신할 수 있도록 만듬
    • 인터넷 없이도 서버끼리 통신이 가능

프로토콜 계층

채팅으로 메세지를 전송하고 싶다면?

  1. 프로그램이 Hello, world! 메시지 생성
  2. SOCKET 라이브러리를 통해 os 계층에 메시지를 전달한다.
  3. os 계층에서 메시지 데이터를 포함한 TCP 정보를 생성한다.
  4. 이 메시지를 한칸 내려서 IP 계층에서 IP와 관련된 데이터들을 씌운다. (IP 패킷이 생성된다.)
    1. 이 IP 패킷은 IP 관련 정보 ⇒ TCP 관련 정보 ⇒ message 로 구성되어 있음
  5. 이게 진짜 네트워크 인터페이스(LAN 카드)를 통해서 나갈 때 Ethernet frame(이더넷 프레임)이 포함돼서 나간다.

TCP/IP 패킷 정보

  • IP 패킷
    • 출발지 IP, 목적지 IP, 기타
  • TCP 세그먼트
    • 출발지 PORT, 목적지 PORT
    • 전송 제어, 순서, 검증 정보…

TCP 특징

전송 제어 프로토콜(Transmission Control Protocol)

  1. 연결지향 - TCP 3 way handshake(가상 연결)
    1. 먼저 연결을 한다음에 메시지를 보낸다. (= 연결지향적이다)
  2. 데이터 전달 보증
    1. 패킷이 중간에 누락 되었다는 것을 알 수 있다.
  3. 순서 보장
  • 신뢰할 수 있는 프로토콜
  • 현재는 대부분 TCP 사용중

1. TCP 3 way handshake

일단 TCP/IP 프로토콜로 연결을 하면

  1. 클라이언트에서 서버로 SYN 이라는 메시지를 보낸다. (접속 요청)
  2. 서버에서 클라이언트로 SYN + ACK 를 보낸다. (접속 요청 + 요청 수락)
  3. 클라이언트가 다시 서버한테 알았다는 ACK 를 보낸다. (요즘은 데이터 전송도 가능함)

이렇게 3번을 주고 받으면 연결이 된다.

클라이언트도 서버를 믿을 수 있고

서버도 클라이언트를 믿을 수 있다.

이렇게 연결이 되고나서 그 다음에 데이터가 전송이 된다.

그래서 만약 서버가 꺼져있는 상태라면 클라이언트는 서버의 응답이 없기 때문에 연결이 되지 않는다.

참고로 요즘에는 최적화가 되어서 마지막 3번의 ACK와 함께 데이터 전송이 가능하게 되었다.

하지만 이것은 진짜 물리적으로 연결이 된 것이라고 할 수 없다.

개념적으로만 연결이 된 것이다.

서로 논리적으로 그냥 아 ~ 연결이 됐나보다 라고 생각하는 것이다.

클라이언트와 서버 사이에 중간에 수많은 서버(노드)들을 거치는데 노드들은 연결 됐는지 모른다.

논리적으로만 연결된 것이다.

2. 데이터 전달 보증

클라이언트에서 데이터를 전송하면 서버에서 데이터를 잘 받았다고 보내준다.

그렇기 때문에 문제가 났을 때 인지할 수 있다.

3. 순서 보장

만약 클라이언트에서 패킷을 나눠서 패킷1 패킷2 패킷3 순서로 전송했는데

서버에 1 3 2 순서로 도착했다면

서버에서 클라이언트한테 다 버리고 패킷 2부터 다시 보내라고 한다!

이것은 TCP 데이터 안에 전송 제어정보, 순서, 검증 정보 등이 들어있기 때문에 가능한 것이다.

(tcp는 client에서 요청하는 것이 바람직하다)

UDP 특징

사용자 데이터그램 프로토콜(User Datagram Protocol)

  • IP계층 바로 위에 있는 프로토콜
  • 기능이 거의 없다(하얀 도화지임)
    • 3way handshake X
    • 데이터 전달 보증 X
    • 순서 보장 X
  • 데이터 전달 및 순서가 보장되지 않지만 단순하고 빠름
    • 데이터 양 적고 빠름
  • IP와 거의 같다
  • PORT, checksum 정도만 추가
    • PORT - 패킷 구분하는 용도
    • checksum - 메시지 검증해주는 데이터
  • 애플리케이션에서 추가 작업 필요

한번에 둘 이상 연결해야 한다면?

하나의 클라이언트 pc가 여러개의 서버와 통신해야 한다.

내 IP로 패킷들이 날아올텐데 이 패킷들이 어디로 보내야(와야)하는 패킷인지 구분해야 한다.

그때 사용하는 것이 PORT이다.

PORT

같은 IP 내에서 동작할 프로세스를 구분하기 위해서 사용함

(IP) - (아파트) = 서버 pc

(PORT) - (몇동 몇호)
  • 프로세스에 데이터가 접근하기 위한, 숫자로 된 식별자
  • 서버 안에서 돌아가는 어플리케이션들을 구분하는 것
  • 컴퓨터 하나의 내부에서 프로세스와 프로세스 사이의 식별자

  • 0 ~ 65535 할당 가능
  • 0 ~ 1023: 잘알려진 포트 well-known ports (사용하지 않는 것이 좋음)
    • FTP - 20, 21
    • TELNET - 23
    • HTTP - 80
    • HTTPS - 443
    • root 권한으로 띄울 수 있지만 배포 후에 충돌이 날 가능성이 있으므로 사용하지 않는 것을 권장
  • 전송계층 4계층에서 동작
    • 포트번호를 보고 스위칭이 일어남

Port Forwarding

네트워크 상에서 요청이 네트워크 라우터를 통과할 때 IP와 Port 번호를 보고 해당 요청을 다른 곳으로 넘겨주는 기능

DNS(Domain Name System)

도메인 네임 시스템

  • ip는 변하기 쉽고 외우기 어려운데 도메인 명을 등록해서 사용할 수 있도록 도와줌.

  • 전화번호부

  • 도메인 명을 IP 주소로 변환 가능

  1. 먼저 도메인 명으로 검색 (google.com)
  2. DNS 서버가 응답을 준다
  3. 나중에 IP가 바뀌면 DNS 서버를 바꾸면 된다
profile
프론트엔드 개발자

0개의 댓글