-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[4장] 커넥션 관리 #6
Comments
TCP 커넥션
TCP 소켓 프로그래밍
TCP의 성능에 대한 고려TCP 커넥션 핸드셰이크 지연
💡(참고) TCP 3way, 4way handshake 차이
TCP 느린 시작
네이글(Nagle) 알고리즘과 TCP_NODELAY
TIME_WAIT 의 누적과 포트 고갈
HTTP 커넥션 관리
|
TCP 커넥션
TCP의 성능에 대한 고려
HTTP 커넥션 관리
병렬 커넥션
지속 커넥션
파이프라인 커넥션
|
TCP 커넥션
TCP 성능에 대한 고려TCP 커넥션 핸드 셰이크 지연
확인 응답 지연
TCP 느린 시작
네이글 알고리즘과 TCP_NODELAY
TIME_WAIT의 누적과 포트 고갈
HTTP 커넥션 관리문제점
|
TCP 커넥션
TCP 소켓 프로그래밍
TCP 성능에 대한 고려
TCP 커넥션 핸드셰이크 지연
확인 응답 지연
느린 시작
네이글 알고리즘
TIME_WAIT의 누적과 포트 고갈
HTTP 커넥션 관리
병렬 커넥션 지속 커넥션 파이프라인 커넥션 |
TCP 커넥션전 세계 모든 HTTP 통신은 패킷 교환 네트워크 프로토콜의 계층화 된 집합인 TCP/IP를 통해 이루어진다. 커넥션이 이루어지게 되면
클라이언트와 서버 간 주고받는 메시지들은 손실 혹은 손상되거나 순서가 바뀌지 않고 안전하게 전달된다. [ 요청 과정 ]
TCP 스트림은 세그먼트
TCP 커넥션 유지하기
→ TCP 커넥션을 유지하기 위해 위의 4가지로 구성된 값이 필요한데, 이를 4-tuple이라고 한다. 4개 중 일부는 값이 같을 수 있지만 4가지가 모두 같은 서로 다른 TCP 커넥션은 존재할 수 없다. [ TCP는 소켓을 기반으로 커넥션이 맺어지고, Bind Port와 Connection Port가 존재한다. ] Bind Port(리스닝 포트)와 실제 Connection Port(데이터 전송 포트)
- 서버는 특정 포트에서 연결을 수신하기 위해 bind(바인드)된 포트를 가지고 있다. 이는 서버의 리스닝 포트이다.
- 실제로 데이터가 주고받는 포트는 연결이 맺어진 후 사용되는 포트이다. 이는 서버와 클라이언트 간 실제 데이터 전송에 사용된다.
- Connection Port는 일반적으로 동적으로 할당되며, 서버가 정해준다. TCP 소켓 프로그래밍
TCP 커넥션 성능 관리
→ 실제 요청을 처리하는 시간에 비해 TCP 네트워크 지연이(커넥션 연결, 요청, 응답) 훨씬 크다. TCP 성능이 많이 느려지는 이유…
HTTP 커넥션의 성능을 향상시킬 수 있는 기술[ 병렬 커넥션 ]
[ 지속 커넥션 ]
[ 파이프라인 커넥션 ]
HTTP 커넥션 끊기
|
https://www.notion.so/4-77785706ef18419091d65fcc9e7befbe?pvs=4 HTTP통신은, 지구상의 컴퓨터와 네트워크 장비에서 널리 쓰이고 있는 패킷 교환 네트워크 프로토콜들의 계층화된 집합인 TCP/IP를 통해 이루어진다.
왜 → TCP 커넥션 세그먼트 TCP 커넥션은 네 가지 값으로 식별한다. 발신지 IP 주소, 발신지 포트, 수신지 IP 주소, 수신지 포트 네트워크 비용이 굉장히 많이 발생한다. 실제로 작업 시간은 짧다. msa를 고려해보아야 하는 점 중 하나일 것이다. 네이글 알고리즘은 좋은 것인가 ? 병렬 커넥션앞서 언급했듯이 브라우저는 HTML 페이지에 이어 첫 번째 첨부된 객체, 두 번째 첨부된 객체를 하나씩 내려받는 식으로 웹페이지를 보여줄 수 있다. 하지만 이 방식은 너무 느리다. 병렬 커넥션이 일발전으로 더 빠르기는 하지만, 항상 그렇지는 않다. 클라이언트의 네트워크 대역폭이 좁을 때는 대부분 시간을 데이터를 전송하는 데만 쓸 것이다. 또한 다수의 커넥션을 메모리를 많이 소모하는 자체적인 성능 문제를 발생시킨다. 결과적으로 사용자는 빠르게 느낄 것이다. 우리가 화면의 이미지를 비동기 형식으로 내려 받는 것과 유사하다고 본다. 지속 커넥션처리가 완료된 후에도 계속 연결된 상태로 있는 TCP 커넥션을 지속 커넥션이라고 부른다. 해당 서버에 이미 맺어져 있는 지속 커넥션을 재사용함으로써, 커넥션을 맺기 위한 준비작업에 따르는 시간을 절약할 수 있다. 게다가 이미 맺어져 있는 커넥션은 TCP의 느린 시작으로 인한 지연을 피함으러써 더 빠르게 데이터를 전송할 수 있다. Keep-Alive 동작응답에 Connection: Keep-Alive 헤더가 없으면, 클라이언트는 서버가 Keep-Alive를 지원하지 않으며, 응답 메시지가 전송되고 나면 서버 커넥션을 끊을 것이라 추정한다. Keep-Alive 옵션Keep-Alive 헤더는 커넥션을 유지하기를 바라는 요청일 뿐이다. 언제든지 현재의 keep-alive 커넥션을 끊을 수 있으며 keep-alive 커넥션에서 처리되는 트랜잭션의 수를 제한할 수 있다. 파이프라인 커넥션상황 : 첫 번쩨 요청이 네트워크를 통해 지구 반대편에 있는 서버로 전달되면, 거기에 이어 두 번째와 세 번째 요청이 전달될 수 있다. 이는 대기 시간이 긴 네트워크 상황에서 네트워크상의 왕복으로 인한 시간을 줄여서 성능을 높여준다. POST 요청같이 반복해서 보낼 경우 문제가 생기는 요청은 파이프라인을 통해 보내면 안 된다. 다중 커넥션 |
TCP 커넥션HTTP 통신은 TCP/IP 프로토콜을 통해 이루어진다
TCP 소켓 프로그래밍유닉스 및 대부분의 운영체제에서 사용 가능
TCP 성능 고려
HTTP 트랜잭션 지연TCP 지연에 비해 트랜잭션 처리 시간 자체는 매우 짧음 지연원인
TCP 관련 지연TCP 커넥션 핸드셰이크 지연커넥션 생성시
확인 응답 지연수신자가 TCP 세그먼트를 온전히 받으면 송신자에게 확인 응답 패킷 반환
TCP slow startTCP는 급작스러운 부하를 막고자 연결을 맺고 점차 속도 제한을 높여 나간다
네이글 알고리즘네트워크 효율을 위해 많은 양의 TCP 데이터를 한 개의 덩어리로 합친다
TIME_WAIT 누적과 포트 고갈TCP 연결을 끊으면 해당 커넥션 정보를 control block에 기록 이때 성능 시험과 같이 IP 주소를 제한할 경우, 연결의 조합이 제한된다 HTTP 커넥션 관리Connection 헤더
순차적인 트랜잭션 처리에 의한 지연커넥션 맺고, 리소스 요청-응답 과정을 순차적으로 반복 병렬 커넥션여러 개의 커넥션을 한번에 맺고 동시에 다운
지속 커넥션앞으로도 있을 HTTP 요청에 TCP 커넥션을 재활용 -> TCP 커넥션 지연 및 slow start 회피
Keep-AliveHTTP/1.0의 지속 커넥션 타입, 1.1버전에서 제거되었음에도 아직 많이 사용
HTTP/1.1 지속 커넥션keep-alive를 지원하지 않는다 파이프라인 커넥션여러 개의 요청을 큐에 쌓고, 응답이 도착하기 전에 다음 요청 송신
커넥션 끊기마음대로 끊기서버, 클라이언트, 프록시에서 마음대로 끊을 수 있음 Content-Length와 Truncation커넥션이 끊어졌을 때, 실제 전달된 엔티티 길이와 Content-Length가 일치하지 않으면 서버에 확인해야한다 커넥션 끊기의 허용, 재시도, 멱등성커넥션이 예상치 못하게 끊어졌을때, 비멱동성 메서드를 보내면 알 수 없는 결과를 초래한다 우아한 커넥션 끊기
|
No description provided.
The text was updated successfully, but these errors were encountered: