네트워크/네트워크

TCP(Transmission Control Protocol)

비니화이팅 2018. 1. 16. 03:26

TCP(Transmission Control Protocol)

- 연결 지향형 프로토콜로서 수신측이 데이터를 흘려버리지 않게 데이터 흐름 제어(Flow Control)와 전송 중 에러가 발생할 경우 재전송하는 에러 제어(Error Control) 등의 기능을 통해 데이터의 확실한 전송을 보장한다.

- 하지만 완전하지는 않아 해커들에게 많은 공격을 받게 된다.


[TCP 특징]

1. 높은 신뢰성

2. 가상회선 연결 방식

3. 연결의 설정과 해제

4. 시간 초과와 재전송

5. 데이터 흐름 제어


[TCP 연결 설정]

- 송신측과 수신측이 서로에 대한 신뢰성 있는 전송을 보장하는 세션을 수립하는 과정이다.

1. 두 시스템이 통신하기 전 클라이언트는 포트가 닫힌 Closed 상태이며 서버는 해당 포트로 항상 서비스를 제공할 수 있도록 Listen상태이다.

2. 클라이언트가 통신을 하고자 하면 임의의 포트 번호가 클라이언트에게 할당되고 클라이언트는 서버에게 연결하고 싶다는 의사 표시로 SYN 패킷을 보내고 Syn Sent상태가 된다.

3. 클라이언트의 연결 요청을 받은 서버는 SYN Received상태가 되고 클라이언트에게 연결을 해도 좋다는 의미로 SYN+ACK 패킷을 보낸다.

4. 마지막으로 클라이언트는 연결을 요청한 것에 대한 서버의 응답을 확인했다는 표시로 ACK 패킷을 서버에 보내고 Established상태가 된다. 마찬가지로 서버도 ACK 패킷을 받고 Established 상태가 된다.


[TCP 세션 종료]

1. 통신을 하는 중이기 때문에 클라이언트와 서버 모두 Established 상태이다.

2. 통신을 끊고자 하는 클라이언트가 서버에게 FIN 패킷을 보내고 Close Wait 상태가 된다.

3. 서버는 클라이언트의 연결 종료 요청을 확인하고 클라이언트에게 응답으로 ACK 패킷을 보낸다. 서버도 클라이언트의

연결을 종료하겠다는 의미로 FIN 패킷을 보내고 Close Wait 상태가 된다.

4. 마지막으로 클라이언트는 연결 종료를 요청한 것에 대한 서버의 응답을 확인했다는 의미로ACK 패킷을 서버에 보내고 Closed 상태가 된다. 마찬가지로 서버도 ACK 패킷을 받고 Closed상태가 된다.


[TCP 헤더]

Source Port

(16 bit)

Destination Port

(16 bit)

Sequence Number

(32 bit)

Acknowledgement Number

(32 bit)

Offset

(4 bit)

Reserved

(6 bit)

TCP Control Flag

(6 bit)

Window Size

(16 bit)

TCP Checksum

(16 bit)

Urgent Pointer

(16 bit)

Options (가변)


① Source Port

- 송신 측 포트번호이다.


② Destination Port

- 수신 측 포트 번호이다.


③ Sequence Number

- SYN Flag가 1인 경우 : 초기 순서 번호를 나타낸다.

- SYN Flag가 0인 경우 : 세그먼트의 순서 번호를 나타낸다.

- 맨 앞 위치의 데이터가 송신 데이터의 몇 번째 바이트에 해당하는지 송신측에서 수신측에 전달하기 위한 번호이다.


④ Acknowledgement Number

- 수신자에 의해 예상되는 다음 바이트의 순서번호를 나타낸다.

- 데이터가 몇 바이트까지 수신측에 도착했는지 수신측에서 송신측에 전달하기 위한 번호이다.


⑤ Offset

- TCP 헤더의 시작부터 데이터 이전까지이 길이이다.

- 즉, 헤더의 길이이다.

  (4 byte단위)


⑥ Reserved

- 예약되어 있는 필드이다.


⑦ TCP Control Flag

URG

ACK

PSH

RST

SYN

FIN

-> URG

- Urgent Pointer가 있음을 표시

- 수신자가 이미 흐르고 있는 옥텟을 처리하는 것을 기다리지 않고 대역을 벗어나 데이터를 보내기 위해 사용한다.


-> ACK

- Acknowledgment number가 기술되어 있음을 표시한다.


-> PSH

- 대화형 트래픽에 사용되는 것으로 버퍼가 채워지기를 기다리지 않고 데이터를 전달한다.

- 데이터는 버퍼링 없이 바로 위 Layer가 아닌 7 Layer의 응용프로그램으로 바로 전달한다.


-> RST

- 연결을 초기화한다.

- 양방향에서 동시에 일어나는 중단 작업이다.

- 비정상적인 세션 연결 끊기에 해당한다.


-> SYN

- 연결을 초기화하기 위해 순서번호를 동기화한다.


-> FIN

- 송신측이 데이터 전송을 종료한다.

- 연결을 정상적으로 종료하기 위해 사용한다.


⑧ Window Size

- 수신측이 받을 수 있는 데이터를 수신측에서 송신측으로 전송하는 값이다.

- 윈도우 사이즈 : 수신 확인을 기다리지 않고 묶어서 송신할 수 있는 데이터 양


⑨ TCP Checksum

- TCP 헤더 데이터를 포함한 세그먼트 전체에 대하여 오류 체크를 위해 계산한 값이다.


⑩ Urgent Pointer

- 긴급히 처리해야 할 필요가 있는 데이터의 마지막 바이트의 위치를 나타낸다.


⑪ Options

- 연결이 구성되는 동안 협상할 최대 세그먼트 크기 (MSS)옵션을 정의한다.


[TCP 패킷 분석]

 -> 클라이언트 : Windows XP 

- IP : 10.10.10.10

 -> 서버 : Windows 2000 Server

- IP : 10.10.10.20


- 아래는 Windows XP에서 웹 서버인 Windows 2000 Server로 접속했을 때의 모습을 wireshark로 캡처한 것이다.


(4) -> 클라이언트가 통신을 하고자 하면 임의의 포트 번호가 클라이언트에게 할당되고 서버에게 연결하고 싶다는 의사 표시로 SYN 패킷을 보낸다.


(5) -> SYN 패킷을 받은 서버는 클라이언트에게 연결을 해도 좋다는 의미로 SYN+ACK 패킷을 보낸다.


(6) -> 마지막으로 클라이언트는 연결을 요청한 것에 대한 서버의 응답을 확인했다는 표시로 ACK 패킷을 서버에 보낸다.