인터넷 네트워크

강정우·2023년 11월 21일
0

네트워크

목록 보기
13/32

인터넷 통신

  • 만약 두 pc가 있다고 가정하자.
    이 두 pc가 1m 내외에 있다면 그냥 케이블을 연결하면 되겠지만, 두 pc가 대륙을 건너 있다면 인터넷 망을 통해서 보내야할 것이다.

  • 그런데 인터넷 망이 보기보다 복잡하다 해저케이블일 수도 있고 인공위성 통신이 될 수도 있고 굉장히 많은 "중간 노드"라고 하는 서버들을 거쳐서 메시지가 넘어가는 것이다.
    이때 어떤 규칙으로 넘어갈까? -> 바로 IP를 통해서 가는 것이다.

IP(Internet Protocol)

  • 이 IP를 사용할 때 반드시 IP 주소가 있어야하고 이 주소를 통해서 데이터를 패킷 단위로 전달한다.

즉, IP의 역할은
1. 지정한 IP 주소에 데이터 전달
2. Packet이라는 통신 단위로 데이터를 전달

  • 참고로 packet은 package + bucket 의 합성어이다.

IP Packet

  • 이 패킷에는 또 정보를 담고있다.

  • 마치 우리가 소포를 붙일 때 보내는 사람, 받는 사람 주소를 적듯 말이다.

  • 그래서 처음 사진과 같이 각 (IP 규약을 따르는)중간노드들 에게 서버의 IP 주소로 가기위한 길을 물어물어 도착을 하면 서버도 잘 도착했다는 패킷을 똑같이 만들어 "응답"을 해준다.
    (이때 req, res의 경로는 다를 수 있다.)

IP 프로토콜의 한계

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
  • 비신뢰성
    • 중간에 패킷이 사라지면?
    • 패킷이 1500 byte가 넘어서 끊어서 보내는데 아래 사진처럼 패킷이 순서대로 안 오면?

참고로 위 사진처럼 패킷들이 서로 다른 노드를 탈 수 있다.

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

그래서 위 문제들을 해결해주는 프로토콜이 바로 TCP 이다.

TCP, UDP

  • 이 4계층 중 TCP에 IP를 살짝 올려서 앞서 언급했던 IP의 문제점들을 해결하고자 했다.

  • 위 그림과 같이 추가 정보를 더하여 ip으로만은 해결되지 않았던 문제들을 해결하였다.

TCP 특징

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

  • 연결지향 - TCP 3 way handshake (가상 연결) -> IP의 비연결성 해결

  • 데이터 전달 보증 -> 데이터가 누락되면 알려줌 -> IP의 비신뢰성 해결

  • 순서 보장 -> IP의 비신뢰성 해결

  • 신뢰할 수 있는 프로토콜이라 현재는 대부분 TCP를 사용한다.

3 way handshake

  • SYN: 접속 요청
    ACK: 요청 수락

  • 즉, 클라이언도, 서버도 씐, 씐액, 액 이 3번의 과정을 통해 연결이 되었다를 확정 받는 것이다.

  • 참고로 요즘에는 최적화가 더 잘되어서 3.ACK와 함께 데이터를 전송해버린다.

  • 그런데 여기서 3-way handshake로 "연결되었다." 는 사실 real로 연결된건 아니다.
    개념적으로만 연결된 것이다.
    즉, 중간노드들은 모른다. -> 나를 위한 전용 랜선이 보장되는 것은 아니다!

데이터 전달 보증

  • TCP IP에서는 데이터를 전송하면 항상 응답을 보내준다. 그래서 데이터가 잘 전달 됐는지를 알 수 있다.

순서 보장

  • 물론 위 사진처럼 순서가 틀린 패킷 부터 다시 보내라고 할 수도 있지만 서버에서 알아서 최적화(드라이버에 조금 모아놨다가 132 -> 123으로)할 수도 있다.

UDP 특징

  • 사실 UDP 기능이 없어서 "하얀 도화지"라고 비유를 한다. 또 내가 커스텀을 할 수도 있기 때문에 이렇게 불린다.
  • 연결지향X, 데이터 전달 보증X, 순서 보장X, 데이터 전달 및 순서가 보장되지 않는다.
  • 그럼 왜씀? -> 단순하고 빠름
  1. IP와 유사하다.
  2. PORT, 체크섬(제대로된 메시지인지 검증하는거) 정보 추가
  3. 어플리케이션에서 추가 작업이 필요하다.

순서

  1. 만약 내가 Hello, world! 라는 메시지를 보내고 싶다고 한다면
  2. 소켓 라이브러리를 통해서 os 계층에다가 메시지를 넘긴다.
  3. os 계층에서 tcp가 tcp 정보를 씌운다.
  4. tcp 정보 밖에 ip 관련된 데이터들을 씌운다.
  5. 완성된 ip 패킷이 비로소 네트워크 인터페이스를 통해서 랜카드를 통해서 나갈 때 이더넷 프레임이라는게 포함돼서 나간다.
  6. 이더넷 프레임은 랜카드에 등록된 MAC주소 등 물리적인 정보들이 포함되어있다.

PORT

  • 위 사진과 같이 한번에 둘 이상의 요청을 한다면 굉장히 많은 패킷들이 날아올텐데 이 패킷들이 게임용 패킷인지 화상통화용 패킷인지 알 수 없다.

  • 이때 앞서 배운 TCP/UDP 프로토콜을 보면 ip는 목적시 서버를 찾는거고 그 서버 안에서 돌아가는 어플리케이선들을 구분하는게 TCP sagment에 명시된 PORT라고 생각하면 된다.

0~65535 할당가능
0~1023 사용하지 않는 것이 좋음 -> 항상 사용중인 포트
FTP-20,21
TELNET-23
HTTP-80
HTTPS-443

DNS

  • 실제로 IP는 변경될 수 있으면 생각보다 흔한 일이다. 그럼 xx.xx.xx.xx:80 으로 기억했는데 주소가 변경되면? 이상한 숫자열을 다시 외워야하는 불상사가 생긴다. 이를 방지하기위해 DNS가 존재한다.

  • Domain Name System: 일명 전화번호부 같은 기능을 한다.

  • 도메인 명을 IP 주소로 변환해준다.

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글