TCP/IP, UDP, ARP 프로토콜

728x90

TCP/IP 프로토콜은 IETF 회의에 의해 표준화되기 때문에 매우 실용성이 높은 기술이다.

TCP/IP 모델은 4개의 계층으로 구성되어 있는데, 하위 3개의 계층은 OSI 7 계층 모델의 하위 4계층(물리, 데이터 링크, 네트워크, 전송 계층)과 일치한다.

TCP/IP 모델의 응용 계층에서는 OSI 7계층 모델의 최상위 3계층(세션, 표현, 응용 계층)의 역할을 담당한다.

아래 그림을 참고하자


전송 계층을 살펴보자

  • 전송 계층은 상위 계층에서 볼 때, 두개의 호스트 간의 자료 전송을 담당하는 계층이다.
  • TCP/UDP 두 종류의 프로토콜이 사용되고 네트워크 양단의 송수신 호스트 사이에서 신뢰성 있는 전송 기능을 제공한다.
  • OSI 7계층 모델에서 세션 계층의 일부 기능과 전송 계층에 해당한다.
  • 시스템의 논리 주소와 포트가 있어 각 상위 계층의 프로세스를 연결하여 통신하고 자세한 것은 TCP/IP 에서 다룬다.
  • TCP(Transmission Control Protocol : 전송 제어 프로토콜) 은 송신지에서 수신지까지 문자 스트림을 전송하는데, 두 응용 계층이 서로 대화하는 것을 허용하는 즉, 두 응용 계층이 서로 연결되어 있는 것을 허용하는 신뢰성 있는 프로토콜이다. 신뢰성이 있는 만큼 ㅎ헤더에 오류코드에 대응할 수 있는 각종 정보가 들어있다.
  • UDP(User Datagram Protocol : 사용자 데이터그램 프로토콜) 은 OSI 7계층 모델에서 정의하는 전송 계층의 일부 역할을 무시하는 단순한 전송 프로토콜이다. TCP 와 달리 연결없이 데이터를 전송만 해준다. 신뢰성이 낮은 대신 패킷을 빠르게 전달해야 하는 곳, 영상같은 것을 전송할 때 주로 사용한다.

네트워크 계층을 살펴보자, 다른 말로 인터넷 계층이라 부른다.

  • OSI 7계층 모델의 네트워크 계층과 비슷하고, 가장 중요한 프로토콜인 IP(Internet Protocol) 은 IP 데이터그램이라는 패킷을 만들고, 수신지에 해당 패킷을 전송한다.
  • 기본 기능으로는 송수신 호스트 사이에 패킷 전달 경로를 선택하는 기능을 수행 한다.
  • 주요 기능으로는 라우팅, 혼잡 제어, 패킷의 분할과 병합에 대한 기능을 수행한다.

용어 설명

  1. 라우팅
    1. 라우팅 테이블 : 네트워크 구성 형태에 관한 정보를 관리
    2. 라우팅 : 송수신 호스트 사이의 패킷 전달 경로를 선택하는 과정
  2. 혼잡 제어
    1. 혼잡 : 네트워크에 패킷 수가 과도하게 증가되는 현상
    2. 혼잡 제어 : 혼잡의 발생을 예방하거나 제거하는 기능
  3. 패킷의 분할과 병합
    1. 상위 계층에서 내려온 데이터는 하위 계층인 MAC 계층의 프레임 구조에 정의된 형식으로 캡슐화 되어야 한다.
    2. 송신 호스트에서는 전송 전에 적절한 크기로 데이터를 분할하고 수신 호스트는 분할되어 수신한 데이터를 다시 병합한다.

이외에도 ARP, ICMP 등 의 프로토콜이 존재한다.

ARP 는 MAC 주소를 IP 주소로 변환하는 프로토콜이고, ICMP 는 오류 메시지를 전송하는 프로토콜이다.

ARP 테이블에 맥주소가 없으면 라우터로 패킷을 일단 보내고 브로드캐스트 방식으로 모두 전달한다.

해당하는 ip 주소가 맞는 녀석에게 리턴 값이 돌아오게 되고 그 녀석의 MAC 주소를 ARP 테이블에 저장한다. 그러면 해당 ip 주소의 MAC 주소를 알게 된다.


네트워크 접속 계층에 대해 살펴보자

  • TCP/IP 모델은 대부분 하나의 네트워크나 다른 네트워크의 송신지에서 수신지까지 데이터를 주고 받는데, 물리 계층과 데이터 링크 계층에서 하는 일은 LAN 과 WAN 을 연결하여 인터넷을 구성하는 것이다.
  • 즉, 운영체제의 네트워크 카드와 디바이스 드라이버 등과 같이 하드웨어적인 요소와 관련된 모든 것을 지원하는 계층이다. 이더넷(유선 통신), 802.11x(무선 통신), MAC/LLC, SLIP, PPP 등..
  • 송신측은 상위 계층으로부터 전달받은 패킷에 물리적 주소인 MAC 주소 정보를 가지고 있는 헤더를 추가하여 프레임을 생성하고 물리 계층으로 전달한다.
  • 수신측은 데이터 링크 계층에서 추가된 헤더를 제거하여 상위 계층인 네트워크 계층으로 전달한다.

위 그림은 OSI 7계층 모델과 TCP/IP 모델을 비교한 것으로 조금 더 이해하기 쉬울 것이다.

TCP의 이해

TCP 의 구조는 헤더 + 데이터로 구성되어 있다.

연결 지향

데이터를 교환하기 전에 서로 TCP 연결을 확립해야 함

신뢰성 있는

메시지를 성공적으로 수신했거나 오류를 발생했다는 것을 알림

포트번호

포트

TCP가 데이터를 전달하거나 받을 때, 상호간에 사용하는 데이터의 이동 경로
상위 계층 프로토콜과 하위 계층 프로토콜은 같은 포트를 사용해야 함

  • 0번 ~ 1023번 : well-known port
  • 1024번 ~ 49151번 : registered port
  • 49152번 ~ 65535번 : dynamic port

TCP 헤더 정보

  • Source Port(16bit) : 수신지 포트 번호. 범위는 0~65,355
  • Destionation Port(16bit) : 목적지 포트 번호. 클라이언트가 수신지 호스트를 요청하는 서버라면 대부분 well-known port
  • Sequence Number(32bit) : 순서 번호로, 세그먼트에 포함된 데이터의 첫 번째 바이트에 부여된 것으로 0 부터 시작해서 232-1 로 끝나서 다시 0으로 돌아온다. 패킷이 수신될 때 이 패킷이 어떤 패킷에서 온 것인지 나타낸다.(중복 방지를 위해 사용한다.)
    양방향 통신일 때는 서버에서 클라이언트로 보내는 순서 번호와 클라이언트에서 서버로 보내는 순서 번호가 각 각 존재한다.
  • Acknowledgment Number(32bit) : 확인 응답 번호로, 순서 번호를 받았다는 것을 확인하는 번호이며 순서 번호 + 1 한 값을 갖는다. 피기배킹을 사용하는 경우 (정보 프레임, 확인 응답 번호) 를 묶어서 보내며 서버에서 클라이언트로, 클라이언트에서 서버로 둘 모두 피기배킹을 한다.
  • Data Offset(4bit) : TCP 헤더길이를 4바이트 워드 값으로 나타냄. 헤더의 길이는 20~60바이트
  • Reserved(6bit) : 나중에 사용하려고 예약된 6비트 필드
  • Flags(6bit) : 프로토콜의 동작을 제어하는 데 사용하는 비트 단위의 플래그

플래그설명

URG Urgent, 긴급 처리 데이터가 있음
ACK Acknowledgment, 받은 패킷에 대한 응답이 있을 시에 발생되는 Flag
PSH Push, 데이터를 보낼 때 발생되는 Flag
RST Reset, 정상적인 종료가 아닌 강제 종료일 때 발생되는 Flag, 연결 재설정
SYN Synchronize, TCP 최초 연결할 때 발생 되는 Flag
FIN Finish, 연결을 종료할 때 발생되는 Flag
  • window(16bit) : 상대방이 유지해야 하는 바이트 단위의 윈도우 크를 정의. 윈도우의 최대 크기는 65,535바이트
  • Checksum(16bit) : 헤드 부분의 오류 검출
  • Urgent Pointer(16bit) : URG 플래그 설정 시 긴급 데이터의 마지막 바이트의 순서 번호. 이 포인터의 값과 순서 번호의 합으로 계산
  • option(24bit) : 송신자가 수신하기를 원하는 세그먼트의 최대 크기를 나타냄

TCP 연결 과정

연결 설정(3-way Handshaking)
1. 클라이언트에서 SYN과 순서 번호를 서버로 보냄. 이때 클라이언트는 SYN_SENT 상태, 서버는 SYN_RECEIVED 상태
2. 서버는 ACK응답을 보내며, 피기배킹으로 SYN를 보냄.
3. 클라이언트는 ACK응답을 보내며, 클라이언트와 서버는 ESTABLISHED 상태(연결 상태가 됐다는 것을 의미)

위 과정을 3way handshake 라고 한다.

TCP 데이터 송수신 과정

연결 설정 완료 후
1. 송신 측에서 데이터를 보내기 위한 PSH 와 연결 상태 유지를 위한 ACK를 보낸다. 즉, 데이터를 보낼 때 세션 유지를 위해서 ACK 을 같이 보내는 것이다.

2. 수신 측에서는 ACK 에 신호번호 + 1 + 수신 데이터 바이트 크기를 더해서 보냄

TCP 연결 종료 과정

(클라이언트에서 종료 요청을 보내는 경우, 서버에서 요청을 보내는 경우 반대로 진행)
1. 종료를 원하는 경우 클라이언트에서 FIN 과 ACK 을 보낸다. ACK 을 계속해서 보내는 이유는 연결을 유지하기 위해서다. 이 때, 클라이언트는 FIN_WAIT 상태 서버는 CLOSE_WAIT 상태가 된다.
2. 서버는 다시 클라이언트로 FIN과 세션 유지를 위한 ACK 을 보낸다. 이 때, 서버는 LAST_ACK 상태가 된다.
3. 클라이언트가 서버로 마지막 ACK 을 보낸다. 이 때, 클라이언트는 TIME_WAIT 상태 진입 후 일정 시간 후 CLOSED 상태가 되고, 서버는 CLOSED 상태가 된다.

위 과정을 3way handshake 라고 한다.

TCP 흐름 제어

데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지

슬라이딩 윈도우

송신 측 컴퓨터는 윈도우 크기에 따라 패킷을 전송하고, 수신측 컴퓨터에서 수신 확인 ACK를 수신하면 ACK에서 요청한 패킷 위치로 송신 윈도우를 오른쪽으로 옮김

UDP

UDP의 이해

비연결 지향 프로토콜로 연결을 하지 않고 (TCP 처럼 세션 유지를 위해 ACK 을 보내지 않는다.) 데이터만 전달하고 끝난다.
패킷이나 흐름 제어, 단편화 및 전송 보장 등의 기능 등을 제공하지 않음 -> DF가 항상 활성화(파현화가 되지 않기 때문)

UDP 헤더 정보

송신지 포트 번호, 수신지 포트 번호, 총 길이, 검사합으로 헤더가 구성됐다. TCP 헤더에 비해 매우 간단한 것을 알 수 있다.

비신뢰성 연결이기 때문에 연결이 유지됐는지 확인할 필요 없이 데이터만 주고 통신이 끝나기 때문!

ARP

주소 결정 프로토콜(Address Resolution Protocol) 로 IP 주소를 물리적 네트워크 주소로 대응시키기 위해 사용되는 프로토콜이다.

3계층 프로토콜로 라우터를 거치지 않는다.

ARP 헤더 정보

하드웨어 주소 타입 - 2바이트

  • 하드웨어 종류 필드 값은 H/W Address Length 필드의 설정을 제어
  • 이더넷: 1
  • HDLC: 17
  • SMDS: 14
  • F/R: 15

프로토콜 주소 타입 - 2바이트

  • 프로토콜 종류는 해당 하드웨어 주소로 제공되는 상위 계층 프로토콜 주소
  • ip: 0800

하드웨어 주소 길이 - 1바이트

  • MAC 주소의 길이: 6

프로토콜 주소 길이 - 1바이트

  • 프로토콜 주소의 길이(IP 주소의 길이) : 4

Operation(Opcode) - 2바이트

  • ARP 요청(request) : 0001
  • ARP 응답(reply) : 0002
  • RARP 요청 : 0003
  • RARP 응답 : 0004

출발지 MAC 주소 - 6바이트

  • 보내는 곳의 MAC 주소

출발지의 Protocol 주소, IP 주소 - 4바이트

  • 보내는 곳의 Protocol, IP 주소

목적지의 MAC 주소 - 6바이트

  • 받는 곳의 MAC 주소
  • 목적지의 IP 주소로 목적지의 MAC 주소를 알아내기 위함이 ARP 의 목적이기 때문에 처음 통신하는 패킷은 MAC 주소가 비어있다.

목적지의 Protocol 주소, IP 주소 - 4바이트

  • 목적지의 Protocol, IP 주소

ARP 패킷은 목적지 MAC 주소가 없다. 목적지의 IP 주소를 이용해 목적지의 MAC 주소를 알아내려는 opcode 가 요청인 패킷이다.

ARP 작동방식

1) 출발지 시스템에서 ARP Cache Table 에 목적지 MAC 주소가 있는지 확인한다.

2) ARP Table 에 원하는 목적지의 MAC 주소가 없으면 ARP request 브로드캐스트로 패킷을 보낸다.

3) ARP request 패킷을 받은 쪽에서 자신의 MAC 주소를 ARP reply 패킷으로 알려준다.

4) ARP reply 패킷을 받은 출발지 시스템은 ARP Cache Table 에 해당 정보를 기록한다.

ICMP (Internet Control Message Protocol 인터넷 제어 메세지 프로토콜)

  • TCP/IP 에서 IP 패킷을 처리할 때 발생되는 문제를 알리거나, 진단 등과 같이 IP 계층에서 필요한 기타 기능들을 수행하기 위해 사용되는 프로토콜
  • IP 와 하나의 쌍을 이루며 동작
  • ICMP 는 IP 상위 계층의 프로토콜처럼 행동하나, 결국 ICMP 는 IP 계층의 일부이며 IP 데이터그램의 데이터 부분에 포함되어 전달된다.

ICMP 헤더 구조는 아래와 같다.

네트워크 관리 명령어

nbtstat -A

충돌되는 컴퓨터를 찾아주는 명령어
IP 충돌 메시지가 표시되면 컴퓨터를 종료한 후 다른 컴퓨터에서 nbtstat 명령어로 중복된 IP 주소를 사용하는 컴픁 이름을 확인

예시

nbtstat -A 중복된 IP 주소

netstat

시스템에서 TCP 전송 프로토콜의 상태를 표시

netstat -aon | find ":포트번호"

특정 포트를 찾아 표시

netstat -p "프로토콜"

특정 전송 프로토콜의 상태를 표시

netstat a

(소켓 상태 표시)
로컬 호스트에 있는 소켓의 상태를 확인할 수 있음

netstat -an

(모든 연결과 수신 대기 포트 표시)
백도어 해킹 프로그램 등이 설치되어 정보를 빼내지는 않는지 확인할 수 있다 .an 옵션은 주소와 포트 번호를 숫자 형식으로 표시

netstat -e 10

(이더넷 통계 표시)

netstat -r( 알려진 경로의 상태 표시

로컬 호스트의 라우팅 테이블을 표시
라우팅 테이블은 호스트의 알려진 모든 경로의 상태를 확인

netstat -s

s(프로토콜별 통계 표시)
-s 옵션은 IP, ICMP, TCP, UDP 프로토콜에 대한 프로토콜 통계를 표시 통계를 이용하여 프로토콜에 문제가 있는 영역을 확인가능

netstat -e

(내 컴퓨터의 송수신 패킷 표시)

netstat -f

(특정 주소 유형의 패킷에 대한 전송 상태 표시)
특정 주소 그룹의 패킷 전송과 관련된 통계를 확인가능

ping 사이트 주소

원격의 호스트 컴퓨터 , 서버 장비 , 네트워크 장비와 통신이 잘 되고 있는지 확인하는 명령어
Ping 을 실행하면 ICMP 프로토콜에서 지정한 호스트 컴퓨터로 데이터그램을 전송하여 응답을 요청

ping -n count 사이트 주소

(에코 요청 수만큼 통신 테스트)
-n count 옵션은 보낼 에코 요청 수

ping -t 사이트 주소 중지할 때까지 통신 테스트

-t 옵션은 중지할 때까지 지정한 호스트에 ping 실행 중지하려면 Ctrl +C 입력

ping -f -l size 사이트 주소

(전송할 버퍼 크기로 통신 테스트)

  • f 옵션은 패킷 조각화하지 않고 플래그를 설정 라인 테스트용 하는 것이고 , -l size 옵션은 전송할 버퍼 크기를 나타냄

route

서버 장비나 방화벽 장비에 LAN 카드를 여러 개 설치할 때 route 명령을 이용하여 패킷이 전달되는 경로를 확인하거나 지정할 수 있다 . route print 명령어로 라우팅 테이블을 확인 가능

tracert 사이트 주소

최종 수신지 컴퓨터에 도달하기까지 중간에 거치는 라우터 여러개의 경로 및 응답속도를 표시
갑자기 특정 웹사이트와 접속이 느려질 때 tracert 명령어로 내부 네트워크나 회선 구간 등을 확인가능. 또한 전용회선 관리나 장애 복구에도많이 사용

arp -a(MAC 주소 표시 ), arp -s(ARP 항목 추가 ), arp -d(ARP 항목 삭제

ARP(주소 확인 프로토콜)에서 사용하는 인터넷 (IP) 주소에서 물리적 주소로 변환된 값을 확인하고 , 수정(관리자 권한에서 가능)가능
-d 옵션 사용 시, 관리자 모드로 실행해야 함

728x90