본문 바로가기
CS/NETWORK

네트워크

by 나른한 사람 2021. 9. 17.

네트워크

1. OSI 7계층

  • 물리 계층 (Physical Layer): Bit
    • 데이터를 전기적인 신호로 변환, 데이터 전송
  • 리피터, 케이블, 허브 등
  • 데이터 링크 계층 (Data Link Layer): Frame
    • 주소 할당, 오류 감지
  • Ehternet, Switch, Bridge
  • 네트워크 계층 (Network Layer): Packet(Datagram)
    • 라우팅, 흐름 제어, 세그멘테이션, 오류 제어, 인터네트워킹
  • IP, IPSec, ICMP
  • 전송 계층 (Transport Layer): Segment
    • 신뢰성있는 데이터를 주고 받을 수 있도록 해줌.
    • 시퀸스 넘버 기반 오류 제어
    • TCP : 신뢰성, 연결, UDP : 비신뢰성, 비연결, 실시간
  • TCP, UDP
  • 세션 계층 (Session Layer): Data
    • 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법 제공
    • TCP/IP 세션 만들고 없애는 책임을 짐
  • API, Socket
  • 표현 계층 (Presentation Layer): Data
    • 데이터 표현 독립성 제공, 암호화, 인코딩
    • 응용 계층 (Application Layer): Data
    • HTTP, FTP, DNS
    • 최종 목적지, 응용 프로세스와 직접 관계하여 서비스 수행
    • UI, 전자우편, 데이터베이스 관리 등 서비스 제공
  • JPEG, MPEG

2. TCP

연결형, 신뢰적인 연결방식, Packet

  • 3-way handshake: 연결 수립 ( 3 단계 )

    1. 클라이언트 -> 서버: SYN 패킷 (random_x, ) 보냄
      1+. -> 서버: SYN 패킷 받음
    2. 서버 -> 클라이언트: SYN + ACK 패킷 (random_y, random_x+1) 보냄
      2+. -> 클라이언트: SYN, ACK 패킷 받음
    3. 클라이언트 -> 서버: ACK 패킷 ( , random_y+1) 보냄
  • 4-way handshake: 연결 해제 ( 4 단계 )

    1. 클라이언트 -> 서버: FIN 플래그 보냄 (종료 요청)
      1+. -> 서버: FIN 받음
    2. 서버 -> 클라이언트: 확인 ACK 보낸 후 남은 데이터 모두 보냄
    3. 서버 -> 클라이언트: 데이터 모두 보낸 후 FIN 플래그 보냄
      3+. -> 클라이언트: FIN 받음
    4. 클라이언트 -> 서버: 확인 ACK 보냄
    • 서버는 클라이언트로부터 ACK 받은 후 소켓 닫음.
    • 클라이언트는 TIME_WAIT 시간이 지나면 닫음. ( FIN보다 먼저 보낸 요청이 늦게 도착한 경우 받을 때 까지 기다려야 함 )
  • 흐름제어

    • 송신측과 수신측의 데이터 처리 속도 차이 해결, 송신측의 속도가 빠를 경우 문제가 생김
    • 수신측에서 제한된 저장 용량을 초과한 이후의 데이터는 손실 가능성 -> 데이터 전송/응답 빈번히 일어남
    • Receiver가 Packet 지나치게 많이 받지 않도록 조절
    • Receiver가 Sender에게 자신의 현재 상태를 Feedback
    • 해결방법
    • Stop and Wait: 전송한 패킷에 대해 확인 응답을 받은 후에 다음 패킷 전송
    • Sliding Window: 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인 응답 없이 세그먼트 전송
  • 혼잡제어

    • 송신측과 네트워크의 데이터 처리 속도 차이 해결
    • 한 라우터에 데이터가 몰리면 모두 처리할 수 없게 됨, 호스트는 재전송 -> 혼잡 가중, 오버플로우, 데이터 손실 발생
    • 해결 방법
    • AIMD
      • 처음에 패킷을 하나씩 보내고 문제없이 도착하면 window 크기 1씩 증가
      • 패킷 전송에 실패 or Time-out -> 절반으로 줄임
      • 시간이 흐르면 평형상태로 수렴, But 초기에 오랜시간 걸림, 혼잡 미리 감지 못함
    • Slow Start
      • 패킷이 도착하면 ACK 패킷 마다 window size 1씩 증가, 한 주기마다 window size 2배
      • 혼잡 발생 시 window size를 1로 줄임
    • Fast Retransmit
      • 순서대로 패킷을 받지 않은 경우 중복된 ACK 패킷을 받게 되고, 중복 패킷 3개 감지하는 순간 문제가 되는 순번의 패킷 재전송
    • Fast Recovery
  • Question
    Q. 초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유?
    A. Connection을 맺을 때 사용하는 포트(Port)는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용된다. 따라서 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용하는 가능성이 존재한다. 서버 측에서는 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순처적인 Number가 전송된다면 이전의 Connection으로부터 오는 패킷으로 인식할 수 있다. 이런 문제가 발생할 가능성을 줄이기 위해서 난수로 ISN을 설정한다.

UDP

비연결형, 신뢰성 낮음, Datagram

  • 데이터의 처리가 빠름, 실시간/온라인 게임
  • 연결을 위해 할당되는 논리적 경로가 없음, 각각의 패킷은 다른 경로로 전송, 처리
  • 정보를 주고 받을 때 신호를 보내지 않음
  • CheckSum 필드를 통해 최소한의 오류만 검출

HTTP, HTTPS

  • HTTP: TCP/UDP 사용 80번 포트
    • 비연결(Connectionless): 클라이언트가 서버에 요청 서버가 응답 하면 연결이 끊김
    • 무상태(Stateless): 연결을 끊는 순간 클라이언트-서버 통신 끝남, 상태 정보를 유지하지 않음
  • HTTPS: HTTP의 보안이 강화된 버전, TCP/IP 사용 443번 포트
    • TLS/SSL 프로토콜 사용
    • 공개키 알고리즘 방식
    • 공개키: 모두에게 공개, 공개키 저장소에 등록
    • 개인키: 개인에게만 공개, 클라이언트-서버 구조에서는 서버가 가짐
    • 사용자의 데이터를 공개키로 암호화(공개키 얻은 인증된 사용자) -> 서버로 전송(개인키 없으므로 가로채도 복호화 불가능) -> 서버의 개인키를 통해 복호화
    • 장점: 안전
    • 단점; http에 비해 느림, 설치/인증서 유지에 추가 비용 발생, 암호화 과정이 웹 서버에 부하, 인터넷 연결 끊기면 재인증 시간 소요

CORS

웹 서버에 보안 cross-domain 데이터 전송을 활성화하는 cross-domain 접근 제어권을 부여함.

쿠키와 세션

쿠키: 클라이언트에 저장, 상대적으로 보안에 취약함, 만료시간에 따라 브라우저 종료해도 남아있을 수 있음, 빠름
세션: 서버에 저장되며 쿠키를 이용해 Session ID만 저장하고 이 값으로 구분해서 서버에서 처리하므로 보안성 좋음, 만료시간 정할 수 있지만, 브라우저 종료되면 삭제됨, 쿠키보다 느림

REST

네트워크 상에서 클라이언트-서버 통신 방식 중 하나

  • 구성 요소: 자원(URI), 행위(Verb): Method, 표현(Representation of Resource): JSON, XML, TEXT, RSS 등

  • 특징

    • Server-Client 구조
    • Stateless
    • Cacheable
    • Layered System
    • Uniform Interface
    • Code On Demand (optional)

    REST API

    • 설계 기본 규칙
    • URI는 정보의 자원을 표현해야 함: 동사보다는 명사, 소문자 복수형
    • 행위는 HTTP Method: URI에 method 들어가면 안됨, 행위에 대한 동사 표현 들어가면 안됨

    LINK

'CS > NETWORK' 카테고리의 다른 글

HTTP/HTTPS 암호화 과정  (0) 2021.09.28
HTTP status code  (0) 2021.09.28

댓글