OSI 7 계층 정리

Park Jae Hong·2022년 8월 3일
0

OSI 7 계층

1계층 물리 계층 (Physical Layer)

  • 비트 스트림 (전기적 충격, 빛 또는 무선 신호)을 전기적 및 기계적 수준에서

  • 네트워크를 통해 전달

  • 케이블, 카드 및 물리적 측면 정의를 포함하여 캐리어에서 데이터를 송수신하는 하드웨어 수단을 제공한다.

  • 역할 : 인코딩, 신호 처리, 물리적 데이터를 전송, 하드웨어 명세

  • 네트워크 지원 계층

  • 데이터 전송 단위 : 비트 (Bit)

  • 프로토콜 : RS-232, RS-449 등 케이블

  • 장비 : 허브. 리피터

  • 범위 : 로컬 장비 간에 전송된 전기 또는 광 신호


  • 인접한 통신 장치 간의 신뢰성 있는 정보 전송을 보장

  • 전송 프로토콜 지식 및 관리를 제공하고 물리 계층, 흐름 제어 및 프레임 동기화에서 오류를 처리

  • MAC (Media Acces Control) 계층과 LLC (Logical Link Control) 계층의 두 하위 계층으로 구분

  • MAC 하위 계층 : 네트워크의 컴퓨터에서 데이터에 대한 액세스 권한과 전송 권한을 제어

  • LLC 계층 : 프레임 동기화, 흐름 제어 및 오류 검사를 제어

  • 역할 : 논리적 연결 제어, 매체 접근 제어, 주소 지정, 에러 탐지와 처리

  • 네트워크 지원 계층

  • IEEE 802.2 LLC, 이더넷 관련 프로토콜 : 토큰링, PPP

  • 장비 : 브릿지, 스위치

  • 범위 : 로컬 장비 간에 전송된 하위 수준 데이터 메시지


3계층 네트워크 계층 (Network Layer)

  • 상위 레벨 데이터를 패킷 안으로 캡슐화하여 데이터 종류에 상관없이 한 호스트에서 다른 호스트로 그 패킷들을 라우팅

  • 역할 : 논리적 주소 지정, 라우팅, 데이터그램 캡슐화, 단편화와 재조합

  • 네트워크 지원 계층

  • 프로토콜 : IP, IPV6, IP NAT, IPsec, ICMP와 같은 라우팅 프로토콜

  • 장비 : 라우터

  • 범위 : 로컬 또는 원격 장비 간의 메세지


❗ 4계층 전송 계층 (Transport Layer)

  • 헤더에 송수신지 포트번호를 포함하여 올바르게 전달 될 수 있게 하는 계층

  • 전체 메시지를 종단 대 종단 간 제어와 에러를 관리

  • 패킷의 전송이 유효한지 확인, 전송에 실패된 패킷을 재전송 하는 등 신뢰성 있는 통신을 보장

  • 주소 설정, 오류 제어, 흐름 제어, 다중화 수행

  • 역할 : 프로세스 수준 주소 지정, 다중화 / 역다중화, 연결, 분할과 재조합, 흐름 제어

  • 데이터 전송 단위 : TCP 일 때 Segment / UDP 일 때 Datagram

  • 프로토콜 : TCP, UDP

  • 장비 : 게이트 웨이

  • 범위 : 소프트웨어 프로세스 간의 통신

3-Way Handshake

: TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 three-way handshake를 사용한다.TCP 3 Way Handshake는 TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.

Client ➡ Server (SYN)
:A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 되는 것이다.

Server ➡ Client (SYN ACK)
: B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.

Client ➡ Server (ACK)
: A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 B서버 상태가 ESTABLISHED 이다.위와 같은 방식으로 통신하는것이 신뢰성 있는 연결을 맺어 준다는 TCP의 3 Way handshake 방식이다.


5계층 세션 계층 (Session Layer)

  • 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공

  • 통신 세션을 구성하며 포트 번호를 기반으로 연결

  • 역할 : 세션 수립, 유지, 종료

  • 사용자 지원 계층

  • 프로토콜 : NetBIOS, SSH, 소켓, 네임드 파이프 (Named Piped), RPC

  • 범위 : 로컬 또는 원격 장비 간의


6계층 표현 계층 (Presentation Layer)

  • 응용 계층으로부터 받은 데이터를 하위 계층인 세션 계층에 보내기 전 통신에 적당한 형태로 변환

  • 세션 계층에서 받은 데이터는 응용 계층에 맞게 변환하는 역할을 수행

  • 코드 변환, 구문 검색, 데이터 압축 및 암호화 등의 기능 수행

  • 역할 : 데이터 번역, 압축, 암호화

  • 사용자 지원 계층

  • 프로토콜 : JPG, MPEG, AFP, PAP

  • 범위 : 애플리케이션 데이터 표현


7 계층 응용계층 (Application Layer)

  • 컴퓨터 네트워크 프로그래밍에서 IP 컴퓨터 네트워크를 통하는 프로세스 간 통신 접속을 위해 설계

  • 응용 계층 프로토콜은 기반이 되는 전송 계층 프로토콜을 사용하여 호스트 간 연결을 확립.

  • 응용 프로세스 간의 정보 교환, 전자 메일, 파일 전송 등의 서비스를 제공한다.

  • 역할 : 사용자 애플리케이션 서비스

  • 사용자 지원 계층

  • 프로토콜 : DNS, NFS, BOOTP, SNMP, FTP, SMTP, HTTP, Telnet

  • 범위 : 애플리케이션 데이터


프로토콜 스택의 내부 구성

: 역할이 서로 다른 몇 부분으로 나뉘어져 있는데 상하 관계는 작업을 의뢰하는 쪽이 위쪽, 의뢰를 받아 실제 작업하는 쪽이 아래에 있는데 이는 대강의 경향을 나타낼 뿐, 상하 관계는 때에 따라 역전 되는 경우도 있다.


출처 : 성공과 실패를 결정하는 1% 네트워크

✔ 애플리케이션

윗 부분 : 네트워크 애플리케이션
이는 브라우저, 메일러 (메일을 읽고 쓰는 소프트웨어), 웹 서버, 메일 서버, 등의 프로그램이 여기에 해당한다. 여기부터 아래로 향하는 데이터 송.수신 등의 일을 의뢰하고 브라우저 뿐만 아니라 어떤 애플리케이션도 네트워크에서 데이터를 송.수신하는 동작은 거의 비슷하다.
아랫 부분 : Socket 라이브러리 (리졸버 내장)

✔ OS

: 애플리케이션 아래에는 OS 내부를 나타내며, 여기에는 프로토콜 스택이 있다. 프로토콜 스택의 윗부분에는 TCP, UDP 라는 프로토콜을 사용하여 데이터 송.수신을 담당하는 부분이 있으며, 이 둘이 애플리케이션에서 보낸 의뢰를 받아 송.수신 동작을 실행한다.( TCP - 브라우저나 메일 등의 일반적인 애플리케이션에 사용, UDP - DNS 서버에 대한 조회 등에서 짧은 제어용 데이터를 송.수신할 때 사용. ) 그 아래에는 IP 프로토콜을 사용하여 패킷 송.수신 동작을 제어하는 부분이 있다. 인터넷에서 데이터를 운반할 때는 데이터를 작게 나누어 패킷이라는 형태로 운반하는데, 이 패킷을 통신 상대까지 운반하는 것이 IP의 주 역할이고 IP 안에는 ICMP와 ARP라는 프로토콜을 다루는 분분이 포함되어 있다. ICMP는 패킷을 운반할 때 발생하는 오류를 통지하거나 제어용 메시지를 통지할 때 , ARP는 IP 주소에 대응하는 이더텟의 MAC 주소를 조사할 때 사용. IP의 아래에 있는 LAN 드라이버는 LAN 어댑터의 하드웨어를 제어하고 그 아래 있는 LAN 어댑터가 실제 송.수신 동작, 즉 케이블에 대해 신호를 송.수신하는 동작을 실행.



데이터 송.수신의 요체가 되는 소켓

✔ 프로토콜 스택


: 프로토콜 스택은 내부에 제어 정보를 기록하는 메모리 영역을 가지고 있으며, 여기에 통신을 제거하기 위한 제어 정보를 기록한다. 대표적인 정보는 통신 상대의 IP 주소는 무엇인가, 포트번호는 몇 번인가, 통신 동작이 어떤 진행 상태에 있는가 하는 것입니다. 본래 소켓은 개념적인 것이어서 실체가 없으므로 굳이 말하자면 이 제어 정보가 소켓의 실체이다. 프로토콜 스택은 기록한 제어 정보를 참조 하면서 동작한다. (Ex - 데이터를 송신할 때는 소켓에 기록되어 있는 상대측의 IP 주소나 포트 번호를 보고 그 IP 주소와 포트 번호를 대상으로 데이터를 송신한다. 그런데 도중에 데이터가 없어질 수 있으며, 이 경우 응답이 돌아오지 않는다. 따라서 소켓에는 응답이 돌아오는지의 여부와 송신 동작 후의 경과 시간 등이 기록 되어 있고 프로토콜 스택은 이 정보를 보고 포기하거나 다시 보내는 동작을 실행한다. )


✔ 현실에서 소켓 살펴보기

: 윈도우의 경우 netstat 라는 명령으로 소켓의 내용을 화면에 표시 할 수 있다. 이 표시의 한 행이 하나의 소켓에 해당된다. 소켓을 만든다는 동작은 여기에 새로 한 행의 제어 정보를 추가하고 ‘여기부터 통신을 시작하는 곳’ 이라는 식으로 상태를 기록하거나 송.수신 데이터를 일시적으로 저장하는 버퍼 메모리를 준비하는 등 통신을 준비하는 작업이다.

✔ 표시의 의미

EX)
Proto : TCP
Local Address : 118.42.2.212:2477
Foreign Address : 222.233.53.144.80
State : EXTABLISHED
PID : 1720

: PID(Process ID) 가 1720인 프로그램이 118.42.2.212 라는 IP 주소를 할당한 LAN 어댑터를 사용하여 222.233.53.144 의 IP 주소를 할당한 상대와 통신하고 있다는 것이고, 자신의 2477, 상대는 80이라는 포토 번호를 사용하는 것도 알수 있다


서버 접속

✔ 접속의 의미

: 이더넷이나 통신 회선은 항상 케이블이 연결되어 있으므로 언제나 신호를 보낼 수 있다. 그러므로 데이터를 신호로 변환하여 송신하기만 하면 언제든지 통신이 가능하다. 그러나 이 시점에서, 즉 소켓을 만든 직후에 애플리케이션에서 데이터 송신 의뢰가 아직 거기에 아무 것도 기록되어 있지 않으므로 통신상대가 누구인지 모른다. 이상태에서는 송신 의뢰가 와도 데이터를 어디로 보내면 좋을지 알수 없고 브라우저는 URL을 바탕으로 서버의 IP 주소를 조사하고, 포트 번호는 80번을 사용하도록 규칙이 정해져 있으므로 필요한 정보를 안다고 할 수 있다. 그러나 브라우저가 알고 있는 정보만으로는 부족해서 socket 을 호출하여 소켓을 만드는 동작만으로는 프로토콜 스택에 아무 것도 전달되지 않기 때문에 서버의 IP 주소나 포트 번호를 프로토콜 스택에 알리는 동작이 필요한데 그 중 한가지 역할이 접속 이다.
서버 측도 클라이언트 측과 마찬가지로 소켓을 만드는 동작으로는 통신 상대를 알 수 없다. 또한 서버측은 애플리케이션에서도 상대를 알 수 없으므로 그래로는 언제까지나 상대를 알 수 없는 상태이고 그래서 클라이언트에서 ‘이곳의 IP 주소는 ooo.ooo.ooo.ooo 이고 포트 번호는 yyyy 입니다. 데이터 송.수신을 하고 싶은데 어떠세요 ?’ 라고 정보를 알려서 통신하려는 클라이언트가 있다는 것을 서버측에 전달하다. 그럼 서버 측에 프로토콜 스택도 클라이언트의 정보를 가질 수 있다.

✔ 접속 동작

: 통신 상대와의 사이에 제어 정보를 주고받아 소켓에 필요한 정보를 기록하고 데이터 송.수신이 가능한 상태로 만든다. 그리고 데이터 송.수신 동작을 실행할 때는 ‘버퍼 메모리’ 가 필요한데 이를 확보하는 것도 동작을 할 때 실행되는데, 이것이 ‘접속’한다는 동작이다.


✔ 제어 정보 (2 가지)


  1. 클라이언트와 서버가 서로 연락을 절충하기 위해 주고 박는 제어 정보, 이 제어 정보를 패킷의 맨 앞부분에 배치하는 곳부터 헤더 하고 부른다.
  2. 소켓에 기록하여 프로토콜 스택의 동작을 제어하기 위한 제어 정보

실제 접속 동작

: 가장 먼저 하는 것은 connect 호출이다. 그 후 서버측의 IP 주소와 포트 번호를 쓰면 명령이 프로토콜 스택의 TCP 담당 부분에 전달된다. 그러면 TCP 담당 부분은 IP 주소로 표시된 상대, 즉 서버의 TCP 담당 부분과의 사이에 제어 정보를 주고 받습니다.

  1. 데이터 송.수신 동작의 개시를 나타내는 제어 정보를 기록한 헤더를 만든다. 이 헤더에 가장 중요한 것은 송신처와 수신처의 포트 번호이다. 이를 통해 송신처가 되는 클라이언트측의 소켓과 수신처가 되는 서버측의 소켓을 지정할 수 있고 접속해야하는 소켓이 어느 것인지 확실히 하고 컨트롤 비트인 SYN 이라는 비트를 1로 만든다.


  2. TCP 헤더를 만들면 이것을 IP 담당 부분에 건네주어 송신하도록 의뢰한다.
    그러면 IP 담당 부분이 패킷 송신동작을 실행하고 네트워크를 통해 패킷이 서버에 도착하면 서버측의 IP 담당 부분이 이것을 받아 TCP 담당 부분에 건네준다. 이후 서버측의 TCP 담당 부분이 TCP 헤더를 조사하여 기록되어 있는 수신처 포트 번호에 해당하는 소켓을 찾아낸다. 해당 하는 소켓이 발견되면 여기에 필요한 정보를 기록하고 접속 동작이 진행중이라는 상태가 된다. 이 과정이 끝나면 서버의 TCP 담담 부분은 응답을 돌려 보낸다.


  3. 클라이언트와 마찬가지로 송신처와 수신처의 포트 번호나 SYN 비트 등을 설정한 TCP 헤더를 만든다. 그리고 응답을 돌려 보낼 때 ACK 라는 컨트롤 비트도 1로 만든다. 네트워크에는 오류가 있을 수 있으므로 패킷이 없어지는 경우에는 패킷이 도착한 것을 확인하면서 동작을 진행하는데, 이것을 확인하기 위해 ACK 비트를 1로 만드는 것이다. 그리고 TCP 헤더를 IP 담당 부분에 건네주어 클라이언트에 반송하도록 의뢰한다.


  4. 패킷이 클라이언트에 돌아오고 IP 담당 부분을 경유하여 TCP 담당 부분에 도착한다. 이때 TCP 헤더를 조사하여 서버측의 접속 동작이 성공 했는지 확인하고 SYN이 1 이면 접속 성공이므로 소켓에 서버의 IP 주소나 포트 번호 등과 함께 소켓에 접속 완료를 나타내는 제어 정보를 기록한다. (클라이언트는 끝남)

    ❗ 서버가 응답을 돌려보낼 때, ACK 비트를 1로 만들었는데, 이것과 같이 패킷이 도착한 것을 서버에 알리기 위해 ACK 비트를 1로 만든 TCP 헤더를 반송하면 데이터를 송.수신할 수 있는 상태가 된다. 이 때 파이프와 같은 것으로 소켓이 연결되었다고 생각할 수 있다. 이 파이프와 같은 것을 커넥션 이라고 한다.

참고 : https://dlgkstjq623.tistory.com/222 , https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake

profile
The people who are crazy enough to think they can change the world are the ones who do. -Steve Jobs-

0개의 댓글