... | ... | @@ -678,7 +678,7 @@ TCP는 분리된 메시지를 보내는 것이 아니라, 데이터를 바이트 |
|
|
6. Congestion control
|
|
|
네트워크 정체를 방지하기 위해 receive window와 별도로 congestion window를 사용하는데 이는 네트워크에 유입되는 데이터양을 제한하기 위해서이다. Receive window와 마찬가지로 congestion window가 허용하는 바이트 수만큼 데이터를 전송한다. Flow control과 달리 송신자가 단독으로 구현한다.
|
|
|
|
|
|
<br />
|
|
|
<br />
|
|
|
|
|
|
**데이터 송신 시 TCP/IP 네트워크 스택의 레이어 별 동작과정**
|
|
|
|
... | ... | @@ -708,7 +708,7 @@ TCP는 분리된 메시지를 보내는 것이 아니라, 데이터를 바이트 |
|
|
|
|
|
NIC는 패킷 전송을 요청받고, 메인 메모리에 있는 패킷을 자신의 메모리로 복사하고, 네트워크 선으로 전송한다. 그리고 패킷 전송이 완료되면 NIC는 호스트 CPU에 인터럽트를 발생시킨다. 그럼 운영체제는 인터럽트 핸들러를 호출한다. 인터럽트 핸들러는 전송된 패킷(송신 결과)을 운영체제에 반환한다.
|
|
|
|
|
|
<br />
|
|
|
<br />
|
|
|
|
|
|
**데이터 수신 시 TCP/IP 네트워크 스택의 레이어 별 동작과정**
|
|
|
|
... | ... | @@ -727,7 +727,7 @@ TCP는 분리된 메시지를 보내는 것이 아니라, 데이터를 바이트 |
|
|
TCP 레이어에서도 checksum을 확인해서 패킷이 올바른지 검사한다. 그 다음 TCB를 찾는다. TCB를 찾으면 프로토콜을 수행해서 받은 패킷을 처리한다. 데이터를 해당 TCB에 속한 소켓의 receive socket buffer에 추가한다. 그 후 TCP 상태에 따라서 새로운 TCP 패킷(ACK 등)을 전송할 수 있다. 이렇게 수신 패킷 처리 과정이 끝난다.
|
|
|
|
|
|
이후 어플리케이션이 read 시스템 콜을 호출하면 커널 영역으로 전환되고, socket buffer에 있는 데이터를 유저 공간의 메모리로 복사해 간다. 복사가 끝나면 복사한 데이터는 socket buffer에서 제거하고 TCP를 호출한다. TCP는 socket buffer에 새로운 공간이 생겼기 때문에 receive window를 증가시킨다. 그리고 프로토콜 상태에 따라서 패킷을 전송한다.
|
|
|
|
|
|
<br />
|
|
|
|
|
|
12. **LINQ 결과인 IEnumerable<T>를 for 문으로 루프 돌때, breakpoint 걸어서 확인해보기**
|
|
|
|