인터넷 통신

slee2·2021년 12월 25일
0

IP

클라이언트에서 IP 주소를 부여받는다. 그리고 서버에도 IP 주소가 있다.

IP의 역할은 두 가지가 있다.

  • 지정한 IP 주소(IP Address)에 데이터 전달
  • 패킷(Packet)이라는 통신 단위로 데이터 전달

메세지를 보낼때 바로 보내는 것이 아니라 패킷 정보라는 규칙이 있다.

IP 패킷 정보

패킷이란 : 패키지와 버킷의 합성어

출발지 IP, 목적지 IP, 전달 내용, 기타 ...

등의 전송 데이터를 담아서 클라이언트에서 서버로 보내게 된다. 그러면 IP 프로토콜에서 정해진 규약에 의해 서버로 전달된다.

그 후에 서버에서도 메세지 OK를 전달하기 위해 패킷을 만들고 전송한다. 그림을 보면 둘이 경로가 다를 수 있다는 것도 확인할 수 있다.

IP 프로토콜의 한계

비연결성

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

비신뢰성

  • 중간에 패킷이 사라질 수도 있음
  • 패킷이 순서대로 오지 않을 수도 있음

프로그램 구분

  • 같은 IP를 사용하는 서버에서 둘 이상의 어플리케이션이 실행된 상태라면, 어떤 형식인지 어떻게 구분할 것인가.

서버가 있는지 없는지 조차 모르기 때문에 우편을 보내듯이 보내놓고 도착되었는지 확인할 수 없다.

패킷을 보내는 중간에 노드가 꺼졌다던지 케이블이 끊어졌다던지 여러 이유로 패킷이 손실될 수 있으나 알 수 없다.

대용량의 데이터를 보내게 된다면 여러개로 나눠서 패킷을 보내게 되는데 각각 패킷들이 서로 다른 노드를 타고 이동할 수도 있다. 그렇기 때문에 누가 먼저 도착할지 모르는 상황이 와서 Hello, world!로 보냈지만, world! Hello,로 받을 수 있다.

이런 문제들을 해결해 주는 것이 TCP이다.

TCP

프로토콜 계층

TCP 특징

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

  • 연결 지향 - 연결이 되었는지 확인하고 메세지를 보낸다.
  • 데이터 전달 보증 - 데이터를 보내다가 패키지가 누락되면 알 수 있다.
  • 순서 보장

그러므로 TCP는 신뢰할 수 있는 프로토콜이며 현재 대부분 TCP를 사용한다.

TCP 3 way handshake

TCP로 연결을 하게 되면 다음과 같이 된다.
1. 싱크로나이즈라는 건데 SYN이라는 것을 먼저 보낸다.
2. 서버에서 받았다는 것을 확인하는 것으로 SYN+ACK를 보낸다.
3. 클라이언트에서 받은것을 확인하는 것으로 ACK를 보낸다.
이렇게 서로 전송받는것을 확인한다.

이렇게 연결이 되고 난 후에 데이터를 전송한다. (요즘에는 3.ACK를 보낼때 데이터도 같이 보낸다고 한다.)

UDP

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

  • 기능이 거의 없음
  • 연결지향 X
  • 데이터 전달 보증 X
  • 순서 보장 X
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름

IP와 거의 같다. +PORT +체크섬 정도만 추가
(포트는 하나의 IP에서 여러 애플리케이션을 사용하고 있을때 이를 구분하기 위한 용도로 사용)
(체크섬은 메세지에 대해서 맞는지 검증해주는 데이터이다.)

그럼 왜 쓰는거지? TCP는 이미 만들어진 느낌이라 건들 수 없지만, UDP를 건들어서 애플리케이션의 추가 작업을 통해 최적화할 수 있다.

PORT

게임 서버 연결할때 - 서버에 100.100.100.1, 8090, 200.200.200.2, 11220, ...를 보낸다. 이는 (출발지 IP, PORT, 목적지 IP, PORT)이다.
그 후에 다시 서버에서 클라이언트로 200.200.200.2, 11220, 100.100.100.1, 8090, .. 을 보내게 된다.

IP - 아파트
PORT - 몇동 몇호

  • 0 ~ 65535 할당 가능
  • 0 ~ 1023 잘 알려진 포트, 사용하지 않는 것이 좋음
  • FTP - 20, 21
  • TELNET - 23
  • HTTP - 80
  • HTTPS - 443

DNS

도메인 네임 시스템(Domain Name System)

  • 전화번호부
  • 도메인 명을 IP 주소로 변환

0개의 댓글