본문 바로가기
[ ★ ]Study/Network

TCP 프로토콜 (1)

by nroses-taek 2017. 6. 9.

TCP 프로토콜

TCP(Transmission Control Protocol) OSI 7 계층에서 4계층 전송 계층(Transprot Layer)에서 사용되는 통신규약으로 어떤 컴퓨터가 다른 컴퓨터와 데이터를 주고받기 위한 통신 프로토콜의 일종이다.

전송 계층에서 동작하는 프로토콜은 그보다 상위에 있는 소프트웨어 애플리케이션이 인터네트워크를 사용할 수 있도록 몇 가지 중요 서비스를 제공한다. 전송 계층 프로토콜은 일반적으로 원거리에 있는 소프트웨어 서비스 간에 연결을 수립하고 관리하게 된다. 많은 상위 계층 애플리케이션은 신뢰할 수 있는 방법으로 데이터를 보낼 필요가 있다. 에러 보정, 손실된 데이터, 흐름 관리에 신경 쓰지 않고 데이터를 보낼 수 있기 때문이다.

- 연결 지향 -

TCP 프로토콜은 통신을 시작하기 전에는 연결을 설정하는 절차를 거치며 통신이 끝난 뒤에는 연결을 해제하는 절차를 거쳐서 통신을 종료한다.

 흔히 3way handshake라고 많이들 들어봤을 것이다. 그 3단계는 아래와 같다.

1. 클라이언트는 통신을 시작함을 서버에 알린다.(SYN)

2. 클라이언트의 통신 시작을 확인하였고, 서버도 통신 시작을 알린다.(SYN+ACK)

3. 클라이언트는 서버의 통신 시작을 확인함을 알린다.(ACK)


또한, 4way handshake라고도 들어봤을 것이다. 이는 연결을 종료하기 위한 과정이다.

1. 클라이언트가 연결을 종료하겠다는 FIN플래그를 서버로 전송한다.

2. 서버는 ACK플래그를 클라이언트로 전송하고, 자신의 연결 종료를 준비.

3. 서버가 최종적으로 연결 종료 준비가 되면, FIN플래그를 클라이언트로 전송.

4. 클라이언트가 서버로부터 ACK플래그를 전송 후 일정 시간 대기한 뒤 연결을 해제한다.

※ 구글에 수도 없이 떠돌아다니는 이미지를 참고하길 바람


- 신뢰성 보장 -

TCP 프로토콜을 이용하여 데이터를 송수신하기 위해서는 먼저 3 Way handshake 연결을 맺어 데이터를 전송할 준비를 한다.그 과정에서도 각각의 세그먼트에 일련번호를 부여하여 데이터를 전송하고 성공적으로 수신하였다는 확인 응답 패킷을 수신해야 다음 데이터를 전송한다. 일정 시간 내에 확인 응답 패킷을 수신하지 못하는 경우 해당 패킷을 재전송하여 신뢰성 있는 데이터 전송을 보장하여 데이터 송수신 과정을 마치게 된다. 그 후에는 4 way handshake로 연결을 종료한다.


- 흐름 제어(Flow Control) -

송신 측과 수신 측의 데이터 처리 속도 차이를 해결하기 위한 수법이다. 수신 측이 송신 측보다 속도가 빠른 것은 아무 문제가 없지만, 송신 츽이 수신 측보다 속도가 빠르면 데이터가 유실될 가능성이 있다. 이를 병목 현상이라고 부른다. 데이터가 유실되면 지속적으로 유실된 데이터에 대한 데이터 재전송이 발생하게 되며 이에 대한 확인 응답이 다시 발생하게 된다. 따라서 이러한 위험을 줄이기 위해 송신 측의 데이터 전송량을 수신 측의 속도에 따라 적절히 조절하게 되는데 이러한 작업을 흐름 제어라고 한다.


- 혼잡 제어(Congestion Control) -

송신 측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법이다. 송신 측의 데이터는 여러 네트워크를 거쳐서 수신 측으로 전달되는데 만약 특정 데이터가 집중적으로 몰리는 경우 해당 라이터는 자신에게 온 데이터를 모두 처리할 수가 없게 된다. 그렇게 되면 호스트들은 데이터를 재전송하게 되어 결과적으로 혼잡만 가중시키게 되어 데이터 손실이 발생 한다. 결과로, 이러한 네트워크의 혼잡을 피하려면 전송 속도를 강제로 줄이게 되는 이를 혼잡 제어라고 한다.


TCP 프로토콜(2) 에서는 TCP 기능에 대해 더 자세히 다룹니다.

'[ ★ ]Study > Network' 카테고리의 다른 글

TCP 에코 서버 예제 (리눅스)  (0) 2017.06.11
TCP 프로토콜 (2)  (0) 2017.06.10
WSACleanup 함수(Windows)  (0) 2017.03.15
WSAStartup 함수 (Window)  (0) 2017.03.15
Network - closesocket함수  (0) 2017.03.13

댓글