기초컴퓨터네트워크 20 (ARP, DHCP, ICMP, NAT)

TonyHan·2021년 5월 20일
0
post-custom-banner

=== Address Resolution Protocol (ARP) ===

1. Logical address vs. physical address

• logical address: IP address : 데이터를 전달받기 위해서는 ip address가 필요하다.
– address used at the Network layer
– allocated when host is connected to the Internet

• physical address: Ethernet MAC address : 하지만 ip address 말고도 MAC address가 존재한다. 이것을 physical address라고 부른다.
– address used at the Data link layer
– assigned when the hardware comes out of the factory : hardware에 할당된 주소이다.

• data forwarding at Data link layer : Data link layer에서는 이 MAC address를 이용해서 데이터를 전달한다. 따라서 목적지의 ip address와 physical address가 mapping 되어야 한다.
– physical address is used
– logical address (IP address) should be mapped to a physical address

ARP (Address Resolution Protocol)

그런데 어떤 address가 ip address는 알아도 mac address는 모르는 경우가 있을 수 있다. ip address로 부터 mac address를 알때 사용하는 ARP 이다.

참고로 MAC address는 48bit이다.(ip address는 32bit)

• Used when the sender knows destination IP address but not the MAC address
• Broadcast ARP request : 망 전체로 ARP 요청한다.
• The host who has the corresponding physical address sends back ARP reply : 나와 연결된 host들이 연결된다. 그 중에 ip address와 동일한 host가 ARP reply에 자신의 ip address와 physical address를 담아서 보내준다.(unicast)
• The sender records the physical address in the ARP table
– So that it does not need to ask every time

• ARP is considered a Link Layer protocol (layer 2).

ARP packet format

각 라인마다 byte가 다르다는 것을 인지하고 총 크기는 28byte이다.

Target의 hardware, protocol address와 자신의 hardware, protocol address를 넣어준다.(안해주면 돌려받을때 또 ARP 해야 하니까)

• Hardware type: network type
– e.g.: Ethernet

• Protocol type: Protocol that is using ARP to resolve address
– e.g.: IP

Hardware Type은 이더넷을 이야기 한다.
protocol Type은 ip같은거

• Hardware length: physical address length : 아래쪽 부분을 읽기 위한 길이
– e.g.: Ethernet = 6

• Protocol length: logical address length
– e.g.: IP = 4

• Operation: ARP request or reply : 1은 Request, 2는 Reply

Encapsulation of ARP packet

ARP가 필요하면 link layer에서 frame을 만들어서 전송을 하는 것이다.

• ARP packet is encapsulated in the data link frame

• The ‘Type’ field indicates that the ‘Data’ is the ARP request/reply

data link frame은 위와 같은 형태로 만들어지게 된다. Data 부분에 28byte짜리 ARP 패킷 format이 데이터로 들어간다.

dest, src address가 들어가게 된다. physical address가 들어가게 된다. dest에는 broadcast address가 들어가게 된다.(1.1.1.1). reply시에는 어디로 돌아가야 하는지 아니까 그 주소가 들어간다.

type은 Data에 있는 내용이 ARP라는 것을 알려주게 된다. CRC는 에러체킹용이다.

ARP protocol operation

위에서 이미 다룬 내용이다.

• Source knows Destination’s IP address, but not the physical address. (thus cannot send packets.)
• Source generates an ARP request
– Includes source IP address, physical address, and destination IP address

• ARP request is broadcast : ARP가 broadcast를 하게 된다.
• All hosts in the network receives ARP request : 모든 호스트가 ARP request를 받게 된다.
• The host who has the destination IP address replies to the packet. All other hosts discard the packet. : dest IP address에 해당하는 host만 받아드이고 나머지는 그냥 버린다.

• Destination node sends ARP reply to the Source : dest가 ARP reply를 보낸다.
– The packet is sent only to the Source (unicast), since
Destination knows Source physical address

• Source finds out Destination physical address when receiving ARP reply : src가 받아서 physical address를 알게되고 ARP table에 기록을 해놓는다.

ARP: example

• IP address of a host is 130.23.43.20, and its physical address is B2:34:55:10:22:10.

• This host needs to send to destination whose IP address is 130.23.43.25, and physical address is A4:6E:F4:59:83:AB.

• The source host does not know physical address of the destination host. So it needs to use ARP. : src가 dest host의 physical address를 모르는 상태일때 ARP를 사용하게 된다.

• What will be the contents of ARP request and reply?

=== Dynamic Host Configuration Protocol (DHCP) ===

1. Host Configuration

• Ethernet address (physical address) : 제조사에서 네트워크 interface를 만들때 부여되는 값이다.
– Configured by manufacturer

  • IP address (logical address) : IP address는 자신의 위치에 따라 달라진다.
    • Must reflect the structure of the internetwork
      • IP address depends on which network the device is currently in
    • When devices moves, IP address must change
    • Manual configuration is burdensome and error-prone : ip address는 아무거나 쓰면 안되고 반드시 unique해야 한다. 어떤 ip address를 쓸 수 있는지 알아서 넣어주어야 한다. 하지만 이게 상당히 번거롭고 충돌이 날 수도 있다.

• Automatic configuration of IP address needed : 그래서 자동으로 탐색하고 그것을 입력해주는 것이 DHCP이다.


(요약)
• Automatic configuration of IP address needed : 그래서 자동으로 탐색하고 그것을 입력해주는 것이 DHCP이다.

DHCP 과정
1. 호스트가 DHCP discover msg를 broadcasting
2. 서버가 사용할 수 있는 IP를 찾아서 DHCP offer msg를 보낸다.
3. 호스트가 IP를 보고 DHCP request를 보냄
4. 서버가 DHCP ack을 보내면 호스트가 그 IP를 사용할 수 있다.


Dynamic Host Configuration Protocol

• DHCP server exists in the network
– At least one DHCP server for an administrative domain

• DHCP server maintains a pool of available addresses : DHCP는 사용가능한 주소를 가지고 있다.

• DHCP server leases IP address to a host for a certain amount of time : 어떤 새로운 host가 들어오면 lease를 해준다. 특정 시간동안 ip address를 device에 할당해주는 것이다.

• Hosts may renew the address if they want to continue using the address : 잘 사용하고 있다면 renew 해준다.

• DHCP is an Application Layer protocol : Application layer protocol이다.

• Newly booted or attached host sends DHCPDISCOVER message to a special IP address (255.255.255.255) : 새롭게 접속한 host가 DHCPDISCOVER 메세지를 모든게 1인(255.255.255.255) ip address를 broadcast 해준다.

• DHCP relay agent unicasts the message to DHCP server and waits for the response : DHCP relay가 DHCP server 쪽에 요청을 보내서 host가 ip를 할당을 받을 수 있게 해주는 경우도 있다.

=== ICMP (Internet Control Message Protocol) ===

1. ICMP

• IP does not have a mechanism for reporting errors
– when the packet is dropped due to error : error가 있으면 패킷이 드랍된다.
– when the packet is dropped due to TTL (Time-To-Live) : TTL이 0이 되어서 드랍된다.
– when the packet is dropped because one of the fragments is lost : fragment가 lost되서 드랍된다.

하지만 ip는 이것에 대해 아무것도 대응해주지 않는다.

• The purpose of ICMP is to report errors to the source : 에러가 났을 때 src쪽으로 error report역활로 ICMP가 생기게 되었다.

• ICMP is a Network Layer protocol

ICMP format

ICMP functions

• Error reporting
에러 보고

• Query
인터넷 망에 쿼리를 날리고 싶을때 쿼리의 기능을 해준다.

ICMP: error reporting

• ICMP reports to the source IP address under following occasions

drop된 패킷에서 src ip로 report를 보내게 된다.

그래서 사진의 5가지 경우에 대해서 reporting해준다.

• Destination unreachable : 목적지가 있는데 라우터에 거기로 가는 경로가 없는 경우, 패킷 drop하고 unreacheable이라고 돌려준다.
– Cannot find the next node for the destination

• Source quench : 라우터의 pool이 full인 경우
– Queue of the router or the host is full

• Time exceeded : TTL이 0이 되어 패킷이 드랍된 경우
– TTL became 0 and the packet is discarded

• Parameter problems : 그 외에 헤더에 length가 잘못된것과 같이 문제가 있는 경우 패킷 드랍, 리포팅
– Problem in the header fields


• redirection : 어떤 망에 gateway router을 통해서 다른 망으로 가는데 gateway router가 여러개가 있으면 그 망의 어떤 host가 그중에 하나를 gateway router로 지정을 한다. 하지만 사용하다 보니 다른쪽 라우터가 더 좋아서 그쪽으로 패킷을 보내라고 redirection하는 것이다.
– occurs when there are multiple gateway routers in a network
– a host often assigns a default gateway without
computing the best route
– if a router finds a better route, it reports to the source node to reassign the gateway router

• redirection: example
– Routers R1 and R2 are in the same network with host A
– Host A’s default gateway is R1 (manually assigned)
– When data is forwarded from A to R1, it finds out that it is better for A to send the packet to R2 for destination host B
– R1 sends data to R2 and also sends redirection report to A

처음에는 manually router 1으로 설정되어 있다. 그런데 이번에는 B쪽으로 보내기 위해서는 R2로 보내는 것이 보다 효율적이다. 그래서 R1이 A로 ICMP를 보내서 R2쪽으로 보내라고 redirection하게 된다.


• ICMP rules

  • ICMP packet is not generated for ICMP packets : ICMP가 드랍되더라도 다시 ICMP을 보내지는 않는다.
  • For fragmented packets, ICMP packet is generated only for the first fragment : first fragment에 대해서만 ICMP 패킷을 발생시킨다.
  • ICMP is not generated for multicast packets : multicast에 대해서도 ICMP를 생성하지 않는다.
  • ICMP is not generated for packets with special destination addresses (such as 127.0.0.1 or 0.0.0.0) : special destination에 대해서도 보내지 않는다.

ICMP: query

• ICMP can be used to query informationIntroduction to Computer Networks

• Echo request & reply
– ping
– used to check if the destination is available

간단한것을 보내서 응답이 오는가만을 확인한다.(살아있는지 확인하는 것) 그것을 이용해서 만든것이 ping이다. 예전에는 ping이 안오면 죽은거 취급했지만 요즘에는 보안을 위해 대답을 안하는 경우도 존재

• Time stamp request & reply
– used to find out round-trip time to the destinationIntroduction to Computer Networks

echo에다가 시간까지 추가한 것이다. 어떤 목적지까지의 RTT을 알기 위해서 만들것

• Address-mask request and reply
– When a host knows its IP address, but not the mask
– It broadcasts address-mask request
– Any node replies with the address-mask reply

망의 ip address는 아는데 mask를 모르는 경우 broadcast해서 어떤 라우터가 address-mask를 알면 응답해주는 구조이다.

• router solicitation and advertisement
– A host sends router solicitation to find out what routers are in the network
– A router sends router advertisement to let the hosts know that the router existsIntroduction to Computer Networks

어떤 호스트가 망에 어떤 라우터가 있는지 찾기 위해 보내는 것이 solicitation이다. 반대로 라우터가 내가 있다고 다른 호스트들에게 이야기 하는 것을 router advertisement이다. 이것들이 ICMP를 이용해서 할 수 있는 것들이다.

IP-level debugging tools

• Uses ICMP for debugging purposes
• ping
• traceroute : 어떤 목적지까지 가는 중간 라우터를 알아내는 기능

ping

• An application to send ICMP messages to a
destination host to find out if it is available
– uses ICMP echo request / replyIntroduction to Computer Networks

여러번 보내서 응답이 오는 시간을 측정하는 식으로 처리할 수도 있다.

traceroute (tracert)

• An application to trace routers between source and
destination hosts

traceroute (tracert) operation

• A sends a UDP packet to B, setting TTL=1.
• The packet is dropped at R1, and an ICMP is sent to A.
– time exceeded
• Using this ICMP, A knows R1’s IP address and the round-trip time from A to R1.
• Multiple UDP packets are sent to get average round-trip time
• When this is done, increment TTL by 1.


tracerouter 동작방법
1. UDP 패킷을 만들어서 B에 있는 사용되지 않을거 같은 포트쪽으로 UDP 패킷을 보낸다. 그러면서 TTL=1 로 만든다.
2. R1으로 가서 TTL을 0으로 만들고 드랍한다. 그러면 ICMP가 만들어지면서 A로 보내진다. 그때 error reporting중에 time exceeded가 된다.
3. A는 받는 시간을 알고 있기 때문에 RTT를 계산해서 그걸 저장하는 것이다.
4.
5. 그 다음에는 1증가 시켜서 그 다음 라우터로 보내서 드랍하고 ICMP가 돌아오고 RTT를 또 저장한다.

• At the destination host, ICMP (time exceeded) is not send to A.
• However, there is no UDP port receiving traceroute packets at the destination host
• Thus, an ICMP (destination unreachable) is generated and sent to A.Introduction to Computer Networks

  1. 결국 목적지에 도착하면 TTL이 0으로 drop 된게 에러가 아니라서 ICMP가 전달되지 않는다.
  2. UDP 포트는 이를 듣고 있지 않기 때문에 drop되고
  3. ICMP(destination unreachable)이라눈 error reporting A쪽으로 보내지게 된다. 그것을 보고 마지막 줄을 쓰게 된다.

=== Network Address Translation ===

1. NAT: Network Address Translation

• A router can create a local network using network address
translation

프로토콜은 아닌데 자주 사용하는 방법이다. 유무선 공유기 같은 것을 사용할때 NAT를 함께 해주는 라우터라고 생각하면 된다.

라우터는 public ip address에 해당하는 ip 하나를 할당받게 된다. 하나의 ip address를 가지고 거기에 접속하는 기기들은 내가 받은 ip address와는 다른 ip adress로 translation해준다. 그래서 한 라우터가 그 내부 기기들의 모든 ip를 할당을 해준다.

하지만 외부하고는 하나의 ip address를 달고 나가게 된다. 그럼 밖에 있는 서버가 10.0.0.3 에 무엇을 보낼때 우선 138.76.29.7로 보내서 처리하게 된다.

이것의 구분을 포트 번호를 가지고 하게 된다. 10.0.0.1/10000으로 온거면 NAT table에다가 이 포트번호는 무엇으로 하고 나가는 ip 번호를 붙여서 패킷을 보내게 된다.

• Motivation: local network uses just one IP address as far as outside world is concerned
– range of addresses not needed from ISP: just one IP address for all devices
– can change addresses of devices in local network without notifying outside world
– can change ISP without changing addresses of devices in local network
– devices inside local network not explicitly addressable, visible by outside world (a security benefit)Introduction to Computer Networks

원래는 하나의 ip address를 가지고 있어야 하지만 밖에서는 하나의 ip이지만 내부에서만 다른 ip를 가지고 있게 된다.

내부에서는 ip address를 아무리 바꾸어도 밖에서는 아무런 변화가 없다.

안쪽의 ip address는 고정하고 외부 ISP를 바꾸어도 안쪽 address는 바뀌지 않는다.

local network 안쪽에 있는 host들은 바깥쪽에 있는 서버에 메세지를 보낼 수 있지만 처음에 바깥쪽에 있는 서버에서 안쪽에 있는 네트워크로 메세지를 보낼 수는 없다.

  • A NAT router must implement following functions
    • outgoing datagrams: replace (source IP address, port #) of every outgoing datagram to (NAT IP address, new port #)
      • remote clients/servers will respond using (NAT IP address, new port #) as destination addr
        밖으로 나가는 datagram의 경우, source IP address와 port번호가 있을 것이다. 이것을 NAT IP address와 자기가 정한 포트번호로 바꾸어놓고 이를 기억한다.
    • remember (in NAT translation table) every (source IP address, port #) to (NAT IP address, new port #) translation pair
      바깥쪽 서버는 이 ip와 port번호를 기억하고 있기 때문에 이 ip, port로 패킷을 보내면 된다. -> 이것때문에 처음에 외부 서버에서 내부로 패킷을 보낼 수 없는 것이다.
    • incoming datagrams: replace (NAT IP address, new port #) in dest fields of every incoming datagram with corresponding (source IP address, port #) stored in NAT tableIntroduction to Computer Networks
      incoming datagram에 대해서는 nat ip address, net port를 source ip, port로 바꾸어준다.

(요약)

  • A NAT router must implement following functions
    • outgoing datagrams : 밖으로 나가는 datagram의 경우, source IP address와 port번호가 있을 것이다. 이것을 NAT IP address와 자기가 정한 포트번호로 바꾸어놓고 이를 기억한다.
    • remember : 바깥쪽 서버는 이 ip와 port번호를 기억하고 있기 때문에 이 ip, port로 패킷을 보내면 된다. -> 이것때문에 처음에 외부 서버에서 내부로 패킷을 보낼 수 없는 것이다.
    • incoming datagrams : incoming datagram에 대해서는 nat ip address, net port를 source ip, port로 바꾸어준다.

10.0.0.1 이 바깥쪽에 있는 128.119.40.186:80으로 보낼려고 한다.
이때 local을 public address로 바꾸어 준다. 138.76.29.7:5001로 바꾸고 테이블도 바꾼다.
외부 서버에서는 응답에 대해 138.76.29.7:5001으로 보내고
내부에서는 이에 맞는 ip address와 포트번호로 바꾸어준다.


example

10.0.0.1 이 바깥쪽에 있는 128.119.40.186:80으로 보낼려고 한다.
이때 local을 public address로 바꾸어 준다. 138.76.29.7:5001로 바꾸고 테이블도 바꾼다.
외부 서버에서는 응답에 대해 138.76.29.7:5001으로 보내고
내부에서는 이에 맞는 ip address와 포트번호로 바꾸어준다.

NAT: Network Address Translation

• Private IP address range
– 10.0.0.0 - 10.255.255.255 (class A)
– 172.16.0.0 - 172.31.255.255 (class B)
– 192.168.0.0 - 192.168.255.255 (class C)
– Used by local networks
– Not used as public addresses

ip address는 위 3가지 클래스 안에 있을 것이다. 가장 많이 보는게 class C인데 이건 public이 아닌 local망에서 쓰는 ip address라고 보는것이 맞다.

• Port Forwarding
– The problem with NAT is when a server is inside a local network
– The client cannot address the server
– The NAT router should manually be configured to forward packets with a particular destination port to a specific local IP addres

NAT을 사용할 경우 WEB Server나 FTP를 동작시킬때 문제가 생긴다. local net 상황에서 서버가 local ip address를 가질때 클라이언트가 서버 ip주소에 데이터를 보낼 수가 없는 상황이 생긴다.
이런식으로 서버를 운영할떄는 서버 포트가 3000번이다 하면 라우터가 설정을 해주어야 한다. 예를 들어서 3000번 포트로 무언가가 오면은 192.168.0.101로 보내야 한다고 configuration해주고 라우터는 서버가 public ip address:3000으로 해주어 client에 보내준다.

profile
신촌거지출신개발자(시리즈 부분에 목차가 나옵니다.)
post-custom-banner

0개의 댓글