본문 바로가기

(18)

[네트워크] - Cookie & Session

Cookie & Session HTTP는 비상태성(Stateless) 프로토콜로 상태 정보를 유지하지 않는다. 연결을 유지하지 않기 때문에 리소스 낭비가 줄어드는 것은 큰 장점이지만 통신할 때마다 매번 연결 설정을 해야 하며, 이전 요청과 현재 요청이 같은 사용자의 요청인지 알 수 없다는 단점이 존재한다. 쿠키와 세션을 통해서 HTTP의 Stateless한 문제점을 해결할 수 있다. 저장위치 쿠키: 클라이언트의 웹 브라우저가 지정하는 메모리 or 하드 디스크 세션: 서버의 메모리 만료 시점 쿠키: 저장할 때, expires 속성을 정의하여 무효화시키면 삭제될 날짜를 지정할 수 있다. 세션: 클라이언트가 로그아웃하거나 설정 시간 동안 반응이 없으면 무효화되기 때문에 정확한 시점을 알 수 없다. 리소스 쿠키..

[네트워크] - HTTP, HTTPS

HTTP (HyperText Transfer Protocol) 웹 서버와 클라이언트 간의 문서를 교환하기 위한 통신 규약 웹에서만 사용하는 프로토콜로 TCP/IP 기반으로 서버와 클라이언트 간의 요청과 응답을 전송한다. HTTP의 특징 TCP 기반의 통신 방식 비연결 지향 브라우저를 통해 사용자의 요청으로 서버와 접속하여 요청에 대한 응답의 데이터를 전송 후, 연결을 종료한다. 간단하기 때문에 자원이 적게드는 장점이 있다. 하지만, 연결이 지속적이지 않기 때문에 사용자와 연결 종료후 추가적인 요청시 어떤 사용자의 요청인지 모른다는 점이 존재한다. 즉, 여러 사용자가 요청할 시 각각의 사용자 요청을 구분할 수 없어서 제대로 된 응답 데이터를 전송할 수 없다는 단점이 있다. 해결 방법으로는 쿠키, 세션, 히..

[네트워크] - 주소창에 naver.com을 치면 일어나는 일

주소창에 naver.com을 치면 일어나는 일 면접 질문에 자주 나오는 질문이다. 올해 어디 공채에서도 이 문제가 나왔는데, 답을 못했던 문제이다. 이번 기회에 정리해보자! IP 주소 IP 주소란 많은 컴퓨터들이 인터넷 상에서 서로를 인식하기 위해 지정받은 식별용 번호라고 생각하면 된다. 현재는 IPv4 버전(32 비트)로 구성되어 있으며, 127.0.1 같은 주소를 말한다. 시간이 갈수록 IPv4 주소의 부족으로 IPv6가 생겼는데, 128비트로 구성되어 있기 때문에 IP주소가 부족하지 않다는 특징이 있다. 도메인 네임(Domain Name) IP 주소는 12자리의 숫자로 되어 있기 때문에 사람이 외우기 힘들다는 단점이 있다. 그렇기 때문에 12자리의 IP 주소를 문자로 표현한 주소를 도메인 네임이라고..

[네트워크] - TCP (3 way handshake & 4 way handshake)

TCP의 3 way handshake와 4 way handshake 3 way handshake와 4 way handshake는 연결을 성립하고 해제하는 과정을 말한다. 3 way handshake - 연결 성립 TCP는 정확한 전송을 보장해야 한다. 따라서 통신하기에 앞서, 논리적인 접속을 성립하기 위해 3 way handshake 과정을 진행한다. 클라이언트가 서버에게 SYN 패킷을 보냄 (sequence: x) 서버가 SYN(x)을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보냄 (sequence: y, ACK: x + 1) 클라이언트는 서버로부터 ACK(x + 1)와 SYN(y) 패킷을 받고, ACK(y + 1)를 서버로 보낸다. 이렇게 3번의 통신이 완료되면 연결이 성립된다. (..

[네트워크] - TCP (흐름제어/혼잡제어)

참고글: github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Network/TCP.md WooVictory/Ready-For-Tech-Interview 💻 신입 개발자로서 준비를 하기 위해 지식을 정리하는 공간 👨‍💻. Contribute to WooVictory/Ready-For-Tech-Interview development by creating an account on GitHub. github.com 참고글2: github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/TCP%20(%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4%E..

[네트워크] - OSI 7 계층

참조글 : github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Network/OSI%207%20%EA%B3%84%EC%B8%B5.md WooVictory/Ready-For-Tech-Interview 💻 신입 개발자로서 준비를 하기 위해 지식을 정리하는 공간 👨‍💻. Contribute to WooVictory/Ready-For-Tech-Interview development by creating an account on GitHub. github.com github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/OSI%207%20%EA%B3%84%EC%B8..

Computer Science/네트워크

[네트워크] - Cookie & Session

728x90

Cookie & Session 

HTTP는 비상태성(Stateless) 프로토콜로 상태 정보를 유지하지 않는다. 연결을 유지하지 않기 때문에 리소스 낭비가 줄어드는 것은 큰 장점이지만 통신할 때마다 매번 연결 설정을 해야 하며, 이전 요청과 현재 요청이 같은 사용자의 요청인지 알 수 없다는 단점이 존재한다. 

쿠키와 세션을 통해서 HTTP의 Stateless한 문제점을 해결할 수 있다. 

저장위치 

  • 쿠키: 클라이언트의 웹 브라우저가 지정하는 메모리 or 하드 디스크 
  • 세션: 서버의 메모리 

만료 시점 

  • 쿠키: 저장할 때, expires 속성을 정의하여 무효화시키면 삭제될 날짜를 지정할 수 있다. 
  • 세션: 클라이언트가 로그아웃하거나 설정 시간 동안 반응이 없으면 무효화되기 때문에 정확한 시점을 알 수 없다. 

리소스 

  • 쿠키: 클라이언트에 저장되고 클라이언트의 메모리를 사용하기 때문에 서버 자원을 사용하지 않는다. 
  • 세션: 서버에 저장되고, 서버 메모리로 로딩되기 때문에 세션이 생길 때마다 리소스를 차지한다. 

용량 제한 

  • 쿠키: 클라이언트도 모르게 접속되는 사이트에 의하여 설정될 수 있기 때문에 쿠키로 인해 문제가 발생하는 걸 막고자 한 도메인당 20개, 하나의 쿠키당 4KB로 제한해두었다. 
  • 세션: 클라이언트가 접속하면 서버에 의해 생성되므로 개수나 용량 제한이 없다. 

보안

  • 쿠키: 클라이언트에 저장하기 때문에 보안에 취약하다. 
  • 세션: 서버에 저장하기 때문에 쿠키에 비해서는 보안에 우수하다. 

참조: github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Network/Cookie_Session.md

 

WooVictory/Ready-For-Tech-Interview

💻 신입 개발자로서 준비를 하기 위해 지식을 정리하는 공간 👨‍💻. Contribute to WooVictory/Ready-For-Tech-Interview development by creating an account on GitHub.

github.com

 

728x90
Computer Science/네트워크

[네트워크] - HTTP, HTTPS

728x90

HTTP (HyperText Transfer Protocol)

  • 웹 서버와 클라이언트 간의 문서를 교환하기 위한 통신 규약 
  • 웹에서만 사용하는 프로토콜로 TCP/IP 기반으로 서버와 클라이언트 간의 요청과 응답을 전송한다. 

HTTP의 특징

  • TCP 기반의 통신 방식 
  • 비연결 지향 
    • 브라우저를 통해 사용자의 요청으로 서버와 접속하여 요청에 대한 응답의 데이터를 전송 후, 연결을 종료한다.
    • 간단하기 때문에 자원이 적게드는 장점이 있다.
    • 하지만, 연결이 지속적이지 않기 때문에 사용자와 연결 종료후 추가적인 요청시 어떤 사용자의 요청인지 모른다는 점이 존재한다.
    • 즉, 여러 사용자가 요청할 시 각각의 사용자 요청을 구분할 수 없어서 제대로 된 응답 데이터를 전송할 수 없다는 단점이 있다.
    • 해결 방법으로는 쿠키, 세션, 히든 폼 필드 등이 있다. 
  • 단방향성
    • 사용자의 요청 한개에 대한 한 개의 응답을 하는 방식이기 때문에 서버가 먼저 응답하지 않는다. 

HTTP의 문제점 

  • HTTP는 평문 통신이기 때문에 도청이 가능하다. 
  • 통신 상대를 확인하지 않기 때문에 위장이 가능하다. 
  • 완전성을 증명할 수 없기 때문에 변조가 가능하다. 

이러한 문제점을 해결하기 위해 HTTPS가 등장했다. 

HTTPS

  • HTTP 통신하는 소켓 부분을 인터넷 상에서 정보를 암호화하는 SSL(Security Socket Layer)라는 프로토콜로 대체한 것이다. 
  • HTTP는 TCP와 통신했지만, HTTPS에서 HTTP는 SSL과 통신하고 SSL이 TCP와 통신하게 된다. 
  • 즉, 하나의 레이어를 더 둔 것이다. 
  • HTTP의 SSL에서는 대칭키 암호화 방식과 공개키 암호화 방식을 모두 사용한다. 

SSL

SSL 프로토콜은 Netscape 사에서 웹 서버와 웹 브라우저 사이의 보완을 위해 만들어졌다. CA(Certification Authority)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다. 

애플리케이션 서버를 운영하는 기업은 CA를 통해 인증서를 만든다. 

  1. 애플리케이션 서버를 운영하는 기업은 HTTPS 적용을 위해 공개키와 개인키를 만든다. 
  2. 신뢰할 수 있는 CA 기업을 선택하고 인증서 생성을 요청한다. 
  3. CA는 서버의 공개키, 암호화 방법 등의 정보를 담은 인증서를 만들고 해당 CA의 개인키로 암호화하여 서버에 제공한다. 
  4. 클라이언트가 SSL로 암호화된 페이지(https://)를 요청시 서버는 인증서를 전송한다. 

클라이언트와 서버의 통신 흐름 과정 

  1. 클라이언트가 SSL로 암호화된 페이지를 요청한다. 
  2. 서버는 클라이언트에게 인증서를 전송한다. 
  3. 클라이언트는 인증서가 신용이 있는 CA로부터 서명된 것인지 판단한다. 브라우저는 CA 리스트와 해당 CA의 공개키를 가지고 있다. 공개키를 활용하여 인증서가 복호화가 가능하다면 접속한 사이트가 CA에 의해 검토되었다는 것을 의미한다. 따라서 서버가 신용이 있다고 판단한다. 공개키가 데이터를 제공한 사람의 신원을 보장해주는 것으로 이러한 것을 전자 서명이라고 한다. 
  4. 클라이언트는 CA의 공개키를 이용해 인증서를 복호화하고, 서버의 공개키를 획득한다. 
  5. 클라이언트는 서버의 공개키를 사용해 랜덤 대칭 암호화키, 데이터 등을 암호화하여 서버로 전송한다. 
  6. 서버는 자신의 개인키를 이용해 복호화하고 랜덤 대칭 암호화키, 데이터 등을 획득한다. 
  7. 서버는 랜덤 대칭 암호화키로 클라이언트 요청에 대한 응답을 암호화하여 전송한다. 
  8. 클라이언트는 랜덤 대칭 암호화키를 이용해 복호화하고 데이터를 이용한다. 

인증서에 포함된 내용

  • 서버측 공개키 (public key)
  • 공개키 암호화 방법 
  • 인증서를 사용한 웹서버의 URL
  • 인증서를 발행한 기관 이름 

모든 웹페이지에서 HTTPS를 사용하지 않는다. 이유는 평문 통신에 비해서 암호화 통신은 CPU나 메모리 등 리소스를 많이 필요로 하기 때문이다. 통신할 때마다 암호화를 하면 리소스를 소비하기 때문에 서버 한 대당 처리할 수 있는 Request 수가 줄어들게 된다. 

따라서 민감한 정보를 다룰 때만 HTTPS에 의한 암호화 통신을 사용해야 한다. 또한, HTTPS도 무조건 안전한 것은 아니다. (신뢰받는 CA 기업이 아닌 자체 인증서를 발급한 경우 etc..) 이때는 HTTPS지만 브라우저에서 주의 요함안전하지 않은 사이트와 같은 알림으로 주의 받게 된다. 

728x90
Computer Science/네트워크

[네트워크] - 주소창에 naver.com을 치면 일어나는 일

728x90

주소창에 naver.com을 치면 일어나는 일 

면접 질문에 자주 나오는 질문이다. 올해 어디 공채에서도 이 문제가 나왔는데, 답을 못했던 문제이다. 이번 기회에 정리해보자! 

IP 주소 

  • IP 주소란 많은 컴퓨터들이 인터넷 상에서 서로를 인식하기 위해 지정받은 식별용 번호라고 생각하면 된다. 
  • 현재는 IPv4 버전(32 비트)로 구성되어 있으며, 127.0.1 같은 주소를 말한다. 
  • 시간이 갈수록 IPv4 주소의 부족으로 IPv6가 생겼는데, 128비트로 구성되어 있기 때문에 IP주소가 부족하지 않다는 특징이 있다. 

도메인 네임(Domain Name)

  • IP 주소는 12자리의 숫자로 되어 있기 때문에 사람이 외우기 힘들다는 단점이 있다. 
  • 그렇기 때문에 12자리의 IP 주소를 문자로 표현한 주소를 도메인 네임이라고 한다. 
  • 다시 말해서, 도메인 네임은 'naver.com'처럼 몇 개의 의미있는 문자들과 '.'의 조합으로 구성된다. 
  • 도메인 네임은 사람의 편의성을 위해 만든 주소이므로 실제로는 컴퓨터가 이해할 수 있는 IP 주소로 변환하는 작업이 필요하다. 
  • 이때, 사용할 수 있도록 미리 도메인 네임과 함께 해당하는 IP 주소값을 한 쌍으로 저장하고 있는 데이터베이스를 DNS(Domain Name System) 이라고 부른다. 
  • 도메인 네임으로 입력하면 DNS를 이용해 컴퓨터는 IP 주소를 받아 찾아갈 수 있다. 

작동 방식

  1. 사용자가 브라우저에 도메인 네임(www.naver.com)을 입력한다. 
  2. 사용자가 입력한 URL 주소 중에서 도메인 네임(Domain Name) 부분을 DNS 서버에서 검색하고, DNS 서버에서 해당 도메인 네임에 해당하는 IP 주소를 찾아 사용자가 입력한 URL 정보와 함께 전달한다. 
  3. 페이지 URL 정보와 전달받은 IP 주소는 HTTP 프로토콜을 사용하여 HTTP 요청 메시지를 생성하고, 이렇게 생성된 HTTP 요청 메시지는 TCP 프로토콜을 사용하여 인터넷을 거쳐 해당 IP 주소의 컴퓨터로 전송된다. 
  4. 이렇게 도착한 HTTP 요청 메시지는 HTTP 프로토콜을 사용하여 웹 페이지 URL 정보로 변환되어 웹 페이지 URL 정보에 해당하는 데이터를 검색한다. 
  5. 검색된 웹 페이지 데이터는 또 다시 HTTP 프로토콜을 사용하여 HTTP 응답 메시지를 생성하고 TCP 프로토콜을 사용하여 인터넷을 거쳐 원래 컴퓨터로 전송된다. 
  6. 도착한 HTTP 응답 메시지는 HTTP 프로토콜을 사용하여 웹 페이지 데이터로 변환되어 웹 브라우저에 의해 출력되어 사용자가 볼 수 있게 된다. 

DHCP & ARP 

대부분의 가정집에서는 DHCP로 인터넷 접속을 하고 있다. DHCP는 Dynamic Host Configuration Protocol의 약자로, 호스트의 IP 주소 및 TCP / IP 설정을 클라이언트에 자동으로 제공하는 프로토콜이다. 사용자의 PC는 DHCP 서버에서 사용자 자신의 IP 주소, 가장 가까운 라우터의 IP 주소, 가장 가까운 DNS 서버의 IP 주소를 받는다. 이후, ARP 프로토콜을 이용하여 IP 주소를 기반으로 가장 가까운 라우터의 MAC 주소를 알아낸다. 

DHCP 서버의 동작 개념도 - 클라이언트가 인터넷 접속을 시도하면 IP와 기본 정보를 제공해준다

IP 정보 수신
위의 과정을 통해 외부와 통신할 준비를 마쳤으므로, DNS Query를 DNS 서버에 전송한다. DNS 서버는 이에 대한 결과로 웹 서버의 IP 주소를 사용자 PC에 돌려준다. DNS 서버가 도메인에 대한 IP 주소를 송신하는 과정은 약간 복잡하다.

사용자의 PC는 가장 먼저 지정된 DNS 서버(우리나라의 경우, 통신사별로 지정된 DNS 서버가 있다)에 DNS Query를 송신한다. 그 후 지정된 DNS 서버는 Root 네임서버www.naver.com을 질의하고, Root 네임서버는 .com 네임서버의 ip 주소를 알려준다. 

그 후, .com 네임 서버www.naver.com을 질의하면 naver.com 네임서버의 ip 주소를 받고 그곳에 질의를 또 송신하면 www.naver.com의 IP 주소를 수신하게 된다. 

이와 같이 여러번 왔다갔다 하는 이유는, 도메인의 계층화 구조에 따라 DNS 서버도 계층화 되어있기 때문이다. 이렇게 계층화되어 있으므로 도메인의 가장 최상단, 즉 가장 뒷쪽(ex .com, .kr)을 담당하는 DNS 서버는 전세계에 13개 뿐이다. 

웹 서버 접속 

이제 웹 서버의 IP 주소까지 알았다. Http Request를 위해 TCP Socket을 개방하고 연결한다. 이 과정에서 3-way hand shaking 과정이 일어난다. TCP 연결에 성공하면, Http Reqeust가 TCP Socket을 통해 보내진다. 이에 대한 응답으로 웹 페이지의 정보가 사용자의 PC로 들어온다. 

 

728x90
Computer Science/네트워크

[네트워크] - TCP (3 way handshake & 4 way handshake)

728x90

TCP의 3 way handshake와 4 way handshake

3 way handshake와 4 way handshake는 연결을 성립하고 해제하는 과정을 말한다.

3 way handshake - 연결 성립

TCP는 정확한 전송을 보장해야 한다. 따라서 통신하기에 앞서, 논리적인 접속을 성립하기 위해 3 way handshake 과정을 진행한다.

  1. 클라이언트가 서버에게 SYN 패킷을 보냄 (sequence: x)
  2. 서버가 SYN(x)을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보냄 (sequence: y, ACK: x + 1)
  3. 클라이언트는 서버로부터 ACK(x + 1)와 SYN(y) 패킷을 받고, ACK(y + 1)를 서버로 보낸다.

이렇게 3번의 통신이 완료되면 연결이 성립된다. (3번이라 3 way handshake 이다)

4 way handshake - 연결 해제

연결 성립 후, 모든 통신이 끝났다면 해제해야 한다.

  1. 클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보낸다.
  2. 서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보낸다. (이때 모든 데이터를 보내기 위해 TIME OUT 상태가 된다)
  3. 데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보낸다.
  4. 클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보낸다. (아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT를 통해서 기다린다)
    * 서버는 ACK를 받은 이후 소켓을 닫는다 (Closed)
    * TIME_WAIT 시간이 끝나면 클라이언트도 닫는다(Closed)

이렇게 4번의 통신이 완료되면 연결이 해제된다.

용어 정리

  • 'SYN'은'synchronize sequence numbers의 약자
  • 'ACK는'acknowledgment'의 약자

참고자료: github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/TCP%203%20way%20handshake%20%26%204%20way%20handshake.md

[

gyoogle/tech-interview-for-developer

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com

](https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/TCP%203%20way%20handshake%20%26%204%20way%20handshake.md)

728x90
Computer Science/네트워크

[네트워크] - TCP (흐름제어/혼잡제어)

728x90

참고글: github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Network/TCP.md

 

WooVictory/Ready-For-Tech-Interview

💻 신입 개발자로서 준비를 하기 위해 지식을 정리하는 공간 👨‍💻. Contribute to WooVictory/Ready-For-Tech-Interview development by creating an account on GitHub.

github.com

참고글2: github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/TCP%20(%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4%ED%98%BC%EC%9E%A1%EC%A0%9C%EC%96%B4).md

 

gyoogle/tech-interview-for-developer

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com

TCP 

  • 일반적으로 TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리한다. 
  • 신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜이다.
  • 사전에 3-way handshake라는 과정을 통해 연결을 설정하고 통신을 시작한다. 
  • 4-way handshake 과정을 통해 연결을 해제(가상 회선 방식)한다. 
  • 흐름 제어, 혼잡 제어, 오류 제어를 통해 신뢰성을 보장한다. 그러나 이 때문에 UDP보다 전송 속도가 느리다는 단점이 있다. 
  • 데이터의 전송 순서를 보장하며 수신 여부를 확인할 수 있다. 
  • TCP를 사용하는 예로는 대부분의 웹 HTTP 통신, 이메일, 파일 전송에 사용된다. 
  • TCP가 가상회선 방식을 제공한다는 것은 송수신측과 수신측을 연결하여 패킷을 전송하기 위한 논리적 경로를 배정한다는 뜻이다. 

패킷(Packet)이란? 

인터넷 내에서 데이터를 보내기 위한 경로 배정(라우팅)을 효율적으로 하기 위해서 데이터를 여러 개의 조각으로 나누어 전송을 하는데, 이때 조각을 패킷이라고 한다. 

TCP는 패킷을 어떻게 추적 및 관리하는가? 

데이터는 패킷 단위로 나누어 같은 목적지(IP 계층)으로 전송된다. 

Ex) 한 줄로 서야하는 A,B,C라는 사람(패킷)이 서울(송신측)에서 출발하여 부산(수신측)으로 가야한다고 가정할 때, 
A, B, C가 순차적으로 가는 상황에서 B가 길을 잘못 들어서 분실되는 상황이 발생했다. 
하지만 목적지에서는 A,B,C가 모두 필요한지 모르고 A,C만 보고 다 왔다고 착각할 수 있다. 그렇기 때문에 A,B,C라는 패킷에 1,2,3이라는 번호를 부여하여 패킷의 분실 확인 처리를 하기 위해 목적지에서 패킷을 재조립한다. 

이런 방식으로 TCP 패킷을 추적하며, 나누어 보내진 데이터를 목적지에서 받고 재조립할 수 있게 된다. 

흐름 제어 

  • 송신측과 수신측 사이의 데이터 처리 속도 차이(흐름)을 해결하기 위한 기법
  • 만약, 송신측의 전송량 > 수신측의 수신량 일 경우 전송된 패킷은 수신측의 큐를 넘어서 손실될 수 있기 때문에 송신측의 패킷 전송량을 제어하게 된다. 

(1). Stop and Wait (정지 - 대기) 

  • 매번 전송한 패킷에 대한 확인 응답을 받아야 그 다음 패킷을 전송할 수 있다. 
  • 이런한 구조 때문에 비효율적이다. (단점) 
  • Give & Take 

(2). Sliding Window(슬라이딩 윈도우) 

  • (송신측 = 전송측) 
  • 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 기법이다. 
  • 윈도우 : 송신, 수신 스테이션 양쪽에서 만들어진 버퍼의 크기 
  • Stop and Wait의 비효율성을 개선한 기법 
  • 송신측에서는 Ack 프레임을 수신하지 않더라도 여러 개의 프레임을 연속적으로 전송할 수 있다
  • 송신측에서 0,1,2,3,4,5,6을 보낼 수 있는 프레임을 가지고 있고 데이터 0,1을 전송했다고 가정하면 슬라이딩 윈도우 구조는 2,3,4,5,6처럼 변하게 된다. 
  • 이때, 만약 수신측으로부터 ACK라는 프레임을 받게 된다면 송신측은 이전에 보낸 데이터 0,1을 수신측에서 정상적으로 받았음을 알게 되고 송신측의 슬라이딩 윈도우는 ACK 프레임에 따른 프레임의 수만큼 오른쪽으로 경계가 확장된다. 

오류 제어 

  • 오류 검출과 재전송을 포함한다
  • ARQ(Automatic Repeat Request) 기법을 사용해 프레임이 손상되었거나 손실되었을 경우, 재전송을 통해 오류를 복구한다. 
  • ARQ 기법은 흐름 제어 기법과 연관되어 있다. 

(1). Stop and Wait ARQ 

  • 송신측에서 1개의 프레임을 송신하고, 수신측에서 수신된 프레임의 에러 유무 판단에 따라 ACK or NAK(Negative Acknowledgement)를 보내는 방식이다
  • 식별을 위해 데이터 프레임과 ACK 프레임은 각각 0,1 번호를 번갈아가며 부여한다. 
  • 수신측이 데이터를 받지 못했을 경우, NAK를 보내고 NAK를 받은 송신측은 데이터를 재전송한다. 
  • 만약, 데이터나 ACK가 분실되었을 경우 일정 간격의 시간을 두고 타임아웃이 되면, 송신측은 데이터를 재전송한다. 

 

(2). Go-Back-n ARQ(슬라이딩 윈도우) 

  • 전송된 프레임이 손상되거나 분실된 경우 그리고 ACK 패킷의 손실로 인한 TIME_OUT이 발생된 경우, 확인된 마지막 프레임 이후로 모든 프레임을 재전송한다. 
  • 슬라이딩 윈도우는 연속적인 프레임 전송 기법으로 전송측은 전송된 프레임의 복사본을 가지고 있어야 하며, ACK와 NAK 모두 각각 구별해야 한다. 
  • ACK : 다음 프레임을 전송 
  • NAK : 손상된 프레임 자체 번호를 반환

[재전송 되는 경우] 

(1). NAK 프레임을 받았을 경우

만약, 수신측으로 0 ~ 5까지의 데이터를 보냈다고 가정했을 때, 수신측에서 데이터를 받았음을 확인하는 ACK 프레임을 중간 중간 보내게 되며, ACK 프레임을 확인한 전송측은 계속해서 데이터를 전송한다. 그러나 만약 수신측에서 데이터 오류 프레임 2를 발견하고 NAK2를 전송측에 보낸다고 해보자. 

NAK2를 받은 전송측은 데이터 프레임 2가 잘못되었다는 것을 알고 데이터를 재전송한다. GBn ARQ의 특징은 데이터를 재전송하는 부분이다. NAK(n)를 받아 n 데이터를 재전송한다. 

(2). 전송 데이터 프레임의 분실 

GBn ARQ의 특징은 확인된 데이터 이후의 모든 데이터 프레임 재전송과 수신측의 폐기이다.
수신측에서 데이터 1을 받고 다음 데이터로 3을 받게 된다면 데이터 2를 받지 못했으므로 수신측에서는 데이터 3을 폐기하고 데이터 2를 받지 못했다는 NAK2를 전송측에 보낸다. NAK를 받은 전송측은 (1) 경우와 같이 NAK(n) 데이터로부터 모든 데이터를 재전송하며 수신측은 기존에 받았던 데이터 중 NAK(n)으로 보냈던 대상 데이터 이후의 모든 데이터를 폐기하고 재전송 받는다. 

(3). 지정된 타임 아웃 내의 ACK 프레임 분실(Lost ACK) 

  • 전송측은 분실된 ACK를 다루기 위해 타이머를 가지고 있다
  • 전송측에서는 이 타이머의 타임 아웃 동안 수신측으로부터 ACK 데이터를 받지 못했을 경우, 마지막 ACK된 데이터부터 재전송한다 

  • 전송측은 NAK 프레임을 받았을 경우, NAK 프레임 번호부터 데이터를 재전송한다 
  • 수신측은 원하는 프레임이 아닐 경우, 데이터를 모두 폐기 처분한다 
  • 타이아웃(ACK 분실)의 경우, 마지막 ACK된 데이터부터 재전송한다

3. SR(Selective-Reject) ARQ

  • GBn ARQ의 확인된 마지막 프레임 이후의 모든 프레임을 재전송하는 단점을 보완하는 기법이다
  • SR ARQ는 손상된, 손실된 프레임만 재전송한다 
  • 그렇기 때문에 별도의 데이터 재정렬을 수행하야 하며, 별도의 버퍼를 필요로 한다
  • 수신측에 버퍼를 두어 받은 데이터의 정렬이 필요하다 

혼잡 제어 

  • 송신측의 데이터 전달과 네트워크의 데이터 처리 속도를 해결하기 위한 기법이다
  • 한 라우터에게 데이터가 몰려 모든 데이터를 처리할 수 없는 경우, 호스트들은 재전송을 하게 되고 결국 혼잡만 가중시켜 오버플로우나 데이터 손실이 발생한다 
  • 이러한 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송 속도를 제어하는 것이 혼잡 제어의 개념이다. 

(1). AIMD (Addtive Increase Multicative Decrease) 

  • 합 증가 / 곱 감소 알고리즘이라고 한다 
  • 처음에 패킷 하나를 보내는 것으로 시작하여 전송한 패킷이 문제 없이 도착한다면 Window Size를 1씩 증가시키며 전송하는 방법이다. 만약, 패킷 전송을 실패하거나 TIME_OUT이 발생하면 Window Size를 절반으로 감소시킨다. 
  • 이 방식은 공평하다. *여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만, 시간이 흐르면 평형 상태로 수렴하게 되는 특징이 있다*
  • 문제점은 초기 네트워크의 높은 대역폭을 사용하지 못하고 네트워크가 혼잡해지는 상황을 미리 감지하지 못하여 혼잡해지고 나서야 대역폭을 줄이는 방식이다. 

(2). Slow Start 

  • AIMD가 네트워크의 수용량 주변에서는 효율적으로 동작하지만, 처음에 전송 속도를 올리는 데 시간이 너무 길다는 단점이 있다
  • Slow Start는 AIMD와 마찬가지로 패킷을 하나씩 보내는 것부터 시작한다. 이 방식은 패킷이 문제 없이 도착하여 ACK 패킷마다 Window Size를 1씩 늘린다. 즉, 한 주기가 지나면 Window Size는 2배가 된다 
  • 따라서 그래프의 모양은 지수 함수 꼴이 된다 
  • 혼잡 현상이 발생하면 Window Size를 1로 떨어뜨린다 
  • 처음에는 네트워크의 수용량을 예측할 수 있는 정보가 없지만 한번 혼잡 현상이 발생하고 나면 네트워크 수용량을 어느정도 예상할 수 있으므로 혼잡 현상이 발생하였던 Window Size의 절반까지는 이전처럼 지수 함수 꼴로 Window Size를 증가시키고 그 이후부터는 완만하게 1씩 증가시키는 방식이다 

  • 미리 정해진 임계값(threshold)에 도달할 때까지 윈도우의 크기를 2배씩 증가시킨다. 
  • Slow Start라는 이름을 사용하지만, 매 전송마다 2배씩 증가하기 때문에 전송되어지는 데이터의 크기는 지수함수적으로 증가한다 
  • 전송되는 데이터의 크기가 임계 값에 도달하면 혼잡 회피 단계로 넘어간다 

[혼잡 회피(Congestion Avoidance)] 

  • 윈도우의 크기가 임계 값에 도달한 이후에는 데이터의 손실이 발생할 확률이 높다 
  • 따라서 이를 회피하기 위해 윈도우 크기를 선형적으로 1씩 증가시키는 방법이다. 
  • 수신측으로부터 일정 시간 동안까지 ACK를 수신하지 못하는 경우
    * 타임 아웃의 발생 : 네트워크 혼잡이 발생했다고 인식 
    * 혼잡 상태로 인식된 경우 
      --> 윈도우의 크기 세그먼트의 수를 1로 감소시킨다. 
      --> 동시에 임계값을 패킷 손실이 발생했을 때의 윈도우 크기의 절반으로 줄인다 

[빠른 회복(Fast Recovery)]

  • 혼잡한 상태가 되면 Window Size를 1로 줄이지 않고 절반으로 줄이고 선형 증가시키는 방법이다
  • 빠른 회복 정책까지 적용하면 혼잡 상황을 한번 겪고 나서부터는 순수한 AIMD 방식으로 동작하게 된다 

[빠른 재전송(Fast Retransmit)]

  • 수신측에서 패킷을 받을 때 먼저 도착해야 할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보낸다. 단, 순서대로 잘 도착한 마지막 패킷의 다음 패킷의 순번을 ACK 패킷에 실어서 보낸다. 따라서 중간에 패킷 하나가 손실되면 송신측에서는 순번이 중복된 ACK 패킷을 받게 된다. 이것을 감지하면 문제가 되는 순번의 패킷을 재전송할 수 있다. 
  • 빠른 재전송은 중복된 순번의 패킷을 3개(3 ACK) 받으면 재전송한다. 그리고 이러한 현상이 일어나는 것은 약간의 혼잡이 발생한 것으로 간주하여 Window Size를 절반으로 줄인다. 

 

728x90
Computer Science/네트워크

[네트워크] - OSI 7 계층

728x90

참조글 : github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Network/OSI%207%20%EA%B3%84%EC%B8%B5.md

 

WooVictory/Ready-For-Tech-Interview

💻 신입 개발자로서 준비를 하기 위해 지식을 정리하는 공간 👨‍💻. Contribute to WooVictory/Ready-For-Tech-Interview development by creating an account on GitHub.

github.com

github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/OSI%207%20%EA%B3%84%EC%B8%B5.md

 

gyoogle/tech-interview-for-developer

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com

OSI 7 계층을 나누는 이유는 무엇인가? 

통신이 일어나는 과정은 단계별로 알 수 있고, 특정한 구간에서 이상이 생기면 그 단계만 수정할 수 있기 때문이다. 

1 ) 물리 (Physical) 

| 리피터, 케이블, 허브 etc..
주로 전기적, 기계적, 기능적인 특성을 이용해서 통신 케이블로 데이터를 전송하는 역할만 진행한다. 

2 ) 데이터 링크(Data Link)

| 브릿지, 스위치 etc.. 
물리 계층으로 송수신되는 정보를 관리하여 안전하게 전달되도록 도와주는 역할 
Mac 주소를 통해 통신한다. Frame에 Mac 주소를 부여하고 에러검출, 재전송, 흐름제어를 진행한다. 

3 ) 네트워크 (Network) 

| 라우터, IP 
데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능을 담당한다. 
라우터를 통해 이동할 경로를 선택하여 IP 주소를 지정하고, 해당 경로에 따라 패킷을 전달해준다. 
라우팅, 흐름 제어, 오류 제어, 세그먼테이션 등을 수행한다. 

4 ) 전송 (Transport) 

| TCP, UDP 
TCP와 UDP 프로토콜을 통해 통신을 활성화한다. 포트를 열어두고, 프로그램들이 전송을 할 수 있도록 제공해준다. 

  • TCP : 신뢰성, 연결지향성 
  • UDP : 비신뢰성, 비연결성, 실시간 

5 ) 세션 (Session) 

| API, Socket 
데이터가 통신하기 위한 논리적 연결을 담당한다. TCP/IP 세션을 만들고 없애는 책임을 지니고 있다. 

6 ) 표현 (Presentation)

| JPEG, MPEG etc.. 
데이터 표현에 대한 독립성을 제공하고 암호화하는 역할을 담당한다. 
파일 인코딩, 명령어를 포장, 압축, 암호화한다. 

7 ) 응용 (Application) 

| HTTP, FTP, DNS etc.. 
최종 목적지로, 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다. 
사용자 인터페이스, 전자우편, 데이터베이스 관리 등의 서비스를 제공한다. 

 

728x90