본문 바로가기

Computer Science/Network6

[HTTP] HTTP/2는 정말로 HOL blocking를 해결했을까? HOLB(Head of line blocking) HOLB란 패킷을 전송하고 싶은데 이전 패킷을 전송하는데 지연이 발생해 패킷을 전송하지 못하는 상황을 의미한다. 말 그대로 패킷을 보내고 싶은데 blocking이 발생한 것이다. HOLB in HTTP/2 HTTP/2는 클라이언트와-서버 간 하나의 연결을 사용한다. 그리고 요청-응답을 스트림으로 관계를 맺어 병렬로 데이터를 전송한다. HTTP 상에서는 병렬로 데이터를 전송하기 때문에 HOLB가 없다. 단, 애플리케이션 레이어 한정이다. HOLB in TCP 그런데, HTTP가 어느 layer 위에서 동작하는지 생각해보자. HTTP(L7)는 TCP(L4)/IP(L3) 기반에서 동작한다. TCP는 패킷이 유실되거나, 오류가 있을 때 재전송한다. 재전송 과정에.. 2022. 7. 22.
[IP] IP fragmentation, reassembly * 참고) L4는 Transport Layer, L3는 Network Layer, L2는 Data Link Layer을 의미합니다. Maximum Transmission Unit(MTU) [byte] MTU는 Data Link Layer(L2)에서 최대로 전송 가능한 프레임의 크기이며 단위는 바이트이다. L2에 해당하는 프로토콜(d, Wi-Fi 등)은 각자의 MTU를 가지고 있다. (예) Ethernet의 MTU는 1500, Wi-Fi는 약 2300) IP fragmentation IP 단편화(IP fragmentation)는 L3의 패킷이 L2의 MTU를 초과하는 경우, MTU의 크기를 단위로 패킷을 분할하는 행위이다. 예를 들어, 4000 Byte의 패킷을 1500 MTU에 맞게 단편화하면 3개의 독.. 2022. 7. 18.
[TCP] Fast Retransmission Timeout TCP로 연결된 각 호스트는 송신 버퍼(Send Buffer)와 수신 버퍼(Receive Buffer)를 가지고 있다. 송신 버퍼는 Window Size 만큼 패킷을 한 번에 보내며, Timeout을 통해 패킷의 유실을 확인한다. 3 duplicate ACKs and Fast Retransmission 3 duplicate ACKs은 특정 ACK 패킷을 응답받은 후, Timeout 전 동일한 ACK를 3번 응답받은 경우를 의미한다. 즉, 총 4번 동일한 ACK을 응답받아야 한다. 빠른 재전송(Fast Retransmission)은 3 duplicate ACKs을 통해 패킷의 유실을 확인하면, 해당 패킷을 Timeout 전 다시 전송하는 방법이다. RFC에도 기술되어 있으며, 의무는 아니고 .. 2022. 7. 18.
[HTTP] HTTP란? (+07/26 내용 일부 수정) HTTP(HyperText Transfer Protocol) HTTP는 애플리케이션 레이어(L7)에서 데이터를 주고받기 위한 프로토콜이며, TCP 기반에서 동작한다. (RFC 2616을 참고) HTTP는 프로세스 간 통신(IPC)이라고도 말할 수 있다. 우리가 사용하고 있는 브라우저는 하나의 프로세스이다. 그래서 브라우저가 서버로 정적 파일(html, css, 이미지 등)을 받아 오는 과정은 프로세스 간 통신이라고 말할 수 있다. (IPC, Inter Process Communication) 브라우저가 서버로 부터 이미지를 받아오는 상황을 가정해보자. 서버는 TCP 소켓을 80번 포트(TCP 포트)에 바인딩되고 있을 것이다. 이후 브라우저의 클라이언트 TCP 소켓이 서버에.. 2022. 7. 11.
[TCP] 혼잡 제어(Congestion Control) 호스트의 상황을 넘어 네트워크 상황으로 TCP의 각 호스트는 Send Buffer, Receive Buffer을 가지고 있다. 송신 호스트의 Send Buffer는 수신 호스트의 Receive Buffer 여유 공간에 영향을 받는다. Receiver Buffer의 정보는 TCP 헤더의 Window Size에 담겨 보내진다. 여기에 네트워크의 혼잡 상태를 추가로 적용한 예시를 확인해보자. 상황 1 네트워크 상황이 좋아 최대 100개의 패킷을 보낼 수 있다. 하지만 수신자의 Receive Buffer의 여유 공간은 50 패킷 정도이다. 이때 송신자는 최대로 50개의 패킷만 보낼 수 있다. 상황 2 상황 1과 반대로 네트워크 상황이 좋지 않아 최대 30개의 패킷만 보낼 수 있다. 여전히 수신자의 Receive.. 2022. 7. 7.
[TCP] 파이프 라이닝(Pipelining) Pipelining 패킷을 전송 후 피드백(응답)을 받기 전까지의 시간을 RTT(Round Trip Time)라고 한다. 만약 패킷을 전송하고 응답받을 때까지 다른 패킷을 보내지 않는 다면 RTT 동안 네트워크를 사용하지 않아 성능적인 이슈가 발생한다. 이를 해결하기 위한 방법이 Pipelining이다. Pipelining이란 특정 크기만큼의 패킷을 한 번에 전송 후 피드백을 받는 방법이다. 구현 방법에는 Go-Back-N과 Selective Repeat이 있다. Go-Back-N Go-Back-N은 윈도우 사이즈를 N으로 지정하여, 패킷의 전송을 실패한 경우 N개의 패킷을 모두 다시 전송하는 방법이다. 패킷 전송이 실패되는 경우는 패킷에 타임아웃이 발생한 경우이다. (*참고. 수신자 측은 이미 받은 패.. 2022. 7. 6.