본문 바로가기
카테고리 없음

패킷

by 할 수 있다 ! 2024. 10. 4.

안녕하세요 ! 

 

이번에는 패킷에 관해서 글을 작성해보려고 합니다.

 

바로 글을 써보도록 하겠습니다. 

 

 

패킷 

 

패킷은 네트워크에서 데이터를 주고 받을 때 사용되는 작은 데이터 단위입니다. 예를 들자면 우리가 웹 사이트를 방문할 때, 브라우저가 서버로부터 웹 페이지를 가져오는 과정에서 여러 패킷이 전송이 됩니다. 여기서는 HTTP 요청 패킷의 간단한 예시를 들어서 설명하겠습니다. 

 

 

1. HTTP 요청 패킷 예시 

 

브라우저에서 "www.example.com" 에 접속한다고 가정했을때, HTTP GET 요청을 통해서 웹 페이지를 가져옵니다. 이 요청은 담은 패킷의 주요 구성 요소는 다음과 같습니다. 

 

1. 이더넷 헤더 -> 네트워크 인터페이스 간의 통신을 담당하는 부분으로 출발지와 목적지 MAC 주소를 포함한다. 

 

EX) 

 

- 출발지 MAC 주소 : 00:1A:2B:3C:4D:5E 

 

- 목적지 MAC 주소 : 11:22:33:44:55:66 

 

 

 

2. IP 헤더 -> 출발지와 목적지 IP 주소를 포함해서 패킷을 라우팅하는 역할을 한다. 

 

EX) 

 

출발지 IP 주소 : 192.168.1.100 

 

목적지 IP 주소 : 93.184.216.34 

 

 

 

3. TCP 헤더 : 데이터가 신뢰성 있게 전송되도록 하는 역할을 한다. 출발지 및 목적지 포트 번호가 포함됩니다. 

 

EX) 

 

출발지 포트 : 54321 

 

목적지 포트 : 80 ( HTTP 기본 포트 )

 

 

4. HTTP 요청 ( HTTP Request ) : 실제로 웹 서버에 보내는 HTTP GET 요청입니다.

 

EX) 

 

GET /index.html HTTP/1.1

Host: www.example.com

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate, br

Connection: keep-alive

 

이 패킷은 브라우저에서 웹 서버로 보내져 서버는 이것에 대해서 응답으로 웹 페이지 데이터를 담은 HTTP 응답 패킷을 보내줍니다. 

 

여기서 HTTP 요청 패킷은 클라이언트 ( 주로 웹 브라우저 ) 가 서버에게 웹 페이지나 리소스를 요청할 때 전송하는 데이터 패킷입니다. 이 패킷은 주로 웹에서 사용되고 브라우저가 서버에 요청을 보내기 위한 HTP 프로토콜을 따릅니다. HTTP 요청 패킷은 여러 부분으로 구성이 되어있습니다. 각각의 부분은 서버가 클라이언트의 요청을 정확하게 처리할 수 있도록 도와줍니다. 

 

HTTP 요청 패킷의 주요 구성 요소 

 

 

 

1. 요청 줄 ( Request Line ) 

 

< HTTP 메서드 > < 요청 URL > < HTTP 버전 > 

 

GET / index.html HTTP/1.1 

 

HTTP 메서드는 클라이언트가 서버에게 무엇읗 하고 싶은지 나타낸다. 

 

대표적인 메서드는 GET, POST 가 나옵니다. 

 

요청 URL : 클라이언트가 요청하는 자원의 경로 입니다. 여기서는 index.html 파일을 요청하는 예시입니다. 

 

HTTP 버전 : HTTP 의 버전 정보를 나타냅니다. 일반적으로 HTTP / 1.1 또는 HTTP/2를 사용합니다.

 

 

2. 헤더 ( Header ) 

 

요청 줄 다음에는 여러 개의 HTTP 헤더가 나옵니다. 헤더는 클라이언트와 서버 간에 추가적인 정보를 전달하는 역할을 한다. 헤더는 필드 이름과 필드 값으로 이루어져 있습니다. 다양한 정보들을 전달하는 역할을 합니다. 

 

Host: http://www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

 

 

Host : 서버의 도메인 이름을 나타냅니다. 클라이언트가 어떤 서버에 요청하는지 명시합니다. 

 

User-Agent : 클라이언트가 어떤 브라우저나 장치를 사용하고 있는지에 대한 정보입니다. 

 

Accept : 클라이언트가 받을 수 있는 컨텐츠의 MIME 타입을 정의합니다. 

 

Accept-Language : 클라이언트가 선호하는 언어를 나타냅니다. 

 

Connection : 연결 방식, 보통 keep-alive 로 설정하여 연결을 유지하려고 합니다. 

 

 

3. 본문 ( Body , 필요 시 ) 

 

본문은 HTTP 요청에서 실제 데이터를 담고 있는 부분으로 보통 POST나 PUT 요청 시 사용됩니다. GET 요청에는 본문이 존재하지 않는 경우가 많습니다. 

 

- POST 요청 본문 예시

 

username=johndoe&password=1234

 

이 예시는 웹사이트 로그인 양식에서 사용자 이름과 비밀번호를 전송하는 PSOT 요청 본문의 데이터입니다. 

 

요청 줄 : POST /login HTTP/1.1 

 

헤더 : 요청에 필요한 추가 정보를 제공한다. 

 

본문 :  username=johndoe&password=1234

 

 

2. 각 부분의 역할 

 

 

1. 이더넷 헤더 : 패킷을 로컬 네트워크에서 다른 장치로 전달하는데 사용된다. 

 

2. IP 헤더 : 인터넷을 통해서 패킷을 목적지 서버까지 전달되는데 사용한다. 

 

3. TCP 헤더 : 데이터가 손실되지 않도록 관리하고 데이터를 적절한 순서로 다시 조립한다. 

 

4. HTTP 요청 : 웹 서버에서 특정 페이지를 요청하는 실제 명령입니다. 

 

이러한 패킷들이 여러 개 조합해서 웹 페이지가 브라우저에서 표시되고 패킷 분석 도구인 와이어 샤크를 통해서 패킷의 세부 정보를 분석할 수 있습니다.