본문 바로가기
네트워크

[네트워크] TCP(Transmission Control Protocol)에 대한 정리

by 시스코킹 2020. 9. 14.
반응형

TCP/IP

TCP 의 약자가 무엇인가?

Transmission Control Protocol- 전송 제어 프로토콜

 

TCP와 UDP의 공통점과 차이점은?

공통점으로는 포트번호를 이용해 주소를 지정한다는 점과, 데이터 오류검사를 위한 체크섬이 있다는 점이고,

차이점은 TCP는 연결형이 성공해야 통신이 가능한 연결형프로토콜이고, 데이터의 재전송이 존재하기에 신뢰성 있는 데이터 전송을 하며 유니캐스트 통신을 합니다.

UDP는 비연결형프로토콜로 데이터의 경계를 구분하며 비신뢰성데이터 전송, 유니캐스트,멀티캐스트,브로드캐스트 통신을 한다는 차이점이 있습니다.

 

TCP/IP에 대해서 아는대로 설명해보세요.

(TCP/IP를 왜 사용하는가? IP만 있어도 상호간에 통신이 가능한데 왜 굳이 TCP/IP를 쓰는가?)

TCP/IP는 패킷통신방식의 인터넷 프로토콜인 IP와 전송제어프로토콜 TCP로 이루어 져 있습니다.

IP는 가장 효율적인 방법으로 데이터의 작은 조각들을 되도록 빨리 보내는 일을 합니다.

패킷 전달 여부를 보증하지 않고 패킷을 보낸 순서와 받는 순서가 다를 수 있습니다.

TCP는 IP위에서 동작하는 프로토콜로 데이터의 전달을 보증하고 보낸 순서대로 받게 해줍니다.

순서가 맞지 않거나 중간에 빠진 부분을 점검하여 다시 요청하는 일을 담당합니다.

HTTP,FTP,SMTP 등 TCP를 기반으로 한 많은 어플리케이션 프로토콜들이 IP위에서 동작하기 때문에 묶어서 TCP/IP라고 하며 네트워크 인터페이스 계층(물,데), 인터넷계층(네), 전송계층(전), 응용계층(세,표,응) 4계층으로 구성되어있습니다.

 

왼쪽 OSI 7계층 VS 오른쪽 TCP 4계층

 

TCP의 특징은 무엇일까?

연결형 서비스로 가상 회선 방식을 제공한다.

3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking(FIN 및 그에대한 FIN-ACK의 2 쌍(4개 세그먼트)으로)을 통해 연결을 해제한다.

 

-흐름제어: 데이터의 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지, 수신자가 윈도우 값을 통해 수신량을 정할 수 있다.

-혼잡제어: 네트워크 내의 패킷 수가 넘치게 증가하지 않게 방지, 정보의 소통량이 과다하면 패킷을 조금만 전달하여 혼잡 방지

-높은 신뢰성을 보장한다.

-UDP보다 속도가 느리다.

-전이중(Full-Duplex), 점대점(Point to Point) 방식.

 

 

흐름제어: Flow control (호스트와 호스트)

송신측과 수신측의 데이터처리 속도 차이를 해결하기 위한 기법

 

-Stop and wait 방식:

매번 전송한 패킷에 대해 확인응답을 받아야만 그 다음 패킷을 전송하는 방법

 

-슬라이딩 윈도우 기법:

수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하여 제어하는 기법이다.

 

혼잡제어: Congestion control (호스트와 네트워크)

송신측의 데이터 전달과 네트워크의 처리속도  차이를 해결하기 위한 기법

 

-slow start

윈도우 크기를 2배로 늘린다.

그러다 혼잡현상이 발생하면 창 크기를 1로 떨어뜨린다.

그 후 혼잡현상이 발생했던 창 크기의 절반까지는 이전처럼 지수 함수 꼴로(2배로) 창 크기를 증가시키고

그 이후부터는 완만하게 1씩 증가시킨다.

 

-AIMD(Additive Increase / Multicative Decrease)

이 방식은 AIMD라고 불리는 방식이다.

처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 창 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시켜가면서 전송하는 방법이다.

만일 패킷 전송을 실패하거나 일정한 시간을 넘으면 패킷을 보내는 속도를 절반으로 줄이게 된다.

 

-Fast Retransmit(빠른 재전송)

빠른 재전송은 TCP의 혼잡 조절에 추가된 정책이다.

패킷을 받는 쪽에서 먼저 도착해야 할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보낸다.

단, 순서대로 잘 도착한 마지막 패킷의 다음 패킷의 순번을 ACK 패킷에 실어서 보낸다.

따라서 중간에 패킷 하나가 손실되게 되면 보내는 측에서는 순번이 중복된 ACK 패킷을 받게 되고, 이것을 감지하는 순간 문제가 되는 순번의 패킷을 재전송해 줄 수 있다.

빠른 재전송은 중복된 순번의 패킷을 3개 받으면 재전송을 한다.

그리고 이런 현상이 일어나는 것은 약간 혼잡한 상황이 일어난 것이므로 혼잡을 감지하고 창 크기를 줄이게 된다.

 

-Fast Recovery(빠른 회복)

빠른 회복 정책은 혼잡한 상태가 되면 창 크기를 1로 줄이지 않고 반으로 줄이고 선형 증가시키는 방법이다.

빠른 회복 정책까지 적용하면 혼잡 상황을 한번 겪고 나서부터는 순수한 합 증가/곱 감소 방식으로 동작한다.

 

 

 

Three Way Handshake

그림- Three Way Handshake 과정

  1. 상대에게 통신을 하고 싶다는 메시지를 보낸다. (SYN)

  2. 상대는 그 메시지에 대한 응답 + 나도 통신 준비가 되었다는 메시지를 보낸다. (SYN-ACK)

  3. 2번에서 받은 메시지에 응답을 보낸다. (ACK)

 

TCP 헤더구조

그림- TCP 헤더 구조

Source port (16 비트)

송신 포트

 

Destination port (16 비트)

수신 포트

 

Sequence number (32 비트)

순서번호, 순서가 어긋나지 않도록 함

 

Acknowledgment number (32 비트)

확인 응답 번호, 실제 수신여부확인 및 그 다음 순서를 지시함

 

Data offset (4 비트)

TCP 헤더의 크기 값

 

Header Length (4비트)

TCP헤더의 크기 값

 

Reserved (3 비트)

미래에 사용하기 위해 남겨둔 예비 필드이며 0으로 채워져야 한다.

 

Flags (9 bits) (혹은 Control bits)

NS : ECN-nonce 은폐 보호

CWR : 호스트가 ECE 플래그가 포함된 TCP 세그먼트를 수신했으며 혼잡 제어 메커니즘에 의해 응답했음을 알리는 역할.

ECE : ECN-Echo는 다음을 나타낸다

-SYN = 1 : TCP 상대가 명시적 혼잡 통지(Explicit Congestion Notification, ECN)가 가능함을 의미.

-SYN = 0 : IP 헤더 셋에 혼잡 경험(Congestion Experienced) 플래그가 설정된 패킷이 정상적인 전송 중에 수신되었다는 것을 의미.

URG : Urgent pointer 필드의 값이 유효함을 나타냅니다.

ACK : 클라이언트가 보낸 최초의 SYN 패킷 이후에 전송되는 모든 패킷은 이 플래그가 설정되어야 합니다.

PSH : 수신 애플리케이션에 버퍼링된 데이터를 푸시해 줄지 여부를 물어보는 역할입니다.

RST : Connection ResetSYN : 동기화 시퀀스 번호. 양쪽이 보낸 최초의 패킷에만 이 플래그가 설정되어 있어야 합니다.

FIN : 남은 송신측 데이터 없음

 

Window size (16 비트)

수신 윈도의 크기. 해당 세그먼트의 송신측이 현재 수신하고자 하는 윈도 크기(기본 단위는 바이트). acknowledgment 필드의 시퀀스 번호보다 큰 값이어야 한다.

0이면 송신 프로세스의 전송 중지

 

Checksum (16 비트)

헤더 및 데이터의 에러 확인을 위해 사용되는 16 비트 체크섬 필드

데이터의 변형, 분실 오류를 방지

 

Urgent pointer (16 비트)

URG 플래그가 설정된 경우, 이 16 비트 필드는 시퀀스 번호로부터의 오프셋을 나타낸다. 이 오프셋이 마지막 긴급 데이터 바이트를 가리킨다.

 

Options (가변 0–320 비트, 32의 배수)

TCP 헤더의 정보를 좀 더 확장시키고자 할 때 사용합니다.

 

Padding

TCP 헤더 패딩은 TCP 헤더의 종료 지점과 데이터의 시작 지점을 32비트 단위 길이에 맞추기 위해 사용되며 패딩의 값은 0입니다.

혼잡제어 -Slow Start ㅇ 혼잡(Congestion)을 피하기 위한 TCP 알고리즘 중의 하나 ㅇ 연결설정 초기에 이미 혼잡한 환경이 있을 수 있기 때문에, - 혼잡 회피를 위해 초기에 조심스럽게 네트워크에 데이터 송출량을 점증시켜가며 조사함 . TCP 발신자가 적절한 윈도우 크기를 신속하게 찾게하는데 도움을 줌 ㅇ 느린 시작의 단점 : 연결 초기에 다소간 지연 있게됨

윈도우 크기를 2배로 늘린다.

그러다 혼잡현상이 발생하면 창 크기를 1로 떨어뜨린다.

그 후 혼잡현상이 발생했던 창 크기의 절반까지는 이전처럼 지수 함수 꼴로(2배로) 창 크기를 증가시키고

그 이후부터는 완만하게 1씩 증가시킨다.

 

 

TCP 속도:

TCP 속도 = Window Size * (1/RTT)

RTT(Round trip delay) = Application이 Ack를 받은 시간 - Window Size만큼의 데이터를 보내기 시작한 시간 (단위 초)

 

UDP 특징에 대해 간단한 설명:

-비연결형 서비스로 데이터그램 방식을 제공한다.

-정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.

-UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.

-신뢰성이 낮다TCP보다 속도가 빠르다.

반응형

댓글