[Network] 5. ARP, TCP, UDP
ARP (Address Resolution Protocol)
- ARP는 IP 주소를 MAC 주소와 매칭시키기 위한 프로토콜이다. 즉, 물리적인 주소인 MAC 주소와 논리적인 주소인 IP 주소를 대응 시키는 역할을 한다.
- MAC 주소란?
- 네트워크 상에서 서로를 구분하기 위하여 Device 마다 할당된 물리적인 주소를 뜻하며, 정확한 정의로 컴퓨터에 장착된 랜 카드를 구별하기 위해 만들어진 식별 번호이다.
- 또한 데이터링크 계층(제 2계층)에서 통신을 위해 사용되는 48bit 로 된 식별자이다. MAC 주소는 8비트 마다 하이픈(
-
) 이나 콜론 (:
) 으로 구분하여 16진수로 표기한다.
- 네트워크 통신을 하기 위해서는 제 3계층(네트워크)으로부터 받은
Packet
을Frame
(데이터링크 계층에서의 데이터 단위)으로 만들어 케이블로 흘려보내야 하는데, 이때 출발지 MAC 주소는 자기 자신의 NIC 에 쓰여 있는 MAC 주소라서 알 수 있지만 목적지 MAC 주소는 알 수가 없다. - 이 때 ARP를 이용하여 IP 주소로부터 MAC 주소를 구할 수 있다.
- NIC(Network Interface Card)는 컴퓨터, 네트워크 안에서 컴퓨터끼리 통신하는 데 쓰이는 하드웨어의 하나이다. 랜 카드라고 흔히 말하며, OSI 계층 1(물리 계층)과 계층 2(데이터 링크 계층) 장치를 가지는데, MAC 주소를 사용하여 낮은 수준의 주소 할당 시스템을 제공하고 네트워크 매개체로 물리적인 접근을 가능하게 한다.
- ARP 의 과정은 ARP request $\rightarrow$ ARP reply $\rightarrow$ ARP 테이블 등록 순이다.
- 동일 네트워크 상에서는 수집된 ARP 테이블을 참고하여
Frame
을 만든다. 다른 네트워크 간 통신은 기본 게이트웨이의 MAC 주소를 ARP 에서 조회하여 목적지 MAC 주소로 등록한다. 기본 게이트웨이
는 자신 이외의 네트워크로 갈 때 사용하는 출구가 되는 IP 주소이다. 보통 방화벽이나 라우터의 IP 주소가 기본 게이트웨이가 되는 경우가 많다.- IP 주소는 목적지까지 바뀌지 않지만 MAC 주소는 NIC 를 경유할 때 마다 바뀐다.
TCP (Transmission Control Protocol)
-
TCP 는 Transmission Control Protocol 의 약자이고, UDP 는 User Datagram Protocol 의 약자이다. 두 프로토콜은 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는
IP 프로토콜
을 기반으로 구현되어 있지만, 서로 다른 특징을 가지고 있다. - TCP 는 인터넷 상에서 데이터를 메세지의 형태로 보내기 위해 IP 와 함께 사용하는 프로토콜이다. 전송 제어 프로토콜로 IP 와 함께 TCP/IP로 불리며 제 4계층(전송 계층)에서 사용되는 프로토콜이다. IP 는 배달을, TCP 는 패킷의 추적 및 관리를 하게 된다.
- TCP 는 데이터를 송신할 때 마다 확인 응답을 주고 받는 절차가 있어서 통신의 신뢰성을 높인다. 웹이나 메일, 파일 공유 등과 같이 데이터를 누락시키고 싶지 않은 서비스에 주로 사용된다.
- 또한 TCP 는 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟(데이터, 메세지, 세그먼트라는 블록 단위)을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.
TCP 의 특징
-
1) 연결형 서비스: 연결형 서비스로 가상 회선 방식을 제공한다.
- 이 때 3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking 으로 연결을 해제한다.
- TCP 3-hand-shake
- 3-hand-shake 는 네트워크 연결을 설정하는 과정이다.
- TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
- 실제 과정
- 먼저 open()을 실행한 클라이언트가
SYN
을 보내고SYN_SENT
상태로 대기한다. - 서버는
SYN_RCVD
상태로 바꾸고SYN
과 응답ACK
를 보낸다. SYN
과 응답ACK
을 받은 클라이언트는ESTABLISHED
상태로 변경하고 서버에게 응답ACK
를 보낸다.- 응답
ACK
를 받은 서버는ESTABLISHED
상태로 변경한다.
- 먼저 open()을 실행한 클라이언트가
- TCP 4-hand-shake
- 4-hand-shake 는 연결을 해제하는 과정이다.
- Termination(해제)의 종류
- Graceful connection release(정상적인 연결 해제): 정상적인 연결해제에서는 양쪽 커넥션이 서로 모두 닫을 때까지 연결되어 있다.
- Abrupt connection release(갑작스런 연결 해제): 갑자기 한 TCP 엔티티가 연결을 강제로 닫는 경우 혹은 한 사용자가 두 데이터 전송 방향을 모두 닫는 경우에 발생한다.
- 실제 과정
- 먼저 close()를 실행한 클라이언트가
FIN
을 보내고FIN_WAIT1
상태로 대기한다. - 서버는
CLOSE_WAIT
으로 바꾸고 응답ACK
를 전달한다. 동시에 해당 포트에 연결되어 있는 어플리케이션에게 close()를 요청한다. ACK
를 받은 클라이언트는 상태를FIN_WAIT2
로 변경한다.- close() 요청을 받은 서버 어플리케이션은 종료 프로세스를 진행하고
FIN
을 클라이언트에 보내LAST_ACK
상태로 바꾼다. FIN
을 받은 클라이언트는ACK
를 서버에 다시 전송하고TIME_WAIT
으로 상태를 바꾼다.TIME_WAIT
에서 일정 시간이 지나면CLOSED
된다.ACK
를 받은 서버도 포트를CLOSED
로 닫는다.- 반드시 서버만
CLOSE_WAIT
상태를 갖는 것은 아니다. - 서버가 먼저 종료하겠다고
FIN
을 보낼 수 있고, 이런 경우 서버가FIN_WAIT1
상태가 된다. - 누가 먼저 close() 를 요청하느냐에 따라 상태가 달라질 수 있다.
- 반드시 서버만
- 먼저 close()를 실행한 클라이언트가
- 2) 흐름제어(Flow Control)
- 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지한다.
- 즉 송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막는다.
- 수신자가 윈도우크기(Window Size) 값을 통해 수신량을 정할 수 있다.
- 3) 혼잡제어(Congestion Control)
- 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지한다.
- 정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.
- 4) 신뢰성이 높은 전송(Reliable transmission)
- Dupack-based retransmission
- 정상적인 상황에서는
ACK
값이 연속적으로 전송되어야 한다. - 그러나
ACK
값이 중복으로 올 경우 패킷 이상을 감지하고 재전송을 요청한다.
- 정상적인 상황에서는
- Timeout-based retransmission
- 일정시간 동안
ACK
값이 수신을 못할 경우 재전송을 요청한다.
- 일정시간 동안
- ACK
- 기본적으로
ACK
는 TCP Header에 포함되어있는 4 Byte(32bit)크기의 정수 데이터이다. - TCP 통신에서
ACK
는 패킷 도착여부를 확인 하기위해 사용된다. - 수신한 패킷의 Sequence Number 와 Data 의 크기에 따라
ACK
번호가 결정되는데, 결정할 때 사용하는 공식은 “SEQ + (Data Size)” 이다. - Data Size 가 0이라면 같은
ACK
을 반복하게 된다. 이것을 방지하기 위해 받은 패킷의 Data Size 가 0이라면 Sequnce 번호에 1을 더한 값을ACK
으로 설정한 후 패킷을 전달하게 된다. - A 는 데이터를 보낸 후 B 한테 까지 정상적으로 데이터가 도착했으면 받아야 할
ACK
값을 받지 못하면 TCP의 에러제어에 의해서 패킷을 재전송 하게된다. - 이 때 재전송 하기 위해 A는 보낸 패킷을
ACK
을 받을 때 까지 보관한다. - 그리고 마지막으로 A 는 다음 SEQ 번호에 가장 최근에 받은
ACK
번호를 사용해서 다음 패킷을 전송한다.
- 기본적으로
- Dupack-based retransmission
- 5) 전이중, 점대점 방식
- 전이중 (Full-Duplex): 전송이 양방향으로 동시에 일어날 수 있다.
- 점대점 (Point to Point): 각 연결이 정확히 2개의 종단점을 가지고 있다.
- 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다.
TCP Header
-
응용 계층(L4 In TCP/IP 4계층)으로부터 데이터를 받은 TCP 는 헤더를 추가한 후에 이를 IP 로 보낸다. 헤더에는 아래 표와 같은 정보가 포함된다.
TCP 헤더
제어비트(Flag Bit) 정보
-
ACK 제어비트
- ACK 는 송신측에 대하여 수신측에서 긍정 응답으로 보내지는 전송 제어용 캐릭터
- ACK 번호를 사용하여 패킷이 도착했는지 확인한다.
- 송신한 패킷이 제대로 도착하지 않았으면 재송신을 요구한다.
UDP (User Datagram Protocol)
-
UDP 는 TCP 와 함께 데이터그램(데이터그램은 사용자의 순수한
message
를 다르게 부르는 말)으로 알려진 단문 메시지를 교환하기 위해 사용하는 프로토콜이다. - 데이터만 보내고 확인 응답과 같은 절차를 생략할 수 있으므로 통신의 신속성을 높인다. 주로 DNS, VoIP 등에 사용 된다.
- 비연결형 프로토콜이다.
- 할당되는 논리적인 경로가 없고 각각의 패킷이 다른 경로로 전송되고 이 각각의 패킷은 독립적인 관계를 지니게 되는데, 이렇게 데이터를 서로 다른 경로로 독립 처리하는 프로토콜을 UDP 라고 한다.
- 신뢰성이 낮으나, TCP보다 속도가 빠르다.
UDP Header
-
응용 계층으로부터 데이터를 받은 UDP 도 UDP 헤더를 추가한 후에 이를 IP 로 보낸다.
- UDP 는 수신자가 데이터를 받는지 아닌지 관심이 없기 때문에 헤더에 포함된 정보가 부실하다. 즉, 신뢰성을 보장해주지 않지만 간단하고 속도가 빠른 것이 특징이다.
- TCP 와 UDP 모두 포트 번호로 서비스를 식별한다. 즉 포트 번호를 이용하여 주소를 지정한다. 또한 데이터 오류검사에 사용하는 체크섬이 존재한다.
- 두 프로토콜을 구분하는 주요한 차이는 통신의 신뢰성이냐 신속성이냐 이다.
TCP, UDP 정리 및 주요 차이점
TCP | UDP |
---|---|
Connection-oriented protocol (연결지향형 프로토콜) - 연결이 성공해야 통신 가능 | Connection-less protocol (비연결지향형 프로토콜) - 연결 없이 통신 가능 |
Connection by byte stream (바이트 스트림을 통한 연결) - 데이터의 경계를 구분하지 않음 | Connection by message stream (메세지 스트림을 통한 연결) - 데이터의 경계를 구분함 |
Congestion / Flow control (혼잡제어, 흐름제어) | NO Congestion / Flow control (혼잡제어와 흐름제어 지원 X) |
Ordered, Lower speed (순서 보장, 상대적으로 느림) | Not ordered, Higer speed (순서 보장되지 않음, 상대적으로 빠름) |
Reliable data transmission (신뢰성 있는 데이터 전송 - 안정적, 데이터의 재전송 존재) | Unreliable data transmission (데이터 전송 보장 X, 데이터 재전송 없음) |
TCP packet : Segment (세그먼트 TCP 패킷) | UDP packet : Datagram (데이터그램 UDP 패킷) |
HTTP, Email, File transfer 에서 사용 | DNS, Broadcasting (도메인, 실시간 동영상 서비스에서 사용) |
일 대 일(Unicast) 통신 | 일 대 일, 일 대 다(Broadcast), 다 대 다(Multicast) 통신 |
댓글 남기기