Corgi Dog Bark

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네트워크 기초 (1)
    뜯고 또 뜯어보는 컴퓨터/네트워크(Network) 2022. 10. 5. 15:38
    반응형

    TCP와 UDP의 기본적인 정의, 특징, 비교


     TCP/IP 스택은 총 4단계로 이루어져 있는데, LINK계층 <-> IP 계층 <-> TCP/UDP 계층 <-> Application 계층으로 이루어져 있다. 이는 '인터넷 기반의 효율적 데이터 전송'을 해결하기 위하여, 설계된 패러다임으로 하나의 큰 프로토콜 설계로 해결한 것이 아닌 문제를 작게 만들어 해결한 것입니다.

    TCP/UDP 계층은 '전송 계층' 이라고 불리기도 하는데, TCP와 UDP 모두 연결된 다른 네트워크와 통신하기 위한 프로토콜로 정의할 수 있다. 결론적으로 말하면, IP의 상위계층에서 Host 대 Host의 데이터 송수신 방식을 약속한 것을 TCP 그리고 UDP라고 할 수 있겠다.

     

    TCP / UDP의 간략한 특징은 다음과 같다.

      TCP UDP
    연결 방식 연결형 서비스 비연결형 서비스
    패킷 교환 방식 가상 회선 방식 데이터그램 방식(메시지 방식)
    전송 순서 전송 순서 보장 전송 순서 보장 X
    수신 여부 확인 O X
    통신 방식 1:1통신 1:1 | N:N
    신뢰성 높음 낮음
    속도 느리다 빠르다

     

     

     

    TCP가 UDP 보다 빠른 이유


    UDP는 TCP와 달리 흐름 제어를 진행하지 않는다. 이 흐름 제어는 소켓의 연결과 종료, 그리고 데이터 송수신 전반에 걸쳐서 진행되기 때문에 TCP의 데이터 전송은 언제나 신뢰할 수 있다. 반면 UDP는 이러한 흐름 제어를 진행하지 않으니, 데이터의 전송을 신뢰할 수 없다. 하지만 UDP는 흐름 제어를 진행하지 않기 때문에 TCP보다 빠른 데이터의 송수신이 가능하다는 이점이 있다. 

     

     

     

    TCP 헤더의 각 필드와 그 역활 / UDP 헤더 구성


    [그림 1. TCP 헤더 구조 / Joinc]

    TCP 헤더 구조는 위의 그림과 같으며,

    • Source Port 와 Destination Port 는 각각, 송신측 수신측 의 통신 Port입니다. 
    • Sequence Num 은 송신 바이트 흐름의 위치를 가르키며, 패킷의 순서를 보장해줍니다.
    • ACK 는 Acknowledgement number 의 약자이며, 다음 받을 것으로 예상되는 옥텟의 순서 번호를 의미.
    • CodeBits 중, SYN, ACK, RST를 주목할 필요가 있는데, 
      • SYN 는 동기화를 위한 목적으로, Three-way HandShaking 을 위해 사용.
      • ACK 는 원격 호스트의 Sequence Num에 대한 응답으로 사용.
      • RST 는 설정시 즉시 연결을 끊는 용도로 사용.
    • CheckSum 은 데이터 변조의 가능성을 막기 위한 장치를 의미
    • UrgentPointer 는 긴급 메시지를 의미하며, 따로 패킷을 보내는 것이 아닌, 포인터의 시작위치를 의미.

    [그림2. UDP 헤더 구성]

    UDP 헤더의 구성은 다음과 같으며,

    • Source Port : 클라이언트의 포트번호
    • Destination Port : 목적지(서버)의 포트번호
    • UDP length : UDP 헤더와 User Data의 크기를 더한 전체 패킷의 크기
    • CheckSum : 데이터 변조의 가능성을 막기 위한 장치를 의미 / 만약 손상시, Application 계층으로 전달되지 않는다.

     

     

    TCP Checksum 동작 원리


    TCP가 Checksum 을 하는 이유는 송신도중 발생될 수 비트 오류를 검출하기 위해 체크섬을 사용한다. TCP CheckSum 의 작동 순서는 

    • TCP 체크섬 계산에 사용되는 헤더 및 데이터를 16비트 단위로 분할
    • 각각의 분할에 대하여, 합을 구하는 데, 만약 Carry 가 발생시, Warp Overlapped 를 계산한다.
    • 위의 1~2를 반복

     

     

     

    TCP ACK-SEQ 동작 원리


                     client                                server
                              ① 
             Send SYN seq=x   ---------------------------> Receive SYN segment
                                                                  |
                              ②                                   |
    Recevie SYN+ACK segment   <-------------------------- Send SYN seq=y, ACK x+1
                    |
                    |         ③
               send ACK y+1   --------------------------> Receive ACK segment

    TCP 에서 ACK 는 다음 데이타 옥텟의 순서번호를 의미하며, SEQ 는 데이터의 송신 바이트 흐름의 위치를 나타낸다. Squence Number는 TCP 세그먼트의 연속된 데이터 번호를 의미하며, ACK Number는 상대방으로 부터 받아야하는 다음 TCP 세그먼트 데이터 번호입니다.

     

     

     

    TCP 상태


    TCP 의 상태 전이에는 다양한 형태들이 존재하게 되는데, 다음과 같다.

    [그림 3. TCP 의 상태 천이도]

      상태 설명
    TCP 연결 설정 CLOSED 연결 상태가 아님.
    SYN-SENT 클라이언트가 능동적으로 SYN 세그먼트를 보내고, ACK을 기다리는 상태.
    LISTEN SYN 세그먼트를 기다리며, 수동적으로 개방 대기 중인 상태.
    서버가 SYN-SENT를 수신하면, SYN-ACK 송신후, SYN-RECEIVED로 전이
    SYN-RECEIVED SYN 세그먼트 수신후, ACK 응답 대기 상태
    TCP 연결 성립 유지 ESTABLISHED 연결 회선 성립 / 양방향 데이터 전송 가능
    TCP 종료 상태 CLOSE-WAIT TCP 가 어플리케이션 종료를 기다림
    LAST-ACK 서버는 자신이 송신한 FIN 세그먼트에 대한 ACK 대기
    FIN-WAIT-1 자신이 보낸 FIN 세그먼트에 대한 ACK를 기다리고, 상대측 FIN을 기다림
    FIN-WAIT-2 FIN 세그먼트를 송신하고, 상대측은 이에 대한 ACK 를 송신
    ClOSING 양쪽이 동시에 닫기로 한 상태

     

     

     

    TCP 3way-hand-shaking의 정의, 이유, 각 과정에서 일어나는 일


    [그림4. TCP 3-HandShaking .출처: https://smjeon.dev/etc/tcp-state/]

    TCP 3-HandWay Shaking의 경우, 다음과 같은 과정을 거치게 됩니다.

    1. 서버는 Listen 상태에서, 클라이언트의 연결 요청 신호를 대기 하게 되며,
    2. 클라이언트 측에서, SEQ 패킷을 설정하고, ACK 패킷은 0으로 초기화하여, 보내주게 된다.
    3. 서버는 클라이언트로 패킷을 받고, ACK = SEQ+1 로 설정하고, 다른 SEQ 번호를 설정하여, 2번 패킷을 클라이언트에 보내게 된다.
    4. 클라이언트는 서버로부터 패킷을 받은다음, 넘어온 ACK 를 확인한다. 이때 클라이언트가 서버측에 보낸 SEQ + 1 갑이 ACK 에 들어있으므로, 올바른 값임을 확인한다. 그리고 2에서 넘어온 ACK 를 자신의 SEQ 로 설정하고, SEQ + 1 의 값을 ACK 로 설정하여 서버로 보낸다. 이로써 3-HandWayShaking 이 완료되게 된다. 

     

     

     

    TCP 4way HandShaking과 다양한 연결종료 상태 / 우아한 종료


    TCP 의 연결종료는 4-Way HandShaking 과정을 거치게 되는데, 이는 다음과 같다.

                     client                                server
                                 ① 
             Send SYN seq=x      ---------------------------> Receive FIN segment
                                                                    |
                                 ②                                  |
             Recevie segment     <-------------------------- Send ACK x+1
    
                                 ①
     Receive FIN + ACK segment   <-------------------------- Send FIN seq=y, ACK x+1 
                    |
                    |            ②
             Send ACK y + 1      --------------------------> Receive ACK segment

    TCP 의 연결 종료는 서버, 클라이언트 둘다에서 발생할 수 있으므로, 종류를 나눌 필요가 있습니다. 이를 Active Close 와 Passive Close 로 나누는데, 

    • Active close: TCP 연결 해제 요청한 쪽,  트래픽을 전송(request)하고 정상적으로 전송 되었으면 연결을 종료하는 쪽
    • Passive close: TCP 연결 해제 요청을 받은 쪽, 트래픽을 받는 쪽(api 서버라고 치면 클라이언트에게 응답을 주는 쪽)

    위의 그림은 Client 가 Active close 상태임을 나타낸 것으로, Client 에서 연결 종료 요청을 보낸 것을 나타내었다.

    Active close

    1. 클라이언트는 FIN을 전송하고 FIN-WAIT-1 상태로 전환
    2. 클라이언트는 FIN에 대한 ACK를 수신하고 FIN-WAIT-2 상태로 전환
    3. 클라이언트는 FIN을 수신하면 ACK를 전송하고 TIME-WAIT 상태로 전환
    4. TIME-WAIT 상태로 2MSL 동안 남아있는다.
    5. 타이머가 만료되면 클라이언트는 CLOSED 상태가 된다.

    FIN-WAIT-2 상태에서는 일정시간이 지나면 TIME-WAIT로 전환된다.

     

    Passive close

    1. 서버는 FIN을 수신하고 ACK를 보낸다. CLOSE-WAIT 상태로 전환
    2. 프로세스로부터 passive close 명령을 받으면 서버도 FIN을 전송한다. LAST-ACK 상태로 전환
    3. LAST-ACK 상태로 있다가 클라이언트로부터 온 마지막 ACK를 수신하면 CLOSED 상태가 된다.

     

     

    Reference

    • https://www.ibm.com/docs/ko/aix/7.1?topic=management-transmission-control-protocolinternet-protocol
    • W. Richard Stevens 「TCP/IP  Illustrated」
    • 윤성우 「열혈 TCP/IP 소켓 프로그래밍」
    • https://www.joinc.co.kr/w/Site/TCP_IP
    • https://smjeon.dev/etc/tcp-state/
    • https://tech.kakao.com/2016/04/21/closewait-timewait/
     
     

     

    반응형

    댓글

Designed by Tistory.