프론트 -> 백 파일전송 과정

Seonhee Kim·2023년 7월 12일

study

목록 보기
12/18

핵심 개념들

  1. TCP / IP
  2. 패킷
  3. 세그멘트
  4. 메모리/버퍼(청크)

[DOD]

user- 커널(TCP,IP)-sw(드라이버)-hw

server process 와 DOD 사이에 socket (읽어줘 써줘~등등 명령, process가 socket에게 operate) ⇒ RWX(받다보내다실행)

순서 정리(2MB 사진을 clinet 로 보내는)

server computer

  1. 사진을 조각낸다.
  2. TCP에서 메모리공간을 확보 후, 잘린 청크를 공간에 채운다 (= 버퍼1)
  3. server가 버퍼1을 복사해와서 버퍼 2를 만든다
  4. TCP 가 버퍼 2를 다시 자른다. 이 한 조각들이 segment (unique key 발급, 순서 보장)
  5. IP가 패킷, 인캡슐레이션 한다
  6. frame에 태워 client 로 보낸다.
  7. frame이 사라졌다 나타났다를 반복하며 이동하고, (트럭 옮겨다니는것이랑 같음) 마지막 frame이 client server에 도착한다.

client computer

  1. IP가 패킷을 디캡슐레이션 한다.
  2. TCP가 메모리 공간 = (윈도우사이즈) 을 확보하고(넉넉히 , 유동적으로) segment를 담는다.
  3. 알파, 베타 동시에 진행
  • 알파 : server가 프론트 화면에 그리던지, 적재만 하던지 받은 segment를 처리한다.
  • 베타 : client 가 server에 ACK 를 보냄(두번째 segment 보내!) → server가 wait하고 남은 윈도우사이즈(client TCP 메모리공간)를 체크한다. → 공간이 충분한것을 확인한 server가 OK 사인을 보낸다. → 1~9를 다시 반복한다.

알파 속도 > 베타 속도 === 정상

알파 속도 < 베타 속도 === 성능저하, 사진이 그려지는 게 끊겨보임

TCP:2MB 메모리를 할당해야지 가 아니라 50KB 만큼 할당함(2MB를 저 크기로 잘라서 메모리공간에 채워 넣는다. ⇒ 잘린 조각들이 청크, 다 채워지면 버퍼 안 채워지면 메모리/ 버퍼를 채우는 중일때 걸리는 게 버퍼링)

~점심시간

  • 서버 컴퓨터 이야기
    1. 서버가 메모리 공간을 만든다 (50kb) → 잘라서 조각을 메모리에 채움 (메모리,버퍼(1), 이 청크를 태워서 tcp로 보냄)
    2. TCP가 50KB 짜리 버퍼를(2) 만들고 청크를 복사해옴 (가져오는 거 아님)→ 그 청크를 자르고 (붕어빵 머리 몸통 꼬리) 번호를 붙인다. 이 조각들 하나하나를 세그멘트라고 한다.
      • 버퍼1에서 버퍼2로 가는 게(복사) bufferd IO
    • IP : 패킷 핸들링

      패킷: 세그멘트를 인캡슐레이션하는것이다

      packet이라는 상자를 준비하고 그 안에 세그멘트 하나하나를(머리를 넣은 상자, 꼬리를 넣은 상자 ..) 넣음. → 배송 준비 끝, 트럭을 부름

      이 상자들을 택배차(frame)에 넣을거임

    • 배송중

      택배 상자를 다른 프레임으로 옮기는 과정 (여러 허브를 경유하며 트럭을 갈아탈것임(하얀트럭~노란트럭 등등). = 프레임이 사라졌다가 나타났다가 반복하며 트럭을 갈아타고 n번 프레임까지 감)

    • 클라이언트 컴퓨터 이야기

      마지막 택배차는 클라이언트에 도착, 상자를 내려서 상자를 열고 그 안에 있는 걸 꺼낸다

      패킷을 까는 것=디캡슐레이션 ,클라이언트 IP가 이 세그멘트(붕어빵의 머리)를 TCP가 머리를 담을 공간을 확보해서 올림(클라이언트 TCP 버퍼 사이즈=윈도우사이즈). 이것이 10MB 이런식으로 딱 맞는 게 아니고, 충분한 공간 확보(유동적으로 결정). 그러면 TCP가 그걸 적재한다. 이 버퍼에 담기는 순간 실제 서버에 올리면서(TCP가 하는 게 아니라, 서버가 알아서 가져간다.) 동시에 ok 사인이 이어짐

      —> 여기까지 오면 첫번째 세그멘트 옮긴것.

      client가 server network 한테 ack 2를 보냄. 순서보장 (UDP와의 차이점, wait가 생겨서 느리긴 함. wait왜 하냐면 클라이언트 버퍼에 남은 사이즈 체크하고 ack(ok사인)를 보냄 )

이 클라이언트 버퍼에서 순서대로 적재되는 걸 또 위로 올린다 (프론트 화면에 그리던지, 적재를 하던지 .. 이 속도가 wait → ack 를 거치는 그 속도보다 느리면 느려짐)

왜 느려질까? 대부분 파일 사이즈가 커서.

profile
안녕하세요 ~_~

0개의 댓글