[cs 정리]네트워크

jiwon·2022년 4월 10일
0

Computer Science

목록 보기
3/5
post-thumbnail

1. OSI 7계층과 각 층에 대한 설명

OSI 7계층은 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것입니다. 응용 계층, 표현 계층, 세션 계층, 전송 계층, 네트워크 계층, 데이터링크 계층, 물리 계층으로 이루어져 있습니다.

osi 7계층은 이론적인 모델이고, 실제로 데이터를 전송하는 데 사용되는 모델은 tcp/ip 모델이라고 한다. osi는 통신 전반에 대한 표준이고, tcp/ip는 데이터 전송기술에 특화되어 있다.

각각이 헤더를 붙여 캡슐화했기 때문에 문제가 발생했을때 빠르게 대응할 수 있다.

7계층-응용 계층(Application Layer)

HTTP, DNS등을 이용해 사용자가 네트워크에 접속할 수 있도록 해주는 계층

6계층-표현 계층(Presentation Layer)

데이터를 정해진 형태로 변환(인코딩 등)

5계층-세션 계층(Session Layer)

포트 번호를 기반으로 통신 세션을 구성한다.

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

엔드포인트 간 제어와 에러를 관리. TCP, UDP 프로토콜이 포함된다.
여기서 붙은 헤더를 세그먼트라고 하며, 세그먼트에 포트 정보가 포함된다.

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

노드 대 노드 간 연결을 관리. 대표적인 프로토콜은 IP가 있으며 이곳에서 붙은 헤더를 패킷이라고 한다.

MAC 어드레스간 주소 접근을 담당. 스위치가 이 계층의 장비이다.

1계층-물리 계층(Physical Layer)

bit 흐름을 전송하기 위한 기능을 조정한다. 허브가 이 계층의 장비이다.

2. TCP/IP 의 개념

TCP/IP는 데이터를 전송하기 위한 프로토콜입니다.응용 계층, 전송 계층, 인터넷 계층, 네트워크 엑세스 계층으로 이루어져 있습니다.

4계층-응용 계층(Application Layer)

OSI의 세션+표현+응용. 응용 프로그램 구현

3계층-전송 계층(Transport Layer)

전송, 통신 노드간의 연결 제어 및 신뢰성 있는 데이터 전송 담당

2계층-인터넷 계층(Internet Layer)

전송, 통신 노드간의 연결 제어 및 신뢰성 있는 데이터 전송 담당

1계층-네트워크 엑세스(Network Access Layer)

OSI의 세션+표현+응용, 응용 프로그램 구현

3. TCP 와 UDP의 차이

TCP와 UDP 프로토콜은 모두 전송계층에서 동작하는 프로토콜입니다. TCP는 신뢰성 있는 연결을 제공하지만 UDP는 그렇지 않습니다. 대신 UDP의 경우 세팅 시간이 TCP보다 적어 속도가 더 빠릅니다.

TCP

  • 신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜
  • 흐름제어, 혼잡제어, 오류제어 지원
  • 연결 설정시 3 way handshake를, 연결 해제시 4 way handshake 진행
  • UDP보다 속도가 느리다
    EX) 웹 http 통신, 이메일, 파일 전송

UDP

  • 데이터를 데이터그램 단위로 처리하는 프로토콜
  • 신뢰성 낮음
  • 속도가 빠르고 부하가 적다
  • EX) Real Time Protocol(RTP), Multicast, DNS

4. TCP 3-way-handshake 과정에 대한 설명

TCP는 3-way-handshake를 통해 양쪽 모두 데이타를 전송할 준비가 되었다는 것을 보장합니다. 먼저 클라가 서버에게 SYN (접속 요청 메세지)를 보냅니다. 클라는 SYN을 받고, 답장을 위해 SYN과 ACK 메세지를 보냅니다. 클라가 서버에게 수락 확인 ACK를 보내면 연결이 완료됩니다.

맺을 때:3-way handshake

step1: TCP SYN segment 전송(SYNbit=1, 어플리케이션 계층 데이터는 포함x) ISN(Inital Seq Num)을 2^32-1 중 하나 선택
step2:서버 호스트에 TCP SYN segment 도착하면, 답장 위해 서버의 ISN 선택. ACKnum=클라의 ISN(Seqnum)+1로 설정. SYNbit=1,Ackbit=1
step3:클라는 답장 위해...SYNbit=0, Acknum=서버의 ISN+1, Ackbit=1

(참고)끊을 때:4-way handshake


맺을때는 3-way handshake로 맺고, 끊을때는 4-way handshake로 끊는다.

클라가 FIN segment보내면 (이제 클라는 받기만 가능) 서버는 그에 대한 확인 segment 보내고, 클라가 그에 대한 확인 ack 보냄.
클라는 RTT 시간 정도, 서버는 max num of retry 정도는 기다려 보고 종료.

5. HTTP와 HTTPS의 차이

HTTP는 인터넷 상에서 클라이언트와 서버가 자원을 주고받기 위한 프로토콜입니다. HTTP는 텍스트로 자원을 주고 받기 때문에 보안 이슈가 발생할 수 있는데, SSL(Secure Sockets Layer)이라는 보안계층을 사용하여 이 보안 이슈를 보완한 것이 HTTPS입니다.

HTTPS 어떻게 보안 이슈 해결하는가?

기존의 HTTP 프로토콜은 전송계층의 TCP위에서 동작한다.
HTTPS는 이 전송 계층 위에 SSL을 올려서 보안을 보장한다.
이 통신 방식을 SSL 암호화 통신이라고 하는데, SSL 암호화 통신은 공개키 암호화 알고리즘을 통해 구현된다.

6. CORS에 대한 설명과 동작 원리

CORS(Cross-Origin Resource Sharing)는 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. CORS의 동작 방식에는 단순 요청 방법과 예비 요청을 먼저 보내는 방법 2가지가 있습니다. 단순 요청 방식은 서버에 바로 요청하고, 예비 요청을 먼저 보내는 방법은 예비 요청을 먼저 보내 안전한지 판단 한 후 본 요청을 보내는 방식입니다.

여기서 Origin(출처란)?


url 구조는 위와 같이 생겼는데, 출처는 여기서 protocol,host,port를 합친 걸 말한다.

7. DNS에 대한 설명

DNS(Domain Name System)은 웹사이트의 IP 주소와 도메인 주소를 변환 해 주는 시스템입니다.

🔎브라우저에 naver.com 쳤을때 일어나는 일

  • 브라우저에 naver.com을 검색한다.
  • 이 요청은 DNS에서 naver.com에 해당하는 IP 주소를 찾는다.
  • 이 IP 주소에 해당하는 웹 서버로 요청을 전달한다.

8. 프록시 서버가 필요한 이유

서버와 클라이언트 사이에서 중계인 역할을 하는 것이 프록시 서버입니다. 프록시 서버는 캐시를 사용하여 리소스에 접근을 빠르게 할 수 있습니다. 또한 프록시 서버가 중간에 끼면 보안에도 도움이 되기 때문에 사용합니다.

※ proxy가 origin server에서 가져와야 하는 상황이라면 프록시가 클라.

9. OAuth 에 대해서 간단히 설명

OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준입니다. (위키백과)

웹사이트들을 돌아보다보면 '네이버로 로그인하기', '이메일로 로그인하기' 등등이 있어 간편하게 로그인할 수 있다. 이것이 바로 OAuth를 이용한 것으로, OAuth를 이용하면 이 인증을 공유하는 애플리케이션끼리는 별도의 인증이 필요없다.

10. 로드 밸런싱에 대한 설명

서버에 가해지는 부하를 분산해주는 장치 또는 기술이 로드 밸런싱입니다. 보통 여러 대의 서버가 나눠서 일할 수 있도록 하는 scale out 방식을 사용합니다.

로드 밸런싱에서 서버 선택하는 방식

  • 라운드 로빈: cpu 스케줄링의 그것...돌아가면서 처리한다.
  • Least Connections: 가장 일이 없는 서버에 부담한다.
  • Source : 사용자 IP를 해싱하여 분배(특정 사용자가 항상 같은 서버로 연결되는 것을 보장)

11. 공개키 암호화 시나리오를 설명해주세요

서버는 공개키와 개인키를 가지고 있습니다. 외부에는 공개키만 공유합니다. 클라가 요청을 보낼때 서버가 공유한 공개키를 가지고 암호화합니다. 요청을 전달받은 서버는 요청을 개인키로 복호화합니다.

profile
개발 공부합니다. 파이팅!

0개의 댓글