HTTP 프로토콜이란?

강의영상

https://www.youtube.com/watch?v=TwsQX1AnWJU&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=28 

 

7계층 프로토콜은 매우 많다 (socket 통신 프로그래밍이 7계층 프로토콜을 만드는 것)

그 중 HTTP에 대해 배울 것 (Web에 사용하는 프로토콜)

 

목차

  1. HTTP 프로토콜
  2. HTTP 요청 프로토콜
  3. HTTP 응답 프로토콜
  4. HTTP 헤더 포맷
  5. 실습

 

HTTP 프로토콜

웹을 만드는 기술들: HTTP, HTML, Javascript, CSS, ASP, JSP, PHP, DB 등등

  • HTML, Javascript, CSS: 클라이언트 사이드에서 동작하는 코드들 (저장은 서버쪽에 되어 있다)
    • 클라이언트는 웹 브라우저로 다운 받는다
  • HTTP: ㄴ를 다운로드 받는 프로토콜
  • HTTPS: HTTP에 보안적인 요소를 추가
  • ASP/ASP.NET, JSP, PHP, Python: 서버 사이드에서 실행되는 코드 (백엔드: 클라이언트한테는 안 보임)

 

HTTP 프로토콜의 특징

  • HyerText Transfer Protocol
  • www에서 쓰이는 핵심 프로토콜로 문서의 전송을 위해 쓰이며, 오늘날 거의 모든 웹 어플리케이션에서 사용되고 있다.
    • 음성, 화상 등 여러 종류의 데이터를 MIME로 정의하여 전송 가능
    • HTTP 특징
  •     - Request / Response (요청/응답) 동작에 기반하여 서비스 제공

 

HTTP 1.0의 특징

  • 연결 수립 -> 동작 -> 연결 해제의 단순함이 특징
    • 하나의 URL은 하나의 TCP 연결
  • HTML문서를 전송 받은 뒤 연결을 끊고 다시 연결하여 데이터를 전송

 

HTTP 1.0의 문제점

  • 단순 동작 (연결 수립 -> 동작 -> 연결 해제)이 반복되어 통신 부하 문제 발생

 

HTTP 1.1의 특징

  • HTTP 1.0과 호환 가능
  • Multiple Request 처리가 가능하여 Client의 Request가 많을 경우 연속적인 응답 제공 -> Pipeline 방식의 Request / Response 진행
  • HTTP 1.0과는 달리 서버가 갖는 하나의 IP 주소와 다수의 Web Site 연결 가능

HTTP 1.1의 장점

  • 빠른 속도와 Internet Protocol 설계에 최적화될 수 있도록 캐시 사용
  • Data 를 압축해서 전달이 가능하도록 하여 전달하는 Data 양이 감소

 

HTTP 메소드

강의영상

https://www.youtube.com/watch?v=rxaBwwI_JnI&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=29 

 

HTTP 요청 프로토콜의 구조

16진수가 아닌 영어로 작성
Request와 Headers

 

- Request Line이 중요

Request Line의 구조

요청 타입과 URI가 매우 중요

 

HTTP 메소드 (요청 방식)

GET과 POST가 매우 중요 (나머지는 보안상 막아둠: 클라이언트가 서버쪽 데이터를 수정하면 안됨)

  • 애매한 부분: GET으로도 데이터 요청 할 수 있고, POST로도 데이터를 받을 수 있다
  • 둘의 차이는 무엇?
    • GET은 데이터를 URI에 포함시켜 보냄 (ex. ~~웹툰을 보고싶다)
    • POST는 URI에 포함시키는게 아닌, Body에 포함시켜 보냄 (ex. 중요한 데이터: 로그인 ID, PW)

URL, URI란?

강의영상

https://www.youtube.com/watch?v=2ikhZ_fNP5Y&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=30 

URI의 구조

URI(Uniform Resource Identifier): 인터넷 상에서 특정 자원(파일)을 나타내는 유일한 주소

list.nhn이라는 파일(프로그램)에 titleId=570503&weekday=thu를 보내는 구조

구조

  • scheme://host[:port][/path][?query]

ex)

ftp://IP주소:포트/파일이름

http://IP주소:포트/폴더이름/파일이름 or http://도메인주소/폴더이름/파일이름

* IP주소를 도메인주소로 바꿔주는 건 DNS서버가 하는 일

* 포트는 웹 브라우저가 80번, 443번을 알아서 사용 (작성 생략해도 됨)

 

실습

강의영상

https://www.youtube.com/watch?v=XbGJYsxed2w&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=31 

 

URI 이해를 위한 실습

강의영상

https://www.youtube.com/watch?v=HBojczyd1Ac&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=32 

환경변수: 시스템의 환경과 관련된 값을 저장하는 변수 ex. PATH

    - java 기반의 프로그램을 실행하려면, javaw.exe를 사용해야 한다

 

URI

- 해당 경로를 통해, 클라이언트들이 서버 파일에 접근

 

query (?다음에 쓰는 값들)

- 해당 경로에 있는 파일(프로그램)에 특정 값들을 넘겨줌

 

HTTP 응답 프로토콜

강의영상

https://www.youtube.com/watch?v=kuucNF4Zvbs&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=33 

 

HTTP 응답 프로토콜 구조

요청 프로토콜과 유사 (Status Line은 다름)

Body에 사용자가 요청한 데이터가 들어감

 

Status Line 구조

상태코드 + 상태 문구는 하나의 쌍

상태코드

: 서버가 알려주는 여러가지 정보

  • 200: 정상적으로 완료 (상태문구: OK)
  • 400~: 에러 - 클라이언트 잘못
    • 403: 클라이언트가 권한이 없는 페이지를 요청했을 때 (상태문구: Forbidden)
    • 404: 클라이언트가 서버에 없는 페이지를 요청했을 때 (상태문구: Not Found)
  • 500~: 에러 - 서버 잘못 (프로그램 오류, 코드 버그 등)
    • 500: 서버의 일부가 멈췄거나 설정 오류가 발생 (상태문구: Internal Server Error)
    • 503: 최대 세션 수를 초과했을 때 (상태문구: Service Unavailable)

 

 

HTTP 헤더

강의영상

https://www.youtube.com/watch?v=mQTGmxendk8&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=34 

HTTP 헤더 구조

HTTP 헤더는 종류가 정말 많다

 

일반헤더

  • 일반적인 정보를 담고 있음
  • 종류
    • Content-Length: 메시지 바디 길이를 나타날 때 씀
    • Content-Type: 메시지 바디에 들어있는 콘텐츠 종류 (ex. HTML 문서는 text/html)

 

요청 헤더

  • 클라이언트 정보를 담고 있음
  • 종류
    • Cookie: 서버로부터 받은 쿠키를 다시 서버에게 보내주는 역할
    • Host: 요청된 URL에 나타난 호스트명을 상세하게 표시 (HTTP 1.1은 필수로 보내야 함)
    • User-Agent: 클라이언트 프로그램에 대한 식별 가능 정보를 제공 => 핸드폰, PC로 접속했는지 등을 알 수 있음

 

응답 헤더

  • 서버 정보를 담고 있음
  • 종류
    • Server: 사용하고 있는 웹서버의 소프트웨어에 대한 정보를 포함
    • Set-Cookie: 쿠키를 생성하고 브라우저에 보낼 때 사용. 해당 쿠키 값을 브라우저가 서버에게 다시 보낼 때 사용

 

실습

강의영상

https://www.youtube.com/watch?v=dhMrKTwNI8U&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=35 

 

burpsuite라는 프로그램 사용

: 요청 / 응답 중간에 프로토콜을 잡아서 수정가능

 

코드 수정 => 화면에 뜨는 숫자를 바꿀 수 있음 (클라이언트 화면에만 바뀌어 있음)

 

강의영상

https://www.youtube.com/watch?v=Qle5cfCcuEY&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=26 

 

NAT: Network Address Translation

목차

- NAT

- 포트포워딩

- 실습

 

NAT란?

NAT(Network Address Translation)은 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술을 말한다. (프로토콜을 다시 만든다 -> 다시 만든 내용을 기록해 둠)

패킷에 변화가 생기기 때문에 IP나 TCP/UDP의 checksum도 다시 계산되어 재기록해야 한다.

NAT를 이용하는 이유는 대개 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP주소를 사용하여 인터넷에 접속하기 위함이다.

하지만 꼭 사설 IP를 공인 IP로 변환 하는 데에만 사용하는 기술은 아니다.

사설 IP를 NAT를 이용해 공인 IP로 변경

 

바깥 세상에서는 공유기끼리 통신을 주고받는 것으로 보인다

NAT에 요청을 보낸 기록이 있을 때만, (요청을 받는 내용의) 통신을 받을 수 있다

 

포트포워딩

포트 포워딩 또는 포트 매핑은 패킷이 라우터나 방화벽과 같은 네트워크 장비를 가로지르는 동안 특정 IP 주소와 포트 번호의 통신 요청을 특정 다른 IP와 포트 번호로 넘겨주는 네트워크 주소 변환(NAT)의 응용이다.

이 기법은 게이트웨이(외부망)의 반대쪽에 위치한 사설 네트워크에 상주하는 호스트에 대한 서비스를 생성하기 위해 흔히 사용된다.

클라이언트에서 보낸 요청을 (요청 받은) 공유기에서 특정 IP 특정 포트로 보내준다

 

실습

TCP 프로토콜 구조와 TCP의 플래그

강의영상

https://www.youtube.com/watch?v=cOK_f9_k_O0&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=21 

목차

  1. TCP 프로토콜
  2. TCP 플래그
  3. TCP를 이용한 통신과정
  4. TCP 상태 전이도
  5. 실습

 

TCP는 UDP와 다르게 기능이 굉장히 많다

 

TCP 프로토콜

TCP 프로토콜이란?

  • 전송 제어 프로토콜 (Transmission Control Protocol, TCP)은 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 통신을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.
  • TCP의 안정성을 필요로 하지 않는 애플리케이션의 경우 일반적으로 TCP 대신 UDP를 사용한다.
  • TCP는 UDP보다 안전하지만 느리다.

 

TCP 프로토콜의 구조

파란색 Offset은 헤더의 길이를 표현

 

TCP의 플래그

U A P R S F만 알면 된다

  • TCP는 계속 상대방에게 연결 상태를 물어본다
  • 플래그는 그 연결 상태를 나타내는 값
  • TCP의 주된 기능이 플래그로 구분됨
    • U: Urgent (긴급 비트): 지금 보내는 패킷에 우선순위가 높은 데이터가 포함됨
    • Ugent Pointer: 어디부터가 긴급 데이터인지 알려줌(중요하진 않음)
    • A: Ack (승인 비트): 물어본 것에 대한 응답 플래그 (중요)
    • P: Push (밀어넣기 비트): TCP가 일정크기만큼 쌓여야 데이터를 보낼 수 있는데, 상관없이 계속 데이터를 밀어넣을 때 사용
    • R: Reset (초기화 비트): 연결에 문제가 생겨서 새로고침 할 때 사용 (중요)
    • S: Synk (동기화 비트): 상대방과 연결을 시작할 때 사용 (가장 중요)
    • F: Fin (종료 비트): 연결을 끊을 때 사용 (중요)

 

TCP 3way Handshake

강의영상

https://www.youtube.com/watch?v=Ah4-MWISel8&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=22 

TCP를 이용한 통신과정

연결 수립 과정: TCP를 이용한 데이터 통신을 할 때 프로세스와 프로세스를 연결하기 위해 가장 먼저 수행되는 과정

3 Way Handshake

  1. 클라이언트가 서버에게 요청 패킷을 보내고
  2. 서버가 클라이언트의 요청을 받아들이는 패킷을 보내고
  3. 클라이언트는 이를 최종적으로 수락하는 패킷을 보낸다.

보안을 위해, SEQ 번호와 ACK 번호를 계산할 줄 알아야 함

  1. 처음에 SEQ 번호를 랜덤하게, ACK 번호는 0으로 보냄
  2. 서버의 답장: ACK 번호 = 클라이언트한테 받은 SEQ 번호 +1, SEQ 번호는 랜덤
  3. 클라이언트의 재답장: ACK 번호 = 서버한테 받은 SEQ 번호 +1, SEQ 번호는 서버한테 받은 ACK 번호 (동기화가 됨)

이 전체 과정은 연결을 위한 과정

따라서 전체 과정 끝나고 다시 요청을 보내는 건 클라이언트 (실제 데이터를 주고받기 시작)

-> 누군가 동기화된 값을 계산해서 hijacking 할 수도 있다 (연결 끝나고, 서버가 보내는 정보가 클라이언트 말고 다른 해커에게 갈 수도 있음)

 

 

TCP를 이용한 데이터 전송 과정

데이터 송수신 과정 (연결이 수립되고 난 다음)

: TCP를 이용한 데이터 통신을 할 때 단순히 TCP 패킷만을 캡슐화해서 통신하는 것이 아닌 페이로드를 포함한 패킷을 주고 받을 때의 일정한 규칙

  1. 1. 보낸 쪽에서 또 보낼 때는 SEQ 번호와 ACK 번호가 그대로다. (연결 상태 마지막과 동일)
  2. 받는 쪽에서 SEQ 번호는 보낸 ACK 번호가 된다.
  3. 받는 쪽에서 ACK 번호는 받은 SEQ 번호 + 데이터 크기: 연결 수립 단계와 다른 부분 (연결 수립 시에는 payload (데이터 크기)가 필요 없었다)

 

TCP의 연결 상태 변화

강의영상

https://youtu.be/yY0uQf0BTH8

- 굉장히 복잡하다

LISTEN, ESTABLISHED가 제일 중요

  • LISTEN: 포트 번호를 열어놓고 있는 상태(서버 프로그램이 사용 중인 상태): 상대 요청을 항상 듣고 있는 상태
  • ESTABLISEHD: 서버와 클라가 연결이 서로 수립된 상태
  • active open: 클라이언트가 서버의 포트를 (능동적으로) 엶

클라이언트가 active open: 클라이언트는 SYN_SENT 상태가 됨 (서버는 SYN_RECEIVED)
클라이언트가 서버에게 다시 보내면 서로 ESTABLISHED 상태가 된다

실습

강의영상

https://www.youtube.com/watch?v=WseqBDo-j3Y&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=25 

 

강의영상

https://www.youtube.com/watch?v=3MkI3FBFzX8&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=19 

목차

- UDP 프로토콜

- UDP 프로토콜을 사용하는 프로그램

- 실습

 

 

UDP 프로토콜이란?

- 사용자 데이터그램 프로토콜(User Datagram Protocol)은 유니버설 데이터그램 프로토콜(Universal Datagram Protocol)이라고 일컫기도 한다.

- UDP의 전송방식은 너무 단순해서 서비스의 신뢰성이 낮고, 데이터그램 도착 순서가 바뀌거나, 중복되거나, 심지어는 통보없이 누락시키기도 한다.

- UDP는 일반적으로 오류의 검사와 수정이 필요 없는 프로그램에서 수행할 것으로 가정한다.

 

UDP 프로토콜의 구조

- 안전한 연결을 지향하지 않는 UDP 프로토콜

출발지 포트 번호, 도착지 포트 번호만 있으면 된다

 

UDP 프로토콜을 사용하는 프로그램

- DNS 서버: 도메인을 물으면 IP를 알려줌

- tftp 서버: UDP로 파일 공유

- RIP 프로토콜: 라우팅 정보를 공유

 

실습: tftpd로 파일 전송

https://www.youtube.com/watch?v=5Woau-EJChw&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=20 

1. Windows 7은 서버 => 서버용 세팅

2. Windows XP는 클라이언트 => 클라이언트용 세팅

3. tftpd가 사용하는 포트번호는 69

4. Remote File: 서버쪽에서 생성한 파일 이름

 

파일 전송을 UDP로 하면 좋을까?

- 큰 파일은 UDP로 전송하지 않는다 (파일이 깨져도 복구 불가)

- UDP를 사용한 파일 전송은 특수한 경우 (ex. 동영상 스트리밍)

    - 1초에 수십만 데이터를 빠르게 보내줌

    - 중간에 프레임 하나가 깨져도 크게 중요 X

 

UDP 전송 패킷 캡처 (by Wireshark)

- 가상머신과 내 컴퓨터는 VMnet8로 연결 (로컬 네트워크 연결이 아니다)

- 로컬 영역 연결을 캡처하면, 패킷 캡처가 안 뜰 것이다. (VMNet8로 선택해야 함)

- 패킷 캡처

출발 포트(XP 클라이언트 포트): 1046, 도착 포트 (서버 포트): 69

내용: 클라이언트와 서버가 데이터를 어떻게 주고 받는지

ex. 게임 프로그램 실행하면 게임 서버와 어떻게 데이터를 주고 받을까?

 

강의 영상

https://www.youtube.com/watch?v=tG0ldt4sBzY&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=16 

목차

  1. 4계층 프로토콜
  2. 포트 번호
  3. 프로그램의 연결 정보
  4. 실습

 

4계층 프로토콜

  • 전송 계층 (Transport layer)은 송신자의 프로세스와 수신자의 프로세스를 연결하는 통신 서비스를 제공
  • 전송 계층은 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어, 그리고 다중화와 같은 편리한 서비스를 제공
  • 전송 프로토콜 중 가장 잘 알려진 것은 연결 지향 전송 방식을 사용하는 전송 제어 프로토콜 (TCP)
  • 보다 단순한 전송에 사용되는 사용자 데이터그램 프로토콜(UDP)도 있음

 

포트 번호

  • 특정 프로세스와 특정 프로세스가 통신을 하기 위해 사용
  • 하나의 포트는 하나의 프로세스만 사용 가능
  • 하나의 프로세스가 여러 개의 포트를 사용하는 것은 가능
  • 포트 번호는 일반적으로 정해져 있지만 무조건 지켜야 하는 것은 아님

 

Well-known 포트

전 세계적으로 유명

  • FTP: 포트 번호 20번, 21번
  • SSH: 22번
  • TELNET: 23번
  • DNS: 53번
  • DHCP: 67번, 68번
  • TFTP: 69번
  • HTTP: 80번 (ex. 네이버 웹툰 서버가 사용하는 포트)
  • HTTPS: 443번

 

Registered 포트

(조금) 유명한 미리 등록된 포트

  • 오라클 DB 서버: 1521번
  • MySQL 서버: 3306번
  • MS 원격 데스크탑: 3389번
  • ...

 

Dynamic 포트

일반 사용자들이 사용 (ex. 네이버 웹툰 볼 때)

상대방 프로그램과 연결하는 포트 번호

  • 시작 포트 번호: 49152번 ~ 마지막 포트 번호: 65535번

 

프로그램의 연결 정보

  • 나와 현재 연결되어 있는 컴퓨터들
  • 현재 포트 활성 여부를 나타내는 활성 연결 테이블
  • 명령어: netstat -an

 

 

 

 

강의 영상

https://www.youtube.com/watch?v=_i8O_o2ozlE&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=9&t=1s 

 

목차

  1. IPv4 프로토콜
  2. ICMP 프로토콜
  3. 라우팅 테이블
  4. 다른 네트워크와 통신과정
  5. IPv4의 조각화
  6. 실습

 

IPv4 프로토콜

IPv4가 하는 일

  • 네트워크 상에서 데이터를 교환하기 위한 프로토콜
  • 데이터가 정확하게 전달될 것을 보장하지 않음
  • 중복된 패킷을 전달하거나 패킷의 순서를 잘못 전달할 수도 있다. (악의적으로 이용하면 DoS 공격이 됨)
  • 데이터의 정확하고 순차적인 전달은 그보다 상위 프로토콜인 TCP에서 보장

 

IPv4 구조

  • Identification: Packet을 쪼개서 보낼 때, 원래 하나의 Packet이었다는 것을 파악 가능
  • Framentation Offset: 쪼개진 Packet의 순서를 알려줌 (시작점부터 얼만큼 떨어져있는지 알려줌)
  • Time To Live (TTL): Packet이 무한 루프로 도는 것을 방지 (장비를 하나씩 지날 때마다 1씩 감소) -> TTL이 0인 장비는 해당 Packet을 버림
  • Protocol: 상위 프로토콜을 알려줌
    • ICMP: 0 1로 세팅
    • TCP: 0 6으로 세팅
    • UDP: 1 1로 세팅 (17)
    • Header Checksum: 헤더의 오류여부 점검

ICMP 프로토콜

강의영상

https://www.youtube.com/watch?v=JaBCIUsFE74&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=10 

ICMP 프로토콜이 하는 일

  • ICMP (Internet Control Message Protocol)
  • 네트워크 컴퓨터의 운영체제에서 오류메시지를 전송받는데 주로 쓰인다.
  • 프로토콜 구조의 Type과 Code를 통해 오류 메시지를 전송받는다. 

 

ICMP 의 구조

  • Type: 대분류
  • Code: 소분류
  • Type 0,3,8,5,11은 알아야 함
    • 0, 8: 기본: 8 = 요청, 0 = 응답
    • 3 = Destination Unreachable, 11: Time Exceeded => 왜 통신이 안되는지 파악 가능
    • 3: 목적지까지 가지 못함 ex. 중간에 경로 설정 잘못됐을 때
    • 11: 목적지까지 갔는데 오지 못함 ex. 상대가 방화벽 켜 놨을 때
    • 5: Redirect 보안상 중요

 

IPv4, ICMP 프로토콜 실습

강의 영상

https://www.youtube.com/watch?v=8ZwTvTuZlVw&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=11 

* 내가 보내는 이더넷 프로토콜과 구글이 받는 이더넷 프로토콜은 다르다 (네트워크 대역이 달라서)

 

라우팅 테이블

강의영상

https://www.youtube.com/watch?v=CjnKNIyREHA&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=12 

어디로 보내야 하는지 설정되 있는 라우팅 테이블

(패킷을 보낼 때 참고하는 지도가 된다)

- 게이트웨이

    - 모르면 일단 저기로 보내라

 

다른 네트워크와 통신 과정

- A -> B가 (통신) 가능하려면, B의 네트워크 대역이 A의 라우팅 테이블에 있어야 한다

192.168.20.0/24 한테 가려면, 일단 192.168.10.1로 가라

 

A -> B로 갈 때, Ethernet은 cc:cc:cc:cc:cc:cc로 설정 (게이트웨이)
공유기는 192.168.20.0/24는 일단 192.168.30.2로 보낸다
Ethernet 프로토콜을 바꾼다

*Ethernet 프로토콜은 네트워크 대역이 바뀔 때마다 다시 작성됨

 

IPv4의 조각화

조각화란?

  • 큰 IP 패킷들이 작은 MTU를 갖는 링크를 통하여 전송되려면 여러 개의 작은 패킷으로 쪼개어(조각화)되어 전송돼야 한다.
  • 즉 목적지까지 패킷을 전달하는 과정에 통과하는 각 라우터마다 전송에 적합한 프레임으로 변환이 필요하다.
  • 일단 조각화되면, 최종 목적지에 도달할 때까지 재조립되지 않는 것이 일반적이다.
  • IPv4에서는 발신지뿐만 아니라 중간 라우터에서도 IP 조각화가 가능
  • IPv6에서는 IP 단편화가 발신지에서만 가능
  • 재조립은 항상 최종 수신지에서만 가능함

 

조각화 예시

IPv4 20바이트를 뺀 만큼씩 쪼개야 한다

- MF (More Fragmentation): 내 뒤에 조각이 더 있다 - 맨 마지막 조각은 0

- Offset: 0으로부터 얼마나 떨어져있는지 (Byte단위)

큰 데이터를 조각화해서 보내는 예시

2000짜리 데이터를 1480과 520으로 쪼갬 (MTU 1500)
IPv4 구성

- 05 dc, 02 24: Data 길이

- 12 ab: 패킷의 ID값

- 2 0 : MF (More Fragmentation)

- 0 00, 0 b9: Offset

 

조각화 실습1

보내려는 데이터 크기: 2379

MTU: 980

- 몇 개의 패킷으로 쪼개지는가?

    3

- 첫번째 패킷의 데이터 크기는 몇인가?

    960

- 마지막 패킷의 데이터 크기는 몇인가?

    459

 

조각화 실습2

명렁어 ping [ip 주소] -l 4800

보내려는 데이터 크기: 4800

MTU: 1500

1514 = 14 (Ethrnet) + 20 (IPv4) + 1480 (Data)

마지막 조각 = 402 = 14 (Ethernet) + 20 (IPv4) + 8 (ICMP) + 360 (Data)

 

목차

- ARP 프로토콜

- ARP 프로토콜의 통신 과정

- ARP 테이블

- 실습

 

ARP 프로토콜

- ARP가 하는 일

    - ARP 프로토콜은 같은 네트워크 대역에서 통신을 하기 위해 필요한 MAC주소를 IP주소를 이용해서 알아오는 프로토콜

 

- ARP 프로토콜의 구조

    - IP 주소를 이용해 MAC 주소를 알아오는 ARP 프로토콜

예외없이, Hardware type에는 0 0 0 1, Protocol type에는 0 8 0 0, Home Address Length에는 0 6, Protocol Address Length에는 0 4가 들어감

    - Opcode: 질문인지 응답인지 정보가 담겨 있음

 

- ARP 프로토콜을 활용한 통신

    1. Eth | ARP 요청

        - 목적지 MAC주소를 몰라서 ARP로 알아오려는 것인데, 목적지 MAC 주소가 필요한 Ethernet을 어떻게 앞에 붙이는가?

        -> Opcode = 1로 두고 출발지 MAC주소와 출발지 IP 주소를 채워넣음

        -> 목적지 MAC 주소는 비워두고, 목적지 IP 주소만 채워넣음

        -> Ethernet 프로토콜 인캡슐레이션: 목적지 MAC주소를 모르기 때문에 ff로 채워넣음 => 브로드캐스트 주소가 됨: 같은 대역에 있는 모두에게 보낸다 (목적지 MAC주소를 누가 갖고있는지 모르니까)

    2. 목적지 IP 주소가 일치 안하는 애들은 Packet을 버림, 목적지 IP 주소가 일치하는 애는 응답 프로토콜을 보냄 (출발지, 자기 IP주소를 적어서) - 이때는 목적지 MAC주소를 알고 있음

    3. 해당 IP 주소를 ARP 캐시테이블에 등록 (OO IP 주소를 쓰는 애는, ~~ MAC 주소를 갖고 있구나)

    4. 이후 통신 가능 (이 과정을 한번 거쳐야만 통신이 가능하다)

 

ARP 테이블

: 나와 통신했던 컴퓨터들의 주소가 남는다.

- arp -a 명령어로 확인 가능

목차

  • 3계층의 기능
  • 일반적인 IP 주소
  • 특수한 IP 주소
  • 실습

 

3계층의 기능

  • 3계층은 다른 네트워크 대역 즉 멀리 떨어진 곳에 존재하는 네트워크까지 어떻게 데이터를 전달할지 제어하는 일을 담당
  • 발신에서 착신가지의 패킷의 경로를 제어
  • 라우터와 같은 3계층 장비 필요

 

  • 3계층에서 쓰는 주소: WAN에서 통신할 때 사용하는 IP 주소 + 서브넷 마스크 + 기본 게이트웨이
  • IPv4 주소: 현재 PC에 할당된 IP 주소
  • 서브넷 마스크: IP 주소에 대한 네트워크의 대역을 규정하는 것
  • 게이트웨이 주소: 외부와 통신할 때 사용하는 네트워크의 출입구

 

일반적인 IP 주소

Classful IP 주소: 낭비가 심함

Classful IP

  • Class를 나눴던 이유: 
    • ex) A 클래스 내에서 맨 앞자리 숫자(0 ~ 127)로 A-0, A-1, ... , A-127로 구분
  • A 클래스 두번째 자리부터 컴퓨터 하나당 할당 - 2^24개의 컴퓨터에 IP 주소 할당 가능 (매우 큰 관공서 같은 곳에서 사용)
  • B 클래스: 두번째 필드까지 네트워크 대역을 구분하는데 사용, 나머지를 그 안에 속한 컴퓨터를 구분하는데 사용
  • C 클래스: 세번째 필드까지 네트워크 대역을 구분하는데 사용, 나머지를 그 안에 속한 컴퓨터를 구분하는데 사용

Classless IP 주소: 낭비되지 않도록 아껴씀

  • 원하는 곳에서 잘라 쓰자
  • 서브넷 마스크: 네트워크 대역을 어디서 구분할지 지정한 값
    • 1과 0이 바뀌는 부분이 클래스를 구분하는 값
  • 그래도 IP가 부족해짐 -> IPv6를 쓰자고 하지만, 바로 넘어갈 수가 없다.

 

일반적인 IP 주소

  • 사설 IP와 공인 IP: 공인 IP 1개당 2^32개의 사설 IP

  • 외부와 통신할 때는 공인 IP로 바꿔서 통신
  • NAT: 사설 IP를 공인 IP로 translate (특정 IP를 다른 IP로 바꿈: 공인 IP -> 공인 IP, 사설 IP -> 사설 IP도 가능): NAT는 기술이다
  • 실제 인터넷 세상에서는 공인 IP로만 통신: 외부 네트워크 대역에서는 사설 IP 대역이 보이지 않는다.
  • 통신이 나갈 때, NAT 테이블에 기록 -> 응답이 오면 NAT 테이블을 보고 사설 IP로 전달
    • NAT 테이블에 없으면, 공유기가 받고 끝남
    • 서버는 보통 공인 IP를 씀 or 공유기에 따로 설정(port forwarding)을 해 둠

 

특수한 IP 주소

  • 0.0.0.0/0: Wildcard = 나머지 모든 IP
  • 127.0.0.1: 나 자신을 나타내는 주소
  • 게이트웨이 주소: 외부 세상으로 나가는 문

+ Recent posts