Study/HTTP

08. TCP&IP

ABCD 2024. 4. 16.

TCP / IP

TCP / IP

  • 패킷 통신 방식의 인터넷 프로토콜인 IP(인터넷 프로토콜) + 전송 조절 프로토콜인 TCP(전송 제어 프로토콜)
  • IP → 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다.
  • TCP → IP 위에서 동작하는 프로토콜, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다.
  • HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기
    때문에 묶어서 TCP/IP라고 부르기도 한다.

세그먼트(segment)

  • TCP가 데이터 스트림을 잘게 나눠 IP패킷이라고 불리는 봉투에 담아 인터넷을 통해 데이터를 전달하는 단위
  • 각 TCP세그먼트는 하나의 IP주소에서 다른 IP주소로 IP패킷에 담겨 전달된다.
    • IP패킷 각각은 다음을 포함한다.
      • IP 패킷 헤더(보통 20byte)
      • TCP 세그먼트 헤더(보통 20byte)
      • TCP 데이터 조각(0 or 그 이상의 byte)

MTU(Maximum Transmission Unit)

  • TCP / IP 세그먼트 최대 전송 단위
  • UDP의 경우에는 최대 MTU만큼만 보내지만, TCP의 경우 여러 데이터를 나누어 다수의 세그먼트를 전송

TCP Connection

  • Connection 구성요소
    • <발신지 IP주소, 발신지 포트, 수신지 IP 주소, 수신지 포트>
  • 네가지 커넥션 구성요소를 모두 똑같이 가르키고 있는 커넥션은 있을 수없다. (당연하게도…)

TCP성능 관련 요소

  • 통상 HTTP 성능 관련 문제는 TCP네트워크의 지연이 대다수이다.
    • TCP네트워크의 핸드셰이크시 요청을 차리하는 로직은 시간은 매우 짧은 시간에 이루어지기 때문
  • TCP 커넥션 핸드셰이크 지연
    • 아주 큰 데이터를 주고 받지 않는 경우에는 커넥션에서 50%이상의 지연시간을 사용하게 된다.
    • TCP 3 way Hand shake & 4 way Hand shake

스크린샷 2023-06-15 오전 9 34 12

종류 설명
SYN(Synchronization, 연결 요청) TCP 교환 과정의 첫번째 패스, 세션 연결을 위해 임의적 시퀀스 번호를 보냄.
ACK(Acknowledgement, 응답) 첫번째 패킷을 받았다는 걸 알려주는 패킷, 성공/실패 판단하여 다음 패킷을 전송.
RST(Reset, 재 연결 종료) 비 정상적인 세션 연결 끊기, 즉시 연결 끊는 행위.
PSH(Push) OSI 7계층인 Application 계층으로 전송하는 Flag
URG(Urgent, 긴급 데이터) 유효한 것인지 나타낸다.(예를 들면 명령 수행 도중 Ctrl+C를 눌러 인터럽트 하는 행위)
FIN(Finish, 연결 종료 요청) 세션 종료 시킬 때 사용.
  • way-handshake(두 지점 간에 세션을 연결하는 작업)
    • 클라이언트는 서버와 커넥션을 연결하기 위해 SYN을 보낸다.
    • 서버가 SYN을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보낸다.
    • 클라이언트는 서버의 응답인 ACK와 SYN 패킷을 받고, ACK를 서버로 보낸다.
  • way-handshake(두 지점 간에 세션을 종료하는 작업)
    • 클라이언트가 연결을 종료하겠다는 FIN 플래그를 서버에 전송한다.
    • 서버는 일단 확인 메세지인 ACK를 보내고 자신의 통신이 끝날때가지 기다린다.(Time_Wait상태)
    • 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 플래그를 전송한다.
    • 클라이언트는 확인 메세지인 ACK를 다시 서버에 보냄
  • Slow-Start
    • 인터넷의 호잡을 제어하기 위한 TCP의 느린 시작
    • 한개의 패킷이 정상적으로 전달이 되면 송신자는 두개의 패킷을 전송할 권한을 얻고 총 $2^n$으로 늘어난다.
    • 이 때문에 HTTP에는 전송속도를 높이기 위해 이미 많은 권한을 가진 송신자를재 활용하는 기능이 있다.
  • Nalge Algorithm
    • TCP는 1바이트의 데이터라도 전송시킬 수 있다. 하지만, 이런 작은 데이터들을 매번 전송하기에는 비효율적이기에 MTU만큼의 데이터가 쌓여야만 데이터를 전송시키는 알고리즘이며 앞의 모든데이터가 전송된 것이 확인 되었을 때 마지막에 남은 데이터를 전송시킨다.
  • 확인응답 지연 Algorithm
    • 각 TCP의 세그먼트는 무결성을 보장하기 위해 확인과정을 거친다.
    • 만약 수신자가 특정시간안에 확인 메세지를 보내지 않으면 패킷이 파괴되었거나 오류가 발생한 것으로 간주하고 데이터를 다시 전송한다.
    • 확인 응답은 크기가 작기 때문에 같은 방향으로 송출되는 데이터 패킷에 확인응답을 편승시킨다.
      • 편승 → 다른녀석에게 얹혀가는 것
    • 이 때, 확인응답 지연 알고리즘은 송출되는 패킷에 확인응답을 얹기위해 송출패킷을 찾기시작하는데 일정시간안에 찾지 못하면 확인 응답은 별도의 패킷을 만들어 전송한다.
    • 하지만, 응답과 요청뿐인 HTTP는 확인 응답이 편승되는 기회를 감소시킨다.
    • 때문에 확인응답 지연 알고리즘으로 인한 지연이 자주발생한다.
  • Time_Wait 지연과 포트 고갈
    • 잘 발생하시는 않지만 발생하면 심각한 성능 저하를 일으킨다.
    • 보통 커넥션시에 발신자의 IP, 수신자의 IP, 수신자의 Port는 고정이고 발신자의 Port만 변경하게 된다.
    • 이때 유일한 커넥션을 생성하기 위해 새로운 발신지 포트를 사용하는데 중복을 방지하기위해 커넥션 종단에서 메모리에 IP와 Port를 기록해 놓는다.(보통 세그먼트 주기의 2배정도로 기록해둠, 약 2분)
    • 약 2분만큼은 포트가 묶여 있는 상태이므로 이 시간을 넘기면 초당 최대 처리할 수 있는 트랜잭션의 수를 넘기게되면 지연이 발생한다.
728x90
반응형

'Study > HTTP' 카테고리의 다른 글

10. WebServer  (0) 2024.04.16
09. HTTP Connection Management  (0) 2024.04.16
07. StartRow&StatusCode  (0) 2024.04.16
0.6 URL escape String  (0) 2024.04.16
05. HTTP2.0  (1) 2024.04.16

댓글

💲 추천 글