Web 이해도 높이기(OSI 7 Layer, TCP/IP)

최성락·2024년 5월 28일

NetWork

목록 보기
1/1
post-thumbnail

최근에 웹 크롤링, 스크래핑을 진행했는데 오늘은 네트워크 7계층을 빗대어
Web에 대해 자세하게 알아보려고 한다.
작성 도중 내가 잘 몰랐던 단어에 대해 중간중간 설명을 넣었다.
먼저 요약을 넣고 아래에 자세하게 설명을 썼다.

요약 :

  1. 애플리케이션 계층 :
  • 사용자에 웹 브라우저에 naver.com URL 을 입력하면 브라우저가 HTTP GET 요청 생성
  1. 프레젠테이션 계층 :
  • 브라우저는 요청을 데이터를 인코딩하여 암호화(HTTPS인 경우)
  1. 세션 계층 :
  • 브라우저와 네이버 서버 간에 세션이 설정됨
  1. 전송 계층 :
  • 브라우저가 네이버 서버와 3-way handshaking(TCP 연결 설정)
  1. 네트워크 계층 :
  • 브라우저가 DNS(도메인 네임 시스템)을 통해 naver.com 도메인의 이름을 IP주소로 변환 후 IP 패킷을 인터넷을 통해 네이버 서버로 라우팅
  1. 데이터 링크 계층 :
  • IP패킷이 이더넷 프레임으로 캡슐화되고, 네트워크에서 MAC주소를 사용하여 프레임 전송
  1. 물리 계층 :
  • 프레임이 물리적인 매체를 통해 전송되며, 데이터를 0과 1 비트 스트림으로 변환하여 전송

OSI ?

OSI(Open Systems Interconnection)란 통신 규격을 만들 때 고안된 것으로, OSI 통신 기능을 7계층으로 나눈 것이다. 이 계층 구조 개념은 다양한 분야에서 공통적으로 참조할 수 있는 '참조 모델'로서 현재도 사용되고 있다.

  • 응용층(Application): 애플리케이션 처리
  • 표현층(Physical): 데이터 표현 방법. 인코딩 및 데이터 형식 차이 조절
  • 세션층(Session): 통신 시작과 종료 순서. 양 끝단 프로세스가 통신을 관리하기 위한 방법 제공
  • 전송층(Transport): 네트워크의 통신 관리. 양 끝단 유저들 통신에 있어 신뢰성 보장
  • 네트워크층(Network): 네트워크 통신 경로 선택. 여러 개의 지점을 거칠 때 경로를 찾아줌
  • 데이터 링크층(Data Link): 직접 접속돼 있는 기기 간 처리. 두 지점 간의 신뢰성 있는 전송 보장
  • 물리층(Physical): 전기적인 접속. 실제 장치들을 연결하기 위한 물리적인 사항 정의

그리고 필수적인 요소인 프로토콜 이 있다.

프로토콜 ?

사전에 정해놓은 순서를 의미하며, 컴퓨터 용어로는 '통신 프로토콜'이라는 이름으로 자주 등장하며, 컴퓨터가 서로 소통하기 위해 정한 규약이다.
인터넷을 포함해서 현재 네트워크를 지탱하는 것은 TCP/IP 및 관련 프로토콜이다.

  • 응용층(Application): "난 이 종류의 데이터를 보내고 싶어 송신은 다른 계층에게 맡기자."
  • 전송층(Transport): "응용층이 부탁한 데이터를 상대방에게 전달"
  • IP계층(Internet): "데이터를 최종 위치까지 운반한다"
  • 링크 계층(Network Access): "직접 연결돼 있는 주변 장비에게도 보내자"

이제 브라우저에 URL 입력시 동작 과정을 계층 관점으로 한번 살펴보자.

Application 계층 통신

브라우저 URL 입력시 동작 과정 계층 관점

먼저 웹 브라우저 란 웹 위에서 동작하는 애플리케이션이다. 웹 브라우저 크롬, 파이어폭스 등등 모두 애플리케이션이다. 무언갈 요청받은 애플리케이션은 자신이 통신을 하는 것이 아니라 OS, 즉 아래 계층 HTTP(무선 전송 프로토콜), TCP/IP에 맡긴다.

URL 창에 text 입력하기

url 창에 text를 입력하면 해당 입력이 search query 인지 url인지 판단한다.

  • search query(그냥 검색) -> search engine으로 query를 보내서 검색
  • URL -> 해당 URL 분석(scheme,host,port,path 등) 후 아래 계층으로 값 전달

HTTP URL 포맷

웹 브라우저에 url을 입력해보자. 일반적으로 많이 사용하는 HTTP URL 포맷 다음과 같이 표현한다.

<scheme>://<host>:<port>/<path>?<searchpart>

scheme : 제일 앞에 리소스에 접근할 방법을 정의해둔 프로토콜 이름을 적는다.(HTTP/HTTPS)

HTTPHTTPS
통신 방식평문 통신(데이터 암호화X)암호화 통신(데이터 암호화O)
포트80443
성능암호화가 없어서 빠름암호화,복호화 과정이 필요해 약간의 성능 저하

host : DNS 이름이나 IPv4주소, IPv6 주소를 대괄호로 묶어서 저장한다.

  • ex)

    • DNS name : www.naver.com
    • IPv4 : 192.168.1.1
    • IPv6 : [0:0:0:0:0:0:1]

    요약 : HTTP가 보안이 취약해 SSL등 안전한 통신로를 이용해 안전한 통신로를 확립하고 통신로를 사용한게 HTTPS

port : 말 그대로 항구 라는 의미를 가지며 80번 항구 443번 항구 이런 역할이다.

path, search part : path는 특정 리소스를 식별하기 위해 서버 상의 파일 path를 지정해준다. 그렇게 지정된 path 리소스에 임의의 파라미터를 넘겨주기 위해 쿼리 문자열을 사용한다. 이는 옵션이다.

DNS 동작 과정

  1. 브라우저에 도메인(www.naver.com)을 입력하면 PC에서 미리 설정되어 있는 DNS에게 도메인에 대한 IP를 조회
  2. local DNS 먼저 확인하고 없으면 다른 DNS 통신하여 확인, 여기서 가장 먼저 Root DNS 서버 조회
  3. 없으면 local DNS에게 .info 를 관리하는 DNS 서버에 물어보라고 응답
  4. local -> .info DNS에게 도메인에 대한 IP 주소 조회
  5. 없으면 .info -> local 에게 "naver.info"를 관리하는 DNS 서버에 물어보라고 응답
  6. local -> naver.info DNS 서버에 또 IP 조회
  7. naver.info DNS 서버에는 IP 존재하여 주소 응답
  8. 이를 수신하여 IP주소 캐시 후 브라우저에 전달

이와같이 여러 DNS 서버를 차례대로 질의하여 답을 찾는 과정을 Recursive Query 라고 한다.

TCP 계층 통신

TCP는 위의 계층으로부터 port,ip,http 데이터 등을 받는다. TCP가 담당하는 건 서버가 송신할 때, 서버가 수신한 후 애플리케이션에 전달할 때로, 상대 서버까지 전송하는 부분은 하위 계층인 IP에 모두 위임한다.
여기서 IP만으로 통신이 가능하지 않을까 생각할 수 있는데 가능하긴 하지만 데이터가 상대방에게 확실하게 전달됐는지 확인하는 기능이나 도착한 순서를 확인하는 기능이 없다.

1. 포트 번호를 이용해서 데이터 전송

TCP가 위에서 보내준 port번호를 사용하여 어떤 애플리케이션에 전달할지 판단

2. 연결 생성

TCP는 연결형 프로토콜로 3-way handshaking을 통해 상대방과 통신을 연결한다. 종료할 때는 4-way handshaking이다.
3-way handshaking:

  1. SYN (Synchronize): 클라이언트가 서버에 연결을 요청
    클라이언트 -> 서버: SYN (순서 번호 x)

  2. SYN-ACK (Synchronize-Acknowledge): 서버가 클라이언트의 요청을 수락하고, 동시에 클라이언트에게 자신의 연결 요청
    서버 -> 클라이언트: SYN-ACK (순서 번호 y, 응답 번호 x+1)

  3. ACK (Acknowledge): 클라이언트가 서버의 요청을 수락
    클라이언트 -> 서버: ACK (응답 번호 y+1)

4-way handshaking:

  1. FIN (Finish): 클라이언트가 연결을 종료하고 싶음을 서버에게 알립니다.
    클라이언트 -> 서버: FIN (순서 번호 u)
  2. ACK (Acknowledge): 서버가 클라이언트의 FIN을 수락하고, 연결 종료 요청을 수락합니다.
    서버 -> 클라이언트: ACK (응답 번호 u+1)
  3. FIN (Finish): 서버가 연결을 종료하고 싶음을 클라이언트에게 알립니다.
    서버 -> 클라이언트: FIN (순서 번호 v)
  4. ACK (Acknowledge): 클라이언트가 서버의 FIN을 수락하고, 연결 종료 요청을 수락합니다.
    클라이언트 -> 서버: ACK (응답 번호 v+1)

3. 데이터 보증과 재전송 제어

연결이 생성된 후에 데이터 송수신이 시작된다.

4. 흐름 제어와 폭주 제어

흐름제어

  • 수신 측에서 수신용 소켓 버퍼가 넘쳐 더 이상 수신이 불가능하게 되면 수신 윈도우 크기를 작게 만들고 송신 측에 알린다. 송신 측은 윈도우 크기 이상의 데이터는 ACK 없이 보낼 수 없게 된다.

폭주제어

  • 송신측에서 네트워크가 혼잡하면 폭주 윈도우 크기를 작게 해서 전송 데이터 양을 줄인다.

IP 계층 통신

IP 역할은 전달받은 데이터를 서버까지 전해주는 것이다.
IP 주소를 이용해 대상 서버를 지정할 수 있다. 하지만 서버가 항상 같은 네트워크에 있지 않기 때문에 다른 네트워크를 거쳐서 최종 목적지까지 전송되는 과정을 라우팅이라고 한다
전송계층에서 캡슐화한 세그먼트를 IP 패킷으로 캡슐화한다.

데이터 링크 계층 통신

IP패킷이 만들어지면 링크 계층 처리가 시작된다.
여기서 대표적으로 사용되는 프로토콜은 이더넷(Ethernet)이다.

IP는 IP주소를 사용하여 여러 네트워크를 거쳐 데이터를 전송할 수 있지만, 이더넷은 동일 네트워크 내, 즉 자신이 포함된 링크 내에서만 데이터를 전송할 수 있다. 이때 사용되는 주소가 MAC 주소 다.

  • MAC 주소는 네트워크 통신을 하는 하드웨어에 할당된 주소로, 모든 장비가 고유한 물리 주소를 가지고 있다.

물리층 통신

물리층은 말 그대로 통신 케이블과 같은 물리적 장비로 데이터를 전송한다.

1개의 댓글

comment-user-thumbnail
2024년 6월 3일

글이 깰꼼하네요 ^^~ 잘 보고 갑니다 ~!~! 강아지도 너무 귀엽네요

답글 달기