'네트워크' 카테고리의 다른 글

TCP 프로토콜 - (흐름제어 와 혼잡제어)  (0) 2020.08.19
3&4 Way Handshake  (0) 2020.08.19
Post와 GET의 차이  (0) 2018.03.11
TCP - 흐름제어 , 혼잡제어

TCP 프로토콜 - (흐름제어 와 혼잡제어)

일단 흐름제어와 혼잡제어는 네트워크 트래픽에 관한 기술 입니다.

 

  • 흐름제어(Flow Control)

    송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법

 

  • 혼잡제어(Congestion Control)

    송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법

 

흐름제어

수신측이 송신측보다 빠른건 문제가 없지만, 송신측이 수신측보다 빠를 때, 데이터 손실이 일어날 수 있음, 그래서 송신측의 데이터 전송량을 수신측에 맞춰야합니다.

수신측에 데이터 전송량을 맞추는 2가지 방법

1.Stop and Wait 방식

말그대로 매번 패킷을 보낼 때마다, 확인을 한 후, 다음 패킷을 전송하는 방법

image

2.Sliding Window

3 Way Handshake 를 하면서 수신측이 송신측의 윈도우 크기를 정해준다

먼저 송신측에서 윈도우 크기만큼 패킷을 보낸 다, 그 후 수신측에서 응답을 하면 윈도우를 이동시킨다.

 

여기서 송신측이 window를 이동시키는 방법은 2가지가 있는데,

하나는 Go Back N 방식 과 Selective-Reject 방식이 있다

Go Back N ARQ

이 친구는 예를 들어 1 ~ 5번 패킷을 전송 했는데, 만약 2번 패킷이 손실되었다고 수신측이 말한다면 , 2번 부터 다시 쭈루루룩 보내는 것을 말한다

Selective-Reject ARQ

이 친구는 예를 들면 1 ~ 5번 패킷을 전송 했는데, 만약 2번 패킷이 손실됬다! 그러면 2번 패킷만 다시 재전송 하는 친구이다.

 

image

 

 

혼잡제어

네트워크 내의 패킷의 수가 과도하게 증가하는 현상을 혼잡(Congestion)이라 하는데 이를 방지하기 위한 것이 혼잡제어 이다. 혼잡제어 알고리즘(AIMD - Additive Increate / Multicative Decrease)에 3가지를 설명하면

  1. Slow Start - window size를 1씩 늘려준다 ===> 즉 한 주기가 끝나면 , 크기가 2배가 되며 지수함수 꼴로 증가

    만약 혼잡현상이 발생시 windows size를 1로 줄인다

  2. Fast Retransmit(빠른 재전송) - 만약 수신측에서 패킷 손실로 인해 재전송 요청을 중복패킷에 대해 3개 받으면 , 혼잡한 상황이라 생각하여 windows size를 줄인다

  3. Fast Recovery(빠른 회복) - 혼잡제어가 발생할 때, window size의 크기를 반으로 줄이며, window의 크기를 선형 증가 시킨다

image

 

 

 

 

 

 

'네트워크' 카테고리의 다른 글

SSL 동작과정  (0) 2020.08.19
3&4 Way Handshake  (0) 2020.08.19
Post와 GET의 차이  (0) 2018.03.11
3 & 4 way handshake

3 - Way Handshake & 4 - Way Handshake (TCP / UDP)

3 Way Handshake 와 4 Way Handshake는 TCP 프로토콜에서 호스트 간 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정이다

 

그럼 여기서 TCP 와 UDP가 무엇인지 간단하게 알고 가보자

TCP

  • 연결형 서비스를 지원하는 전송계층 프로토콜
  • 인터넷 환경에서 기본 사용
  • 호스트간 신뢰성 있는 데이터 전달(연결형 서비스니까 !)흐름제어혼잡제어 등을 제공하는 전송 계층 (데이터 흐름 제어)
  • 호스트 간의 연결의 설정(3 way handshake)과 해제(4 way handshake)

 

여기서 중요한 흐름제어혼잡제어를 꼭 알아야 한다! ==> 요 건 링크

 

UDP

  • 비연결형 서비스를 지원하는 전송계층 프로토콜
  • 사용자 데이터그램형 프로토콜
  • TCP와는 달리 연결의 설정과 해제(3 way handshake & 4 way handshake) 과정이 없음
  • 송신측에서 수신측이 데이터를 잘받았는지 확인하지 않고, 일방적으로 데이터를 보내기만 함

 

image

 

일단 미리 알아두어야 할 것은 클라이언트와 서버간의 서로 통신하기 위해 두 종류의 패킷(ACK , SYN)을 보낸다

일단 패킷들의 종류를 몇가지 알아보면

CWR : 송신자의 자신의 윈도우 사이즈를 줄인다.

ECE : 혼잡 감지 시 수신자가 ECE를 설정하여 송신자에게 알린다.

URG : Urgent Point 필드와 함께 사용되고 플래그 설정 시 TCP는 해당 세그먼트를 전송 큐의 제일 앞으로 보낸다.

ACK : SYN에 대한 확인의 의미이다. 3 way handshake에서의 syn과 reset을 제외하고 모든 세그먼트에 ACK가 설정

PSH : 일반적으로 모든 데이터를 전송하고 마지막에 보내는 신호로 수신측은 데이터를 즉시 전송하라는 의미

RST : 송신자가 유효하지 않은 연결을 시도할 때 거부하는데 이용되고 또한 통신의 연결 및 종료를 정상적으로 할 수 없을 때 사용

SYN : 통신 시작 시 연결을 요청하고 ISN(순서번호)을 교환

FIN : 데이터 전송을 종료

 

3 Way HandShake

흐름을 설명하자면

  1. Client는 맨 처음 close 상태이며 , Server와 연결하기 위해 SYN을 보낸다
  2. Server는 맨 처음 Listen 상태이며, SYN을 받고, 그거에 대한 ACK를 보내고 , Client도 포트를 열어 달라고 SYN을 보낸다
  3. Client가 Server의 ACK 와 SYN을 받고(여기서 클라는 established상태), SYN에 대답으로 ACK를 보낸다,
  4. Server가 마지막으로 ACK를 받으면 established로 상태가 변경되며 , tcp 연결이 완료된다

image

Closed : 닫힌 상태

LISTEN : 포트가 열린 상태로 연결 요청 대기 중

SYN_RCV : SYNC 요청을 받고 상대방의 응답을 기다리는 중

ESTABLISHED : 포트 연결 상태


 

4 Way Handshake

  1. Client가 연결을 종료하겠다는 FIN플래그를 전송한다.

  2. Server는 FIN플래그를 받은 다음 플래그에 대한 ACK를 보낸 후 TIME_WAIT 상태가 된다.

    (FIN을 받았지만 , Client가 보낸 패킷이 라우팅 지연이나 패킷 손실의 이유로 재전송을 보낼 수 있는데, 이 때 FIN패킷보다 늦게 도착할 수 있기 때문에 TIME_WAIT상태에서 일정시간 기다리는 것이다.)

  3. Time_wait상태가 끝나면 Server는 연결을 종료하겠다는 FIN플래그를 전송한다.

  4. Client는 FIN플래그에 대한 ACK플래그를 보낸 후 tcp 연결을 종료 된다

image

 

 

'네트워크' 카테고리의 다른 글

SSL 동작과정  (0) 2020.08.19
TCP 프로토콜 - (흐름제어 와 혼잡제어)  (0) 2020.08.19
Post와 GET의 차이  (0) 2018.03.11
POST와 GET의 차이.md

 

Post 와 GET의 차이

짧게 한 문장으로 표현하자면 , Get은 정보를 가져오는 것, POST는 수행하는 것이다

GET방식은 URL 형식으로 웹서버 측 데이터를 요청합니다.

  • URL에 이어붙이기 때문에 길이제한이 있음

  • DB를 수정하지 않고 저장된 Data를 단순 요청하는 정도로 사용 (DB의 SELECT와 같은 역할)

     

POST방식은 HTTP body안에 form을 이용하여 웹서버측에 데이터를 요청합니다

  • POST는 많은 양을 보내기에 적합
  • DB에 저장/수정하는 경우에 POST를 사용

http://url/bbslist.html?id=5&pagenum=2 같이 하는 것이 GET방식이고 form을 이용해서 submit을 하는 형태가 POST입니다.

 

좀 자세히 설명하면 GET은 Select적인 성향을 가지고 있습니다. GET은 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태등을 바꾸지 않습니다. 게시판의 리스트라던지 글보기 기능 같은 것이 이에 해당하죠.(방문자의 로그를 남긴다거나 글읽은 횟수를 올려준다거나 하는건 예외입니다.) 반면에 POST는 서버의 값이나 상태를 바꾸기 위해서 사용합니다. 글쓰기를 하면 글의 내용이 DB에 저장이 되고 수정을 하면 디비값이 수정이 되죠. 이럴 경우에 POST를 사용합니다.

 

'네트워크' 카테고리의 다른 글

SSL 동작과정  (0) 2020.08.19
TCP 프로토콜 - (흐름제어 와 혼잡제어)  (0) 2020.08.19
3&4 Way Handshake  (0) 2020.08.19

+ Recent posts