CS/네트워크

인터넷 네트워크 (IP, TCP/UDP, PORT, DNS)

연듀 2023. 2. 4. 17:37

 

인터넷 네트워크

내 PC가 메세지를 전달해야 하는 PC가 멀리 떨어져있다면 수많은 중간 노드로 이루어진 인터넷 망을 통해 보내야 한다.

안전히 목적지에 메세지를 도착하게 하려면 IP주소가 필요하다.

 

 

IP(인터넷 프로토콜)

 

인터넷 환경에서의 통신규약.

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

 

패킷안에는 출발지 IP, 목적지 IP 등등 이 포함되어있다.  

 

 

패킷 전달 과정

 

 

 

클라이언트에서 출발지, 목적지 IP 주소가 담긴 IP 패킷을 만들어 인터넷에 전달한다.  

 

노드끼리 주소를 확인하여 목적지까지 도착한다.

 

서버에서는 메세지를 받았을 경우 IP 패킷을 다시 클라이언트에게 보낸다. 

 

 

 

그런데 IP 프로토콜에는 한계가 있다. 

패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷이 전송된다. ->비연결성

중간에 패킷이 사라지거나 패킷이 순서대로 안올 수 있다. ->비신뢰성

같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 때 구분 할 수 없다.

 

이 문제를 해결해 주는게 TCP 프로토콜이다. 

 

 

 

우선 인터넷 프로토콜 스택의 4계층을 살펴보자. 

 

 

 

프로토콜 계층에서의 데이터 전달 과정

 

 

1. 프로그램이 메세지 생성

2. socket 라이브러리를 통해 OS로 전달

3. OS 계층에서 메세지 데이터 바깥에 TCP 정보를 감싸 생성, 그 바깥에 IP 패킷 생성

 

TCP/IP 패킷

 

4.네트워크 인터페이스 계층을 통해 이더넷 프레임을 포함해 LAN카드로 나감 -> 인터넷 

 

 

*이더넷 프레임: 물리적인 정보 포함

*패킷: 패키지 + 버킷

 

 

TCP 특징

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

 

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

      - 논리적으로 연결이 성립된 것이다. 물리적으로 나를 위한 전용 랜선이 보장되는게 아니다.

      - 클라이언트와 서버 둘다 서로를 믿을 수 있음

      - 서버가 중간에 꺼져 있는 경우에는 서버가 응답을 안받고 연결 성립이 안된다.

      - 요즘엔 최적화가 되어 3.ACK를 보낼 때 데이터도 전송한다.


   • 데이터 전달 보증

      - 클라이언트가 서버에게 데이터를 전송하면 서버는 잘 받았다고 응답을 한다. 

      - 내가 보낸 패킷이 중간에 누락되었을 경우 내가 알 수 있다. 

   • 순서 보장

     - 클라이언트가 패킷1, 패킷2, 패킷 순으로 보냈을 때 서버에 만약 패킷1, 패킷3, 패킷2 순서로 도착한다면

     - 서버는 패킷2부터 다시 보내라고 요청한다. 

     - TCP/IP 패킷 정보에 전송 제어, 순서, 검증 정보들이 있기 때문에 가능하

  • 신뢰할 수 있는 프로토콜
  • 현재는 대부분 TCP 사용

 

 

과정

1. 클라이언트가 서버에게 연결 요청(SYN) 한다

2. 서버가 클라이언트에게 요청정보(SYN), 요청 수락(ACK)을 보낸다. 

3. 클라이언트가 마지막으로 서버와 확인하는 요청 수락(ACK)을 보낸다. 이 때 데이터 전송을 하기도 한다.

4. 1,2,3 과정을 통해 연결이 완료되면 데이터를 전송한다. 

 

 

UDP 특징

 

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

 

• 하얀 도화지에 비유(기능이 거의 없음)
• 연결지향 - TCP 3 way handshake X
• 데이터 전달 보증 X
• 순서 보장 X
• 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
• IP와 거의 같다. +PORT +체크섬(메세지 검증) 정도만 추가
• 애플리케이션에서 추가 작업 필요

 

*체크섬: 이 메시지에 대해서 맞는지 제대로 검증해주는 데이터

 

 

PORT

TCP/IP 패킷에 담기는 정보중에 포트라는 것이 있었다. 

포트는 같은 IP 내에서 프로세스를 구분해준다. 

IP만으로는 클라이언트가 여러 서버랑 통신할 때, 어디서 필요한 패킷인지 구분할 수 없기 때문에 

포트를 사용한다. 그렇기 때문에 패킷 내에 출발지 포트와 목적지 포트가 있는 것이다. 

 

IP는 목적지 서버를 찾는 것이고 서버안에서 돌아가는 애플리케이션을 구분하는 것이 포트다. 

 

 

규칙

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

 

 

 

DNS(Domain Name System)

IP는 기억하기 어렵고, 변경될 수 있기 때문에 DNS를 사용한다. 

DNS란 도메인 명을 IP 주소로 변환해주는 것이다. 

 

도메인을 사서 DNS 서버에 등록한다.

 

클라이언트가 도메인 명(google.com)으로 접속하면

DNS 서버는 도메인명에 일치하는 IP주소를 응답하고, 클라이언트는 그 IP주소로 접속한다. 

 

 

 

 

 

참고

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC#

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com