TCP

홍준섭·2023년 1월 13일
0

네트워크

목록 보기
7/20

TCP

  • TCP는 connection-oriented protocol이다. 데이터를 보내기 위해 두개의 TCP 사이에 가상의 연결을 생성한다.
  • TCP는 흐름 및 오류 컨트롤을 한다.
  • 전송 및 수신 프로세스가 동일한 속도로 데이터를 생성하고 소비하지 않을 수 있기 때문에 TCP는 저장을 위한 버퍼가 필요하다.
  • TCP는 데이터의 안전한 도착을 확인하기 위해 acknowledgement 메커니즘을 사용한다.

FUll-Duplex Service

  • TCP는 full-duplex service를 제공한다.
  • Piggybacking: 패킷이 a -> b 로 보내질때 b 에서 보낸 패킷에 대한 확인 메세지도 전달한다.

Byte numbers

  • 세그먼트 번호 값에 대한 필드가 없습니다. 대신 시퀀스 번호와 승인 번호라는 두 개의 필드가 있습니다. 이 두 필드는 바이트 번호를 나타냅니다.
  • 각 연결에서 전송되는 모든 데이터 바이트는 TCP에 의해 번호가 매겨집니다.
  • 번호 매기기는 무작위로 생성된 번호로 시작합니다.
  • 번호 매기기는 흐름및 오류 컨트롤에 사용된다.

Sequence number

  • 바이트가 번호를 가진 후, TCP는 전송되는 각 세그먼트에 시퀀스 번호를 할당합니다.
  • 각 세그먼트의 세그먼트 번호는 해당 세그먼트에서 전송된 첫 번째 바이트 번호이다.

Acknowledgement number

  • 세그먼트의 승인 필드 값은 파티가 수신할 것으로 예상되는 다음 바이트 수를 정의합니다. 승인 번호는 누적됩니다.

TCP Segment format

header = souce port address (16bit) + destination port address (16bit) + sequence number (32bit) + acknowledgement number (32bit) + control field (16bit) + Window size (16bit) + checksum(16bit) + urgent pointer(16bit)

connection-oriented

  • 전체 메시지에 대해 단일 가상 경로를 사용하여 손상되거나 손실된 프레임의 재전송뿐만 아니라 승인 프로세스를 용이하게 한다.
  • tcp는 connectionless protocol인 IP 위에서 동작하는데 TCP가 connection-oriented service라고 그 아래 계층과 위 계층의 프로토콜 또한 connection-oriented service여야 하는 것은 아니다.

connection establishment

  • TCP는 데이터를 full-duplex모드로 전송한다.
  • 두개의 기기안의 두개의 TCP가 연결될 때, 그들은 동시에 각자에게 세그먼트를 보낼 수 있다
  • 데이터가 전송되기 전에 각 당사자가 통신을 초기화하고 상대방의 승인을 받아야 한다
  • Simultaneous Open
    두 프로세스가 모두 활성 개방을 실행할 때 동시 개방이 발생할 수 있다. 그 경우 둘 중 하나만 연결이 된다.
  • SYN Flooding Attack
    SYN Flooding 공격은 악의적인 공격자가 데이터그램의 소스 IP 주소를 위조하여 각 SYN 세그먼트가 다른 클라이언트에서 온 것처럼 가장하여 서버로 대량의 SYN 세그먼트를 보낼 때 발생한다. SYN 플래딩 공격은 서비스 거부 공격으로 알려진 보안 공격 유형에 속하며, 공격자는 서비스 요청이 너무 많아 시스템이 붕괴되고 모든 요청에 대한 서비스가 거부됩니다.

Data transfer

  • Pushing Data
    push request를 이용해 데이터를 바로 보낼 수 있다.
  • uregent data
    urgent data는 받은 것을 바로 어플리케이션 쪽으로 밀어내준다.

flow control

server의 rwnd(리시브 윈도우) 크기에 따라 흐름 제어를 해준다. rwnd 크기를 늘려주면 속도를 증가 시킬 수 있다.

normal operation

ack는 data를 받자마자 보내는 것이 아닌 data를 받고 운영체제의 타이머가 정해진 시간 후에 보낸다.
=> 시간을 짧게 할 수록 클라이언트가 수신버퍼의 상태를 더 빠르게 알 수 있기 때문에 더 많이 보낼 수 있지만 부하는 증가한다.

Lost segment

시간안에 ack가 오지 않는다면 재 전송한다.

fast retransmission

이전의 ack가 연속적으로 올 경우 타이머에 상관없이 재전송한다.

profile
개발 공부중입니다

0개의 댓글