TCP/IP (3)

yjok·2021년 2월 24일
0

네트워크

목록 보기
5/9

NAT

사설 네트워크에서는 사설 IP를 가지고 그대로 인터넷으로 통신할 수 없다. 인터넷의 서버에 요청을 보낼 때 출발지 IP가 사설 IP 주소인데, 요청은 서버로 보낼 수 있지만, 서버에서 보내는 응답은 목적지가 사설 IP 주소로 되어있기 때문에 인터넷에서는 사설 IP 주소가 목적지로 되어 있는 패킷은 폐기된다.
사설 네트워크에서 인터넷으로 통신하기 위해서는 NAT(Network Address Translation)로 주소를 변환해야 한다.

  1. 사설 네트워크에서 인터넷으로 요청을 전송할 때 출발지의 사설 IP 주소를 변환한다.
  2. 라우터는 변환된 IP 주소를 원래대로 되돌리기 위해 NAT 테이블에 이를 기록한다.
  3. 요청에 대한 응답이 라우터로 돌아오면 NAT 테이블을 참조하여 목적지 IP 주소를 변환한다.

즉, NAT는 사설 IP 주소와 공인 IP 주소를 변환하여 사설 네트워크에서 인터넷으로 통신할 수 있게 하는 역할을 한다.

ICMP

IP 프로토콜에는 목적지에 제대로 도착했는지 확인할 수 있는 방법이 없다. 목적지에 제대로 도착하여 정상적으로 통신이 이루어졌는지 확인하는 기능을 갖춘 프로토콜이 ICMP(Internet Control Message Protocol)이다.
ICMP의 주요 기능은 아래 두 가지이다.

  • 에러 리포트
    IP 패킷을 보내는 도중에 어떠한 이유로 폐기하게 되면, 폐기한 IP 패킷의 출발지로 에러 리포트를 전송한다.
  • 진단 기능
    IP의 엔드투엔드 통신이 가능한지 확인하는 기능으로, 자주 이용하는 명령어로 ping이 있다.

ARP

TCP/IP에서는 IP 주소를 지정해서 데이터를 전송하는데, 호스트의 인터페이스는 MAC 주소로 식별한다. 이 MAC 주소와 IP 주소를 매칭하기 위한 프로토콜이 ARP(Address Resolution Protocol)이다.
IP 패킷에 이더넷 헤더를 덧붙일 때 목적지 MAC 주소를 지정해야 한다. 이 때 목적지 IP 주소에 대응하는 MAC 주소를 구하기 위해서 ARP를 이용하는데 다음과 같이 동작한다.

  1. ARP 요청으로 IP 주소에 대응하는 MAC 주소 질의(브로드캐스트로).
  2. 질의받은 MAC 주소에 해당하는 호스트가 ARP 응답으로 이를 알려준다.
  3. 받은 MAC 주소와 IP 주소 대응 정보를 ARP 캐시에 보존한다.

포트 번호

호스트에서 동작하는 애플리케이션에 데이터를 배분하기 위해서 각각의 애플리케이션을 구분해야 하는데, 이 때 사용하는 것이 포트 번호이다. 이 포트 번호는 TCP 또는 UDP 헤더에 지정하며, 16비트이기 때문에 지정할 수 있는 범위는 0~65535이다. 포트의 범위마다 다음과 같은 의미를 가진다.

  • well-known 포트(0~1023) : 서버 애플리케이션용으로 예약된 포트 번호
  • 등록된 포트(1024 ~ 49151) : 자주 이용되는 애플리케이션의 서버 쪽 포트 번호
  • 동적/사설 포트(49152 ~ 65535) : 클라이언트 애플리케이션용 포트 번호

TCP

TCP(Transmission Control Protocol)는 신뢰성이 있는 애플리케이션 간의 데이터 전송을 하기 위한 프로토콜이다.
전송할 애플리케이션 데이터의 크기가 크다면 이를 분할하여 여러 개의 TCP 세그먼트로 전송한다. 각 TCP 세그먼트에 TCP 헤더를 추가하면서 목적지에 전달하는데, TCP 헤더에는 포트 번호, 시퀀스 번호ACK 번호 등이 저장되어 있다.
시퀀스 번호는 분할된 TCP 세그먼트를 다시 원래대로 재조합할 때 사용하고, ACK 번호는 데이터를 바르게 수신했음을 확인하기 위해 사용된다.

3 Way-Handshake

TCP는 신뢰성 있는 전송을 위해 데이터를 송수신하는 애플리케이션 간의 통신이 정상적으로 이루어질 수 있는지 확인하는데, 이 과정을 3 Way-Handshake라고 한다.

  1. 클라이언트가 서버에게 접속을 요청하는 SYN 패킷을 보낸다.
  2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK와 SYN flag가 설정된 패킷을 발송한다.
  3. 클라이언트는 서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터 전송이 이루어진다.

UDP

UDP(User Datagram Protocol)는 TCP와 달리 데이터가 제대로 전달되었는지 확인하는 과정을 거치지 않는다. 데이터의 크기가 커도 분할하지 않고 그대로 보내므로, TCP처럼 여러 전처리 작업을 하지 않기 때문에 데이터 전송 효율이 좋다는 장점이 있다. 하지만 그만큼 신뢰성이 좋지 않다는 단점이 있다.
UDP는 IP 전화의 음성 데이터와 같은 실시간 데이터 전송을 할 때 주로 사용하는 프로토콜이다.

DNS

TCP/IP로 통신할 때 IP 주소를 지정해야 하는데, 많은 서버와 통신할 때마다 각 서버의 IP 주소를 기억하여 사용한다는 것은 어려운 일이므로 사람이 이해하기 쉽도록 호스트명을 붙여서 사용한다.
네이버에 접속할 때 네이버의 IP 주소가 아니라 URL을 입력해서 접속하는 것처럼 호스트명으로 통신 상대를 지정하는데, TCP/IP에서 통신하려면 IP 주소를 지정해야 하므로 각 호스트명에 해당하는 IP 주소를 구해야 하는데 이러한 일을 하는 담당하는 것이 DNS(Domain Name Service)이다.

DHCP

TCP/IP를 이용하여 통신하기 위해서는 PC 등의 호스트 기기에 IP 주소, 서브넷 마스크 등의 TCP/IP 설정이 바르게 되어 있어야만 한다. 이러한 TCP/IP 설정을 자동으로 해주는 것이 DHCP이다. DHCP를 이용하려면 DHCP 서버를 준비하고, 할당할 IP 주소 등 TCP/IP 설정을 등록해 둔다. 그리고 호스트에서 DHCP 클라이언트가 되도록 설정하는데, DHCP 서버와 다음 네 가지 메시지를 주고받으면서 자동으로 설정한다.

  1. DHCP DISCOVER : DHCP 서버 확인, 사용가능한 TCP/IP 설정 요청
  2. DHCP OFFER : 사용가능한 TCP/IP 설정 응답
  3. DHCP REQUEST : 해당 TCP/IP 설정을 사용하겠다고 요청
  4. DHCP ACK : 확인 후 TCP/IP 설정
profile
안녕하세요 함께 공부합시다

관심 있을 만한 포스트

0개의 댓글