OSI 7 Layer

taehee kim·2022년 5월 5일
0
post-custom-banner

7계층

HTTP

  • hypertext를 주고받기 위해 필요한 프로토콜
  • tcp 위에서 동작
  • stateless
  • 한번의 연결에 하나의 자원을 주고 받고 연결을 종료한다. → 여러 클라이언트에 대한 연결을 유지하는 부담이 없어짐.
  • But http2, http3에서는 통신 속도 향상을 위해 persistenct connection으로 여러 자원을 한 연결에 주고 받음.

stateless

  • 서버에 상태를 저장하지 않는다.
  • 서버가 바뀌어도 똑같이 동작 가능
  • 상태를 유지하게 되면 상태를 모두 넘겨주는 동작이 필요
  • scale out에 유리
  • 로그인 정도만 쿠키, 세션으로 구현

DNS

  • domain name과 ip주소를 매핑하여 저장한 서버
  • local DNS 서버에서 먼저 찾아봄
  • 없으면 외부 DNS서버가 계층형으로 되어있기 때문에 거기에서 root부터 시작하여 찾아서 응답 받음
  • 계층 적으로 되어있는 이유는 모든 DNS이름을 하나의 서버에 넣는 것은 트래픽 문제나 찾는 속도면에서 비효율적이기 때문이다.

6계층

  • Presentation Layer
  • 7계층 5계층 간에 데이터를 형태에 맞게 변환하는 기능
  • 데이터 압축, 암호화, 형식 변환

5계층

  • Session Layer
  • 두 이용자 사이에 세션을 두어 관련성을 유지함.

4계층

Socket

  • 운영체제에서 ipc 를 위해 제공하는 것
  • 서버 쪽에서는 생성→bind(특정 포트에 묶음)→listen(non-blocking, tcp인지 udp인지 설정)→accept(연결시 return 하는 것이 연결하면서 새로 생성된 socket임)
  • 클라이언트 쪽에서는 생성→connection
  • 한 프로세스에 여러 소켓이있을 수 있으며, 여러 소켓이 한 포트에 bind될 수 있다.
  • 소켓은 단순히 포트가 아니라 request ip, port, response ip, port 4개가 합쳐져서 정의 된다.

TCP (Transfer Control Protocol)

  • port 번호로 프로세스 찾음 - multiplex, demultiplex

  • 연결지향

    • 전달되는 위치에 호스트가 있는지 확인
  • 신뢰성

    • 데이터 전달이 됐는지 안됐는지 확인 가능
    • 순서 보장
    • 동작 원리
    • window size: send buffer에서 한번에 보내는 데이터 양
    • 각 socket은 send buffer(어플리케이션에서 받은 세그먼트들을 임시 저장해야함 어플리케이션의 쓰기 속도와 네트워크 전송 속도가 불일치하기 때문에 버퍼에 저장해야함.), receive buffer(받은 세그먼트들을 순서대로 어플리케이션에 주기 위해서)를 가짐
    • SYN 은 1BYTE단위로 주어지고 각 세그먼트 최 앞단 SYN을 header SYN 번호에 넣어서 보냄.
    • 제대로 받으면 다음 받을 번호를 ACK함(만약 200BYTE짜리 세그먼트를 SYN 0으로 보내고 잘 받으면 ACK200을 받아야함.)
    • 만약 받지 못하면 다시 ACK 0을 계속 보내서 처음부터 다시 재전송시킴.
  • 전송 제어

    • flow control

      • socket이 receive buffer에 있는 내용을 read 하는 속도가 느리다면 receive buffer 남은 부분이 적어질 것(receive window)이고 이를 보고 보내는 쪽에서 전송속도를 늦춘다.
    • congestion control

    • 네트워크 라우터의 버퍼 상황과 상관있음.

    • 모두 다같이 빨리 보내려고 하면 버퍼에 너무 많은 데이터가 쌓여서 다같이 재전송이 빈번해지고 느려짐.

    • window size 와 congestion size(라우터 상황에 따라 보내는 사이즈 조절) 중 작은 값을 사용

    • 자세한 원리:기본적으로 통신량을 조심스럽게 늘리고 loss가 발생했다고 판단되면 1/2, 혹은 slow start다시 시작.
      - slow start:처음에는 최소의 윈도우 사이즈를 잡고 x2배하며 윈도우사이즈를 늘린다.
      - 임계점에 도달하면 선형적으로 늘린다.
      - loss발생 기준 2가지
      - time expire:더 심각한 혼잡 상황으로보고 slow start로 돌아감
      - 3번의 같은 ack가 온경우(중간에서 특정 패킷이 유실되거나 순서가 뒤집어져서 왔지만 ack는 할 수있는 정도의 네트워크 상태): 1/2로줄이고 다시 선형 증가
      - 위에 두과정 반복

    • Bandwidth fairness: 위과정을 이용하면 자연스럽게 만족됨.

    • 늘어날때는 같이 선형적으로 늘어나다가 전체 bandwidth를 넘어서면 같이 1/2되고 그러다보면 서로 공평하게 수렴됨.

  • 3way handshaking(client 에서 connection 시스템콜)

    • 2way는 양방향으로 통신가능한지 확인할 수 없음.
    • 먼저 synbit와 synNum=x 를 보냄.
    • 받은 쪽에서 ackbit(너가 보낸걸 받았다) ackNum = x+1 , synbit, synNum = y
    • 보낸쪽에서 ackbit, synNum = y+1
  • 4way handshaking(client server각각에서 close 시스템 콜 시 2번씩)

    • 데이터를 모두 보내고 통신을 그만하고 싶은 쪽에서 finbit와 syn=x보냄
    • 반대쪽에서 알았다고 ackbit, ackNum=x+1 보냄
    • 반대쪽도 모든 데이터를 보내고 close하고 싶으면 마찬가지로 finbit 보내면
    • ackbit를 다시 보내줌

UDP

  • IP에 checksum 과 port로 프로세스를 찾을 수 있음.
  • HTTP3스펙에서는 UDP프로토콜을 사용함.

3계층

IP

  • IP주소를 통해 원하는 host로 데이터를 전달 할 수 있게 하는 프로토콜
  • 라우터를 거쳐서 전송하는곳으로 데이터 보냄
  • 한계
    • 비연결성
      • 전달되는 위치에 호스트가 있는지 확인할 수 없음
    • 비신뢰성
      • 중간에 유실되거나 순서를 보장하지 않음 →tcp로 보완
    • 한 ip에 있는 여러 프로세스를 나누어서 접근할 수 없음 → 포트

Router

  • 라우팅: 각 라우터에 보낼 곳을 지정할 테이블(다익스트라, 벨만포드로 결정됨)을 만듬
  • 포워딩: 라우팅한 내용에 맞추어 ip 주소에 따라 적절한 subnet으로 보냄
  • subnet이란 ip주소중 서브넷 마스크 만큼으로 이루어진 네트워크 자체의 주소
  • 라우터는 서브넷들의 경계!!!
  • LAN
    • 라우터를 통하지 않고 통신 할수있는 네트워크
    • 같은 서브넷에 속함, 서브넷 마스크까지의 ip주소가 같음
    • LAN은 라우터를 통해 다른LAN 과 통신
  • NAT(network address translation)
    • 라우터가 하는 역할로 ipv4의 주소가 부족하기 때문에 각 호스트를 사설 네트워크로 관리할 수 있게 하는 기술
    • 라우터를 경계로 내부에는 사설 ip주소를 할당하고 라우터를 지나서 통신할때 적절하게 외부 ip주소로 바꾸어줌
    • 라우터의 ip주소는 하나이기 때문에 사설ip하나당 같은 글로벌 ip주소에 포트번호를 다르게 하여 할당.
  • icmp: ip 에서 네트워크상의 문제가 발생시 발송지로 에러 내용을 알려주는 프로토콜

2계층

  • 인접한 노드들 간의 통신을 어떻게 할지
  • network interface card(nic): 기기 마다 들어있는 물리적 칩, mac주소를 가짐

switch

  • Lan안에서 mac 주소로 맞는 호스트를 찾아줌
  • arp사용하여 ip주소에서 mac주소를 찾아냄

기타:

게이트웨이:다른 계층간에 프로토콜 구조가 다를때 연결하는 기능

profile
Fail Fast
post-custom-banner

0개의 댓글