네트워크
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 단계 )
- 클라이언트 -> 서버: SYN 패킷 (random_x, ) 보냄
1+. -> 서버: SYN 패킷 받음 - 서버 -> 클라이언트: SYN + ACK 패킷 (random_y, random_x+1) 보냄
2+. -> 클라이언트: SYN, ACK 패킷 받음 - 클라이언트 -> 서버: ACK 패킷 ( , random_y+1) 보냄
- 클라이언트 -> 서버: SYN 패킷 (random_x, ) 보냄
4-way handshake: 연결 해제 ( 4 단계 )
- 클라이언트 -> 서버: FIN 플래그 보냄 (종료 요청)
1+. -> 서버: FIN 받음 - 서버 -> 클라이언트: 확인 ACK 보낸 후 남은 데이터 모두 보냄
- 서버 -> 클라이언트: 데이터 모두 보낸 후 FIN 플래그 보냄
3+. -> 클라이언트: FIN 받음 - 클라이언트 -> 서버: 확인 ACK 보냄
- 서버는 클라이언트로부터 ACK 받은 후 소켓 닫음.
- 클라이언트는 TIME_WAIT 시간이 지나면 닫음. ( FIN보다 먼저 보낸 요청이 늦게 도착한 경우 받을 때 까지 기다려야 함 )
- 클라이언트 -> 서버: 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 들어가면 안됨, 행위에 대한 동사 표현 들어가면 안됨
'CS > NETWORK' 카테고리의 다른 글
HTTP/HTTPS 암호화 과정 (0) | 2021.09.28 |
---|---|
HTTP status code (0) | 2021.09.28 |
댓글