본문 바로가기

개발 관련 기타/웹

WEB 면접 예상 질문) "File Server에서 File을 다운 받는 과정에서 TCP/IP에 대해서 설명해주세요 (Client-side)"

다음 글에서 이어서:

2025.02.19 - [분류 전체보기] - WEB 면접 예상 질문) "File Server에서 File을 다운 받는 과정에서 TCP/IP에 대해서 설명해주세요 (Server-side)"

 

WEB 면접 예상 질문) "File Server에서 File을 다운 받는 과정에서 TCP/IP에 대해서 설명해주세요 (Server-s

1. File Server buffered I/O가 일어남 예) 1.4 MB file을 다운 받을 시 File Server:- socket에 대해 read와 write를 함 file server write 할 때 read:- user-space app은 system api 호출- system api는 storage driver api 호출- hw read 해

mike-tyson.tistory.com

 

OS 레벨에서 TCP segment 관리 방법:

- in-order segments: doubly-linked list -> faster insert/delete in-between

- out-of-order segments: rb-tree -> faster lookup and re-assembly (segment number를 기준으로 관리)

 

TCP read buffer:

- 비워짐: application에서 읽어가면 비워짐

 

ACK:

- TCP read buffer에 TCP segment가 잘 쌓이고 있다는 것을 알림

- 예: TCP segment 1, 2 가 잘 왔으면 ACK 3을 날림.

 

WAIT:
- 1. server는 ACK를 기다림

-- 예: segment 1과 2를 보낸 후 ACK 3을 기다림

- 2. server는 WINDOW SIZE를 보고 기다림 (수신 측의 window size > MSS 일 때 송신) 

-- 예: ACK 에서 보내온 window size 를 확인

 

WINDOW SIZE: 현재 추가로 받을 수 있는 세크먼트의 량
- TCP read buffer 내 일부를 WINDOW 로 할당

 

네트워크가 느려질 때 주의할 사항:

- 클라이언트의 TCP buffer가 빠르게 비워지지 않아서 WINDOW SIZE가 작아져 송신 쪽에서 WAIT 하여 네트워크 속도가 늦어지는 것 일 수 있다

-- 예: 클라이언트 I/O 부하가 걸려서 read가 늦어짐.

-- TCP buffer를 비우는 행위: 즉, application system I/O read (kernel space to user space copy 또는 zero-copy) 는 network 속도보다 빨라야 한다

- 디버깅: server 측은 받은 window size를 확인해야 한다. window size가 작으면 문제는 client 에서 찾아야 한다.

- 처리 지연에 의한 문제: TCP buffer -> socket I/O buffer 로 read가 어떤 이유로 간에 빠른 속도로 되지 않으면 문제가 발생한다.

 

추가 내용:

- TCP 3-way handshake:

-- SYN (SYN flag:1, SEQ: x) -> SYN-ACK (SYN flag:1, ACK flag:1, SEQ: y, ACK: x+1) -> ACK (ACK flag 1, SEQ: x+1, ACK: y + 1) 으로 이루어짐

-- 목적: 순서 올바른지 확인

 

블로그 작성  시 참고한 자료:
- https://www.youtube.com/watch?v=K9L9YZhEjC0