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
- 세그먼트의 승인 필드 값은 파티가 수신할 것으로 예상되는 다음 바이트 수를 정의합니다. 승인 번호는 누적됩니다.
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가 연속적으로 올 경우 타이머에 상관없이 재전송한다.