다음 글에서 이어서:
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
'개발 관련 기타 > 웹' 카테고리의 다른 글
CLOUD 관련 예상 면접 질문) "클라우드가 뭔가요?" (0) | 2025.02.20 |
---|---|
WEB 예상 면접 질문) "HTTP Status Code에 대해서 설명해주세요" (0) | 2025.02.19 |
nodejs, react) 외국인 대상 서비스 만들기 - 16일차 - 2024.06.25 (0) | 2024.06.25 |
nodejs, react) 사명 의지 재밌는 서비스 만들기 - 15일차 - 2024.06.21 (0) | 2024.06.21 |
nodejs, react) 외국인 대상 서비스 만들기 - 14일차 - 2024.06.20 (0) | 2024.06.20 |