🌱 ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [모두의 네트워크] 6장 - 전송 계층 : 신뢰할 수 있는 데이터 전송하기
    Reading/Tech 2022. 7. 13. 04:29
    🍀 목차
    LESSON 23 전송 계층의 역할
    LESSON 24 TCP의 구조
    LESSON 25 일련번호와 확인 응답 번호의 구조
    LESSON 26 포트 번호의 구조
    LESSON 27 UDP의 구조
    📌 Chapter Check-up

    이 장의 목표

    • 전송 계층의 역할을 이해한다.
    • 연결형 통신과 비연결형 통신을 이해한다.
    • TCP를 이해한다.
    • UDP를 이해한다.

     

    LESSON 23 전송 계층의 역할

    전송 계층의 두 가지 역할?

     물리 계층, 데이터 링크 계층, 네트워크 계층의 3 계층이 있으면 목적지까지 데이터를 보낼 수는 있다. 하지만 데이터 손상과 데이터 유실에는 아무런 체제가 없다.

     전송 계층은 오류 점검 기능이 있어 목적지에 신뢰할 수 있는 데이터를 전달해준다. 또한 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능도 있다.

     

    연결형 통신과 비연결형 통신?

    • 신뢰성/정확성 : 데이터를 목적지까지 문제없이 전달 => 연결형 통신(TCP : Transmission Control Protocol) 
    • 효율성 : 빠르고 효율적이게 전달 => 비연결형 통신(UDP : User Datagram Protocol) 

     

     연결형 통신은 상대편과 확인해 가며 통신하나, 비연결형 통신은 상대편을 확인하지 않고 일방적으로 데이터를 보낸다. 스트리밍 같은 동영상을 볼 때 비연결형 통신을 사용한다. 데이터가 약간 유실되어도 원활하게 보는 것이 중요하기 때문.

     

    LESSON 24 TCP의 구조

    TCP?

     연결형 통신 프로토콜. 캡슐화 시 TCP 헤더를 붙인다. TCP 헤더가 붙은 데이터는 세그먼트라고 한다. 

     

    TCP 헤더(기본 20 bytes ~ 최대 60 bytes).

    ① 출발지 포트 번호(Source Port) (16 bit) : 세그먼트의 출발지 포트 번호.

    ② 목적지 포트 번호(Destination Port) (16 bit) : 세그먼트의 목적지 포트 번호.

    ③ 일련 번호(Sequence Number) (32 bit) : 전송하는 데이터의 순서를 의미한다. 쪼개진 세그먼트의 순서를 파악하여 재조립하게 하는 역할을 한다.

    ④ 확인 응답 번호(Acknowledgement Number) (32 bit) : 데이터 수신자가 예상하는 다음 일련번호를 의미한다. 

    ⑤ 헤더 길이(HLEN, Offset) (4 bit) : 헤더 길이 필드이며 옵션 필드가 길이가 가변적이기에 필요하다.

    ⑥ 예약 영역(Reserved) (6 bit) : 미래를 위해 예약된 필드이다. 현재 사용되지는 않는다.

    ⑦ 코드 비트(TCP Flags) (6 bit) : 현재 세그먼트의 속성을 나타낸다. 혼잡 제어 기능을 수행한다.

    ⑧ 윈도우 크기(Window Size) (16 bit) : 한번에 전송할 수 있는 데이터의 양을 의미한다. 

    ⑨ 체크섬(Checksum) (16 bit) : 데이터를 송신하는 중 발생할 수 있는 오류를 검출하기 위해 필요하다.

    ⑩ 긴급 포인터(Urgent Pointer) (16 bit) : 1이라면 수신 측은 이 포인터가 가리키고 있는 데이터를 우선 처리한다. 

    ⑪ 옵션(Options) (최대 40 bytes) : TCP의 기능을 확장할 때 사용된다. 가변적이다.

     

     TCP 헤더는 목적지까지 데이터를 제대로 전송하기 위해 필요한 정보를 갖고 있다. 연결형 통신은 데이터를 전송하기 전 연결(connection)이라는 가상의 독점 통신로를 확보해야 한다. 이 역할은 TCP 헤더의 ⑦ 코드 비트(TCP Flags)에 기록된 연결의 제어 정보를 활용한다. 

     

    URG ACK PSH RST SYN FIN
    0 0 0 0 0 0

     

     코드 비트는 각 비트 별 역할은 다음과 같다.

    • URG(Urgent) : 상위 계층이 긴급 데이터라고 알려주면 1로 설정, 긴급 데이터의 마지막 바이트 위치가 Urgent Pointer로 가리켜진다.
    • ACK(Acknowledgement) : 확인 응답 번호 값이 세팅되었음을 알린다. 
    • PSH(Push) : 버퍼링 없이 즉시 7계층으로 바로 전송하는 비트이다.
    • RST(Reset) : 강제 연결 초기화 용도이다. 연결 확립(established)된 회선에 강제 리셋을 요청한다.
    • SYN(Synchronize) : 연결시작/회선개설 용도로 쓰인다. 
    • FIN(Finish) : 연결해제/회선종결 용도로 쓰인다.

     

     연결 확립때 필요한 비트는 SYN(연결 요청)과 ACK(확인 응답)이다.

     

    3-way 핸드셰이크?

    연결.

     연결(connection)은 SYN과 ACK를 사용하여 확립한다. 

     

    ① Computer 2에게 허가를 받아야 하므로, Computer1 -> Computer 2으로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.

     

    URG ACK PSH RST SYN FIN
    0 0 0 0 1 0

     

    ② Computer 2 Computer 1의 요청을 받고 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)을 보낸다. 동시에 Computer 2 Computer2 -> Computer 1으로 허가를 받기 위한 연결 확립 요청(SYN)을 보낸다.

     

    URG ACK PSH RST SYN FIN
    0 1 0 0 1 0

     

    ③ Computer 1 Coumputer 2를 허가한다는 응답으로 연결 확립 응답(ACK)을 보낸다.

     

    URG ACK PSH RST SYN FIN
    0 1 0 0 0 0

     

     이처럼 데이터를 보내기 전, 연결 확립을 위해 패킷 요청을 세 번 교환하는 것을 3-way Handshake라고 한다.

     

    연결 종료.

     연결을 종료할 때는 FIN과 ACK를 사용한다.

     

    Computer 1 -> Computer 2으로 연결 종료 요청(FIN)을 보낸다.

    URG ACK PSH RST SYN FIN
    0 0 0 0 0 1

     

    Computer 2 -> Computer 1으로 연결 종료 응답(ACK)을 보낸다.

    URG ACK PSH RST SYN FIN
    0 1 0 0 0 0

     

    ③ Computer 2 -> Computer 1으로 연결 종료 요청(FIN)을 보낸다.

    URG ACK PSH RST SYN FIN
    0 0 0 0 0 1

     

    Computer 1 -> Computer 2으로 연결 종료 응답(ACK)을 보낸다.

    URG ACK PSH RST SYN FIN
    0 1 0 0 0 0

     

     연결을 확립할 때는 SYN, 연결을 종료할 때는 FIN을 사용한다는 것을 기억. 


    LESSON 25 일련번호와 확인 응답 번호의 구조

    일련번호와 확인 응답 번호?

     3-way 핸드셰이크가 끝나고 실제 데이터를 보내고 받을 때는 TCP 헤더의 ③ 일련번호(Sequence Number), ④ 확인 응답 번호(Acknowledgement Number)를 사용한다.

     

    TCP 헤더.

     

     TCP는 데이터를 분할하여 보내는데 일련번호는 송신 측에서 수신 측에 '이 데이터가 몇 번째 데이터인지' 알려주는 역할을 한다.

     확인 응답 번호는 수신 측이 몇 번째 데이터를 수신했는지 송신 측에게 알려주는 역할을 한다. 그래서 이 번호는 다음 번호의 데이터를 요청하는 데도 사용된다. 10번 데이터를 수신하면 11번 데이터를 송신 측에 요청하는 것. 이것을 확인 응답이라고 한다.

     

    데이터 전송.

     

     3-way 핸드셰이크로 연결 수립이 이루어질 때, 이번 통신에 사용하는 일련번호 '3001'과 확인 응답 번호 '4001'이 결정된다.

    ① Computer 1 -> Computer 2로 200 bytes 데이터를 전송한다.

    ② Computer 2는 데이터를 수신하고 다음에 수신하고자 하는 데이터 번호를 확인 응답 번호에 넣는다. 이 데이터 번호는 3001(받은 일련번호) + 200(데이터 크기) = 3201이다. 다음은 3201번부터 보내 달라고 요청한다. 

    ③ Coumpter 1 -> Computer 2로 3201번부터 200 bytes의 데이터를 전송한다.

    ④ Computer 2는 데이터를 수신하고 다음에 수신하고자 하는 데이터 번호를 확인 응답 번호에 넣는다. 이 데이터 번호는 3201(받은 일련번호) + 200(데이터 크기) = 3401이다. 다음은 3401번부터 보내 달라고 요청한다.

    ⑤ ... 반복

     

     데이터가 항상 올바르게 전달되는 것은 아니므로 일련번호와 확인 응답 번호를 사용해 데이터 손상과 유실이 발생하면 데이터를 일정 시간 동안 대기 후 재전송하게 된다. 이것을 재전송 제어라고 한다. 

     

    윈도우 크기?

    위와 같은 통신은 세그먼트(데이터)를 하나 보낼 때마다 한 번 응답을 반환하는 방식이어서 효율이 높지 않다. 매번 확인 응답을 기다리는 대신 세그먼트를 연속해서 보내고 난 다음 확인 응답을 반환하면 효율이 높아진다. 

     받은 세그먼트를 일시적으로 보관하는 장소를 버퍼(buffer)라고 한다. 이때, 수신 측은 대량으로 데이터가 전송되면 보관하지 못하고 넘치는 데, 이를 오버플로(overflow)라고 한다.

     그렇기 때문에 버퍼의 한계 크기를 알고 있는 것이 중요한 데, 이 크기가 TCP 헤더의 ⑧ 윈도우 크기(Window Size) 값에 해당한다. 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타내는 것. 

     

     

     윈도우 크기의 초깃값은 3-way 핸드셰이크를 할 때 판단한다. 연결 확립(SYN)을 요청할 때 윈도우 크기가 같이 보내져 Computer 2는 Computer 1의 윈도우 크기를 알게 되고, Computer 2가 Computer 1에게 SYN+ACK 을 보낼 때, 윈도우 크기가 같이 보내져 Computer 1은 Compuer 2의 윈도우 크기를 알게 된다.

     

     이제 상대방 버퍼의 한계 값을 알았으니 Computer 1은 하나씩 보내던 전과는 달리 연속해서 세그먼트를 보내고 Computer 2는 그에 대한 확인 응답을 연속해서 보낸다. 차이점이 있다면 Computer 2의 확인 응답을 수신한 후가 아닌 수신 전 다음 세그먼트를 보내는 것이다. 


    LESSON 26 포트 번호의 구조

    포트 번호?

     데이터의 목적지가 어떤 프로그램인지 구분하는 역할. 전송 계층의 두 번째 역할이었던 "데이터의 목적지가 어떤 애플리케이션인지 구분하는 역할"을 담당한다. TCP 헤더의 ① 출발지 포트 번호,② 목적지 포트 번호로 애플리케이션을 구분할 수 있다. 

     포트 번호는 0 ~ 65535번을 사용할 수 있다. 

    • 0 ~ 1023 : 주요 프로토콜이 사용하도록 예약. 잘 알려진 포트(Well-Known Ports). 서버 측 애플리케이션에서 사용.
    • 1024 : 예약되어 있으나 사용되지는 않는 포트.
    • 1025 ~ : 랜덤 포트. 클라이언트 측의 송신 포트로 사용.

     

    애플리케이션 포트번호
    SSH 22
    SMTP 25
    DNS 53
    HTTP 80
    POP3 110
    HTTPS 443

     

     데이터 전송 시에는 상대방의 IP 주소가 필요했다면, 어떤 애플리케이션이 사용되고 있는지를 구분하려면 TCP 포트 번호가 필요하다. 창구 같은 역할로 포트 번호가 없다면 데이터가 도착해도 애플리케이션까지는 도착할 수 없다.

     웹 브라우저로 접속할 때 임의의 포트가 자동으로 할당되고, 애플리케이션은 해당 포트의 웹 브라우저로 응답 통신을 보낼 수 있게 된다.


    LESSON 27 UDP의 구조

     TCP가 신뢰성/정확성을 담당한다면 UDP는 효율성이다. 데이터를 효율적으로 빠르게 보내는 것이 중점이다. 

    UDP?

     TCP는 3-way 핸드셰이크로 연결이 확립된 후, 데이터를 전송하고 그때 확인 응답을 한다. 오류 발생이나 재전송, 포트 번호로 애플리케이션을 구분해 정확하게 전달하기 위한 기능도 있다.

     

    하는 일이 너무 많다!

     

     UDP는 비연결형 통신이라서 TCP처럼 시간이 걸리는 확인 작업을 일일이 하지 않는다.

     

    UDP 헤더?

     UDP 헤더가 붙은 데이터를 UDP 데이터그램이라고 한다.

     

    ① 출발지 포트 번호(16 bit) ② 목적지 포트 번호(16 bit)
    길이(16 bit) ④ 체크섬(16 bit)

     

     TCP 헤더의 신뢰성/정확성이 필요하지 않아 이 정보만으로 충분하다. UDP 세그먼트의 송신은 효율성과 빠른 속도를 중시하기 때문에 상대방을 확인하지 않고 연속해서 데이터를 보낸다. 

     또한 UDP를 사용하면 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있다. 이를 브로드캐스트(broadcast)라고 한다.

     

    UDP에서의 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 보내나, TCP는 목적지를 지정하지 않으면 안 되기 때문에 일괄 통신이 적합하지 않다. 

     

    📌 Chapter Check-up

    • 전송 계층의 역할이 무엇인가요? 신뢰할 수 있는 데이터를 순차적으로 전달하는 역할을 한다. 상위 계층들이 데이터 전달의 유효성/효율성을 신경 쓰지 않도록 한다. 데이터 중복/누락/오류 방지를 관리한다.
    • 연결형 통신과 비연결형 통신이 무엇인가요? 연결형 통신은 데이터 교환 전 연결을 맺고 데이터를 교환하는 동안 계속 연결을 관리하는 프로토콜이고, 비연결형 통신은 연결에 대한 초기화 과정이 없는 통신이다. 
    • TCP가 무엇인가요? Transmission Control Protocol, 전송 계층의 프로토콜이며 연결형 통신 방식이다. 신뢰할 수 있는 데이터 전송을 보장한다. 
    • UDP가 무엇인가요? User Datagram Protocol, 전송 계층의 프로토콜이며 비연결형 통신 방식이다. 일방적으로 데이터를 전달한다. 

     

    모두의 네트워크

    초보자와 비전공자를 위한 가장 쉬운 네트워크 입문서. 네트워크의 개념, 비트, 바이트부터 OSI 계층, 무선 랜 구조까지 160개의 일러스트와 유쾌한 캐릭터들의 대화로 설명해 그림책을 읽듯 쉽고

    www.aladin.co.kr

    미즈구치 카즈야(지은이), 이승룡(옮긴이), 『모두의 네트워크』, 길벗(2018), p.12~40, ISBN : 9791160505030.

    해당 게시글은 "모두의 네트워크"를 개인 학습용으로 정리한 내용입니다.

    댓글

🍀 Y0ungZ dev blog.
스크롤 버튼