Version 2.0.0 (23.04.23)
왜 패킷을 잘라서 보낼까?
많은 데이터를 한번에 보내게 되면, 데이터 손실의 가능성이 있으며, 대역폭을 너무 많이 차지하게 되므로, 패킷의 흐름을 원활히 조절하기 위함
소켓, 포트, 패킷
TCP와 UDP는 모두 Transport 계층의 프로토콜이다. 공통적으로 가진 특징은 다음과 같다.
1. 트랜스포트 다중화/역다중화 기능
2. 무결성 검사
UDP는 속도 증가와 지연 감소를 위해서 많이 사용되고, TCP는 신뢰성이 중요한 경우에 사용된다.
예로들어, UDP는 동영상 전송과 같이, 몇 프레임 전도 손실되어도 괜찮은 데이터 전송에
TCP는 몇몇의 정보도 손실되어서는 안되는 애플리케이션에 이용된다.
handshake란, 호스트 간 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정
3-way handshake : TCP의 연결을 초기화 할 때 사용한다. 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장
1. 접속 요청 프로세스가 연결 요청 메세지를 전송한다. (SYN)
2. 접속 요청을 받은 프로세스가 요청을 수락한다는 확인 메세지를 보낸다. (ACK) 동시에 접속 요청을 받은 프로세스도 접속 요청을 한 프로세스에 연결 요청을 보낸다. (SYN) -> (SYN+ACK)
3. 마지막으로 접속 요청 프로세스가 수락 확인을 보내 연결을 맺는다. (ACK)
2-way가 아닌 3-way인 이유 : SYN에 대한 ACK를 보내기 위해
4-way handshake : 세션을 종료하기 위해 수행되는 절차
1. 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송
2. 서버는 일단 확인메세지를 보내고 자신의 통신이 끝날 때까지 기다림, 이 상태가 TIME_WAIT
상태이다.
3. 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 플래그를 전송
4. 클라이언트는 확인했다는 메세지를 보낸다. (ACK)
TIME_WAIT
상태로 대기하는 이유는, 세션 종료 후, 혹시나 네트워크에 아직 라이브 패킷이 존재할 수 있기에
연결 설정 과정과 다르게, 연결 종료 과정에서 고려해야하는 경우가 존재하는데, 이는 전송중인 데이터에 대한 경우이다. 클라이언트는 아직 서버로부터 못 받은 데이터가 있을 것을 대비하여 일정시간동안 세션을 남긴다(TIME_WAIT). 모든 데이터를 다 보내서 더 이상 보낼 데이터가 없다는 의미의(FIN)을 받으면, 바로 연결을 종료한다.
HTTP : 서버/클라이언트 모델을 따라 데이터를 주고받기 위한 프로토콜이다. 즉, HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약, 80번 포트를 사용하고 있다.
HTTPS : HTTP에 데이터 암호화가 추가된 프로토콜. 443번 포트를 사용하며, 공개키 암호화를 지원하고 있다.
교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제
GET
클라이언트에서 서버로 정보를 요청하기 위해 사용되는 메서드이다.
?
를 붙이고 그 다음 변수명1=값1&변수명2=값2...
형식으로 사용할 수 있다.POST
POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용되는 메서드이다.
POST는 전송할 데이터를 HTTP 메세지 body 부분에 담아서 서버로 보낸다.
POST로 데이터를 전송할 때 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나 GET처럼 데이터가 외부적으로 들어나지 않아 보안이 필요한 부분에 많이 사용된다.
POST를 통한 데이터 전송은 보통 HTML form을 통해 서버로 전송된다.
GET과 POST의 차이점
쿠키
쿠키는 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일
사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지
세션
세션은 쿠키 기반이지만 사용자 정보 파일을 서버 측에서 관리한다.
웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증 상태를 유지한다.
쿠키와 세션의 차이점
세션은 서버의 자원을 사용하기에 서버의 메모리에 과부화를 주거나 속도가 느려질 수 있기에 쿠키와 함께 사용
모든 네트워크 통신에는 고유의 주소, 즉 IP 주소가 필요하다. 이 때 통신을 주고받는 주체가 되는 네트워크에 연결되어 있는 모든 장치들을 host라고 한다. IP는 사람이 이해하고 기억하기 어렵기에 이를 위해서 각 IP에 부여한 이름이 도메인이다.
DNS(Domain Name Server or Service)는 숫자로 이루어진 IP 주소와 일정한 형식을 가진 도메인을 서로 매핑 시키고 정보를 가지고 있다.
REST
란 Representation State Transfer의 약자로, URI로 자원(데이터베이스)을 명시하고 HTTP 메서드를 통해 해당 자원에 대한 CRUD(Create, Read, Update, Delete) 연산을 적용하는 것
RESTful
은 REST 아키텍처로 구현된 웹 서비스를 나타내기 위한 용어로, "REST API를 제공하는 웹 서비스는 RESTful하다"처럼 사용된다.
소켓이란 ...
ㅁㄴㅇㄹ
MAC 주소
는 Data Link Layer에서 통신을 위해 네트워크 인터페이스에 할당한 식별자를 말한다. 즉, 모든 네트워크 장비는 자신의 MAC 주소가 있으며 주소는 장비 제조업체가 할당한다. MAC 주소는 물리적 주소라고 불리기도 한다.
라우터
는 Network Layer 3계층 장비로 네트워크 사이를 연결하는 장치이다. 최종 도착지의 네트워크에 도착할 수 있도록 적절한 경로를 설정하여 패킷을 전송한다.
스위치
는 Data Link Layer 2계층 장비로 네트워크 내에서 패킷을 전송하는 장치를 말한다. 스위치로 요청이 들어오면 IP 주소에 대응되는 MAC 주소를 찾아 해당 MAC 주소로 패킷을 전송한다. 만약 대응되는 MAC 주소가 없다면 허브처럼 브로드캐스트 방식으로 패킷을 전송하고 IP 주소와 MAC 주소를 대응시킨 테이블을 갱신한다.
허브
는 Physical Layer 1계층 장비로 여러 기기를 연결하여 네트워크를 만들어주는 장치이다. 패킷을 받으면 연결된 모든 기기에 패킷을 전송한다.
SMTP(Simple Mail Transfer Protocol)
은 인터넷에서 이메일을 보내기 위해 사용하는 TCP/IP 프로토콜을 말한다.
ㅁㄴㅇㄹ
IPv4의 경우 의 숫자로 주소를 표현하고, 이는 한정된 자원이기 때문에 효율적으로 노드에 주소를 할당하는게 중요하다. 이를 위해 IP를 쪼개는, 네트워크 파트 + 호스트 파트로 구성하는 서브네팅을 활용한다.
효율적인 주소 관리를 위해 내부적으로 호스트 파트를 새로운 네트워크 파트와 호스트 파트로 나눌 수 있다. 이 때 서브넷 마스크를 활용할 수 있다.
만약 C 클래스인 192.12.16.1 IP, 255.255.255.0 서브넷 마스크(호스트 파트)가 할당되었을 때 기존의 서브넷 마스크인 마지막 8 비트를 1111 0000 으로 바꾼다면, 4 비트만큼의 네트워크 파트 (그룹), 4 비트만큼의 호스트 (멤버) 를 할당할 수 있다. 이렇게 된다면 동일 네트워크 간에는 커뮤니케이션이 자유롭지만, 다른 네트워크 간에는 라우터를 거쳐야 커뮤니케이션을 할 수 있다.
Data encapsulation은 데이터를 보내는 송신측에서 데이터를 생성하는 방법으로, 네트워크 계층에서 상위 계층에서부터 하위 계층으로 내려올 때마다 각 계층의 헤더를 붙여 보내는 데이터로 만들어진다.
반대로 데이터를 받는 수신측에서는 데이터를 받은 후에 계층을 거슬러 올라가면서 헤더를 떼내며 데이터를 파악한다.
DHCP(Dynamic Host Configuration Protocol)은 동적으로 IP 주소나 기타 정보들을 관리해주는 프로토콜이다.
DHCP는 UDP를 사용하여 클라이언트/서버 구조로 통신한다.
1. DHCP discover
: 컴퓨터가 동일 서브넷으로 브로드캐스팅으로 DHCP 서버를 찾는다.
2. DHCP offer
: DHCP가 사용가능한 IP 주소의 리스트를 컴퓨터에게 전달한다.
3. DHCP request
: 컴퓨터가 리스트 중 하나의 IP 주소를 선택하여 서버에 전달한다
4. DHCP ack
: DHCP가 컴퓨터에게 해당 IP 주소를 허락/거절하는 메세지를 전달한다.
장점
단점
이더넷은 근거리 유선 통신을 위해 사용되는 네트워킹 방법으로 CSMA/CD 프로토콜을 사용한다.
네트워크 상에서 요청을 보내는 대상을 client
, 요청에 응답하는 대상을 server
라고 한다. client와 server는 고정되지 않고 요청에 따라 바뀐다.
위 세가지 개념은 모두 네트워크 성능과 관련되어 있다.
delay
하나의 데이터 패킷이 출발 지점에서 도착 지점에 도착한 시간을 의미한다.
timing(jitter)
delay의 변동을 의미한다. 같은 스위치가 아닌 경우 패킷마다 대기 시간이 달라지므로 지터가 생긴다.
throughput
지정된 시간동안 실제로 전송된 정보량을 의미한다.
데이터가 지나갈 수 있는 통로의 크기인 bandwith와는 다른 개념, bandwith가 크더라도 전송된 정보량이 적으면 throughput이 적은 것
NAT(Network Address Translation)은 IP 주소를 변환하는 기술이다.
IP 주소에는 프라이빗 IP 주소와 글로벌 IP 주소가 있다.
그 중 랜 내에서 사용되는 것이 프라이빗 IP 주소이며, 인터넷에서 사용되는 것이 글로벌 IP 주소이다.
여기서 프라이빗 IP 주소를 가진 컴퓨터로 인터넷 상의 글로벌 IP 주소를 가진 서버에 접속한다고 가정할 때 프라이빗 IP 상태로는 인터넷상에서 라우팅할 수 없다. 그렇기에 라우터가 프라이빗 IP를 글로벌 IP 주소로 변환해주어야만 데이터를 전송할 수 있다. 이가 NAT이다.
URL은 URI의 서브셋이다.
URI는 특정 리소스를 식별하는 통합 자원 식별자
URL은 웹 주소로 불리며, 컴퓨터 네트워크 상에서 리소스가 어디에 있는지 알려주기 위한 규약
로드밸런서는 트래픽을 받아 여러 대의 서버에 분산시키는 하드웨어 또는 소프트웨어이다.
부하 분산에는 L4 로드밸런서와 L7 로드밸런서가 사용되며,이는 L4 부터 Port를 다룰 수 있기 때문이다.
L4 로드밸런서 : IP,Port를 기준으로 스케줄링 알고리즘을 통해 부하를 분산한다.
클라이언트에서 로드밸런서(DNS)로 요청을 보냈을 때 최적의 서버로 요청을 전송하고 결과를 클라이언트에게 줍니다. 즉, 요청하는 서비스의 종류와 상관 없이 공장을 여러 개 돌리는 것입니다.
L7 로드밸런서 : L7 위에서 동작하기에 IP,Port 이외에도 URI, Payload, Http Header, Cookie 등의 내용을 기준으로 부하를 분산한다. 그래서 콘텐츠 기반 스위칭이라고도 한다.
L4 로드밸런서가 단지 부하를 분산한다면, L7 로드밸런서는 요청의 세부적인 사항을 두고 결제만 담당하는 서버, 회원가입만을 담당하는 서버 등으로 분리해서 가볍고 작은 단위로 여러 개의 서비스를 운영하고 요청을 각각의 서버에 분산할 수 있는 것입니다.
브로드캐스팅 : 송신 호스트가 전송한 데이터가 네트워크에 연결된 모든 호스트에 전송되는 방식
발췌 : ai-tech-interview