[TIL] OSI 7 Layer 및 TCP handshake

krkorklo·2022년 8월 25일
0

TIL

목록 보기
11/29

OSI 7 Layer

1. 물리 계층 (bit)

  • 컴퓨터가 데이터를 주고받으려면 0-1의 데이터를 주고받을 수 있어야 한다
    0-1의 데이터는 수평선과 수직선이 있는 전자기파로 0~무한대의 주파수를 가진다
    아날로그 식으로 주파수를 바꿔서 전송을 해야한다!
  • 0과 1의 비트열을 아날로그 신호로 바꾸어 전선으로 흘려보내는 encoding, 아날로그 신호를 0과 1의 나열로 해석하는 decoding
  • 물리 계층은 물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈!
  • 전기적, 기계적 특성을 이용해 데이터를 전송하기만 하고 오류 확인은 하지 않음
  • 물리계층 모듈은 하드웨어적으로 구현되어있다

2. 데이터 링크 계층 (frame)

  • 한 대의 컴퓨터가 여러 컴퓨터와 연결하기 위해서는 전선이 많아질 수 있음
    → 비용에서 비효율적
    → 하나의 전선으로 통신할 수 있는 방법이 필요
    → 모든 컴퓨터를 하나의 전선으로 연결하면 다른 한 대의 컴퓨터에 데이터를 전송하고 싶을때도 모든 컴퓨터가 데이터를 볼 수 있는 문제
    → 메시지의 목적지를 확인하기 위한 switch가 필요!!
  • 서로 다른 네트워크에서는 전선으로 연결되지 않음
    switchswitch의 연결이 필요
    router(공유기)를 사용해 스위치를 연결하면 서로 다른 네트워크 간에 전선으로 연결이 가능!! (routerrouter를 계속해서 연결 가능)
    → 전세계의 컴퓨터를 연결한 것을 인터넷이라고 한다
  • 여러 컴퓨터가 하나의 스위치가 연결되어 있을때 여러 컴퓨터로부터 한번에 데이터를 받으면 제대로된 데이터를 받지 못하는 문제
    → 송신자가 데이터의 앞뒤에 특정한 비트열을 붙여서 해당 비트열을 통해 시작과 끝을 확인!! (framing)
  • 데이터 링크 계층은 같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고받기 위해서 필요한 모듈
  • 하드웨어적으로 구현되어있다

3. 네트워크 계층 (packet - datagram)

  • 원하는 데이터를 특정 컴퓨터에 전송하기 위해서 데이터 앞에 수신자의 ip 주소를 붙임
    패킷이 생성
    → 직접적으로 연결된 라우터로 패킷을 전송
    → 라우터는 패킷을 열어 목적지 ip 주소를 확인하고 연결된 컴퓨터 중 해당 ip 주소가 있는지 확인
    → ip 주소가 없는 경우 상위 라우터에게 패킷 전송
    → 해당 과정을 반복해서 목적지를 찾음
  • 네트워크 계층은 수많은 네트워크의 연결로 이루어진 inter-network에서 목적지로 데이터를 전송하기 위해 ip 주소로 길을 찾고 다음 라우터에 데이터를 넘겨준다 (forwarding)
  • ip 주소를 붙여 라우터가 목적지를 찾도록 도움
  • 운영체제 커널에 소프트웨어적으로 구현되어있다

4. 전송 계층 (segment)

  • 수신자는 전세계의 컴퓨터로부터 데이터를 받을 수 있음
  • 데이터를 받는 컴퓨터가 여러 프로세스를 가지고 있을때 어떤 데이터가 어떤 프로세스에게 할당되어야할지 어떻게 알 수 있을까
    → 프로세스는 port 번호(하나의 컴퓨터에서 동시에 실행되는 프로세스들이 겹치지 않게 가져야하는 정수 번호)를 가짐
    → 송신자가 데이터를 보낼때 데이터를 받을 수신자 컴퓨터에 있는 프로세스 port 번호를 붙여서 보냄!!
  • 전송 계층은 port 번호를 사용해서 최종 목적지인 프로세스까지 데이터가 도달할 수 있게하는 모듈

5. 세션 계층 (data)

  • 응용 프로그램 간의 논리적 연결인 세션을 관리해 연결 접속 및 동기제어 역할
  • 세션을 생성, 유지, 종료, 복구하며 송수신간의 대화 제어를 통해 데이터를 전송
  • 대표적인 프로토콜로 SSH, TLS가 있다

6. 표현 계층 (data)

  • 데이터 형식 설정과 부호 교환, 암호화 및 복호화를 담당
    → 송수신자가 이해할 수 있도록 데이터를 표현하는 역할

7. 응용 계층

  • TCP/IP 소켓 프로그래밍 : 전송 계층에서 제공하는 API를 활용해 통신 가능한 프로그램을 만드는 것
    → 누구든 자신만의 응용 계층을 만들어서 사용 가능
  • 대표적인 응용 계층 프로토콜 HTTP
    • encoding : status code 및 정보를 붙임
    • decoding : status code 및 정보를 빼고 데이터를 받음

현대 인터넷 모델

  • OSI 모델이 TCP/IP 모델과의 점유 싸움에서 졌기 때문에 현대 인터넷은 TCP/IP 모델을 따른다
  • 기존 TCP/IP : 응용 계층, 전송 계층, 인터넷 계층, 링크 계층
  • 최신 TCP/IP : 응용 계층, 전송 계층, 네트워크 계층, 데이터 링크 계층, 물리 계층

TCP / IP

TCP

  • 전송 계층의 프로토콜 중 하나
  • 시작 port 번호와 목적지 port 번호를 가진다
  • 연결 지향형 프로토콜이기 때문에 데이터를 전송하기 전에 송수신 측의 연결 작업(handshake)이 필요
  • UDP
    • 비연결 지향형 프로토콜이기 때문에 port 번호만 존재

IP

  • 인터넷 계층의 프로토콜 중 하나
  • 시작 ip 주소와 목적지 ip 주소를 가진다
    • DNS 서버에 해당 도메인의 ip 주소를 요청해서 받아온다
    • DNS 서버는 HTTP request와 비슷하게 도메인이 담긴 쿼리를 도메인에 보내 도메인 서버가 ip 주소를 리턴!

MAC

  • ARP(주소 해석 프로토콜)를 사용해 내 컴퓨터의 ip 주소를 MAC 주소로 변환

TCP handshake

TCP 3-way handshake

  • TCP가 연결 지향형 프로토콜이기 때문에 데이터를 전송하기 전에 송수신 측의 연결 작업이 필요
  • 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장
  • 클라이언트가 서버에 접속을 요청하는 SYN 패킷 전송
  • 서버가 클라이언트의 접속을 허용한다는 SYN 패킷ACK 패킷 전송
  • 클라이언트가 서버에 다시 ACK 패킷 전송
    • SYN(Synchronization) : 연결 요청, 세션을 설정하는데 사용되며 초기 시퀀스 번호를 전송
    • ACK(Acknowledgement) : 보낸 시퀀스 번호에 TCP 계층에서의 길이 또는 양을 더한 것과 같은 값을 ACK에 포함해서 전송 (받았다는 신호)

TCP 4-way handshake

  • 3-way handshake가 TCP의 연결을 초기화할때 사용한다면 4-way handshake는 세션을 종료하기 위해 사용
  1. 클라이언트가 연결을 종료하겠다는 FIN flag를 전송 - 클라이언트는 FIN-WAIT 상태가 된다
  2. 서버는 FIN flag를 받고 ACK 확인 메시지를 전송 - 서버는 통신이 끝날때까지 기다리는 CLOSE-WAIT 상태, 클라이언트는 FIN-WAIT2 상태가 된다
  3. 연결을 종료할 준비가 되면 준비가 완료됨을 알리기 위해 클라이언트에 FIN flag를 전송 - 서버는 LAST-ACK 상태가 된다
  4. 클라이언트가 확인 후 ACK를 전송 - 클라이언트는 FIN-WAIT2TIME-WAIT로 변경된다

TCP Flag

  • SYN(연결 요청 플래그) : TCP에서 세션을 성립할때 가장 먼저 전송하는 패킷으로 시퀀스 번호를 임의적으로 설정
  • ACK(응답 플래그) : 상대방으로부터 패킷을 받았음을 알려주는 패킷
  • FIN(연결 종료 플래그) : 세션 연결을 종료시킬때 사용되며 더 이상 전송할 데이터가 없음을 알려주는 플래그
  • RST(연결 재설정 플래그) : 리셋을 하는 과정으로 양방향에서 동시에 일어나는 중단 작업 - 비정상적인 세션 연결 끊기
  • PSH(밀어넣기) : 버퍼가 채워지기를 기다리지 않고 데이터를 전달
  • URG(긴급 데이터 플래그) : 전송하는 데이터 중 긴급하게 전달할 내용이 있는 경우 사용

상태

  • CLOSE : 연결이 수립되기 전 상태
  • ESTABLISHED : 연결이 수립된 상태로 데이터를 교환할 수 있는 상태
  • FIN-WAIT : close를 호출한 측의 소켓이 진입하는 상태로 FIN을 전송 후 상대의 ACKFIN을 기다리는 상태
  • FIN-WAIT2 : 자신이 보낸 FIN에 대한 ACK를 받았고 상대의 FIN을 기다리는 상태
  • CLOSE-WAIT : close를 받은 후의 상태 - ACK 전송
  • LAST-ACK : CLOSE-WAIT 상태를 처리 후 자신의 FIN 요청에 대한 ACK를 기다리는 상태
  • CLOSING : 상대방의 FINACK를 보냈지만 자신의 FIN에 대한 ACK를 못 받은 상태
  • TIME-WAIT : 모든 FIN에 대한 ACK를 받고 연결 종료가 완료된 상태, 새 연결과 겹치지 않도록 일정 시간동안 기다린 후 CLOSED
    • Time-wait가 없으면 패킷의 손실이 발생하거나 연결 해제가 제대로 되지 않을 수 있음!

Base64 인코딩

  • 64진법으로 8비트 이진 데이터를 문자 코드에 영향을 받지 않는 공통 아스키 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식
  • 먼저 24bit의 버퍼를 생성하고 위쪽부터 바이트 데이터를 넣은 뒤 6bit단위로 잘라 Base64 테이블의 아스키 문자로 변환
  • 원본 문자열 → 아스키 binary → 6bit로 자르기 → base64 encoding

  • base64 인코딩을 하면 6bit당 2bit의 오버헤드가 발생해 전송해야할 데이터의 크기가 33%정도 늘어남
    → 하지만 통신 과정에서 바이너리 데이터의 손실을 막기 위해 필요

UUID v4

  • Universal Unique Identifier로 네트워크 상에 존재하는 개체들을 식별하고 구별하기 위해 개발 주체가 스스로 이름을 지어 고유성을 충족시킬 수 있는 방법
  • 32개의 문자, 4개의 하이픈으로 구성되어 총 36개의 문자로 이루어져있다 (128bit)
  • UUID 종류
    • v1: 타임스탬프(시간) 기준
    • v3: MD5 해시 기준
    • v4: 랜덤값 기반
    • v5: SHA-1 해시 기준

참고자료
https://korean-otter.tistory.com/entry/OSI-7계층
https://mindnet.tistory.com/entry/네트워크-쉽게-이해하기-22편-TCP-3-WayHandshake-4-WayHandshake
https://velog.io/@averycode/네트워크-TCPUDP와-3-Way-Handshake4-Way-Handshake
https://sh-safer.tistory.com/146
https://seongonion.tistory.com/74
https://devuna.tistory.com/41#recentComments
https://velog.io/@koreanhole/UUID가-겹치면-어쩌지

0개의 댓글