Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[6장] 전송 계층 : 신뢰할 수 있는 데이터 전송하기 #7

Open
icstuckyi opened this issue Feb 23, 2023 · 4 comments
Open
Assignees
Labels
6장 전송 계층

Comments

@icstuckyi
Copy link
Owner

icstuckyi commented Feb 23, 2023

Lesson 23. 전송 계층의 역할

  • 물리 계층, 데이터 링크 계층, 네트워크 계층 3계층이 있으면 목적지에 데이터를 보낼 수 있으나,
    데이터가 손상되거나 유실되더라도 아무것도 해 주지 않는다.
  • 전송 계층은 목적지에 신뢰할 수 있는 데이터를 전송하기 위해 필요한 계층이다.
  • 데이터가 제대로 도착했는지 확인하는 계층이다.

전송 계층의 두 가지 역할

  • 오류를 점검하는 역할: 전송 중 오류가 발생하면 데이터를 재전송하도록 요청
  • 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 역할

image

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

image

  • 연결형 통신
    • 신뢰성/정확성이 우선이므로 여러 번 확인하고 보내는 통신이다.
    • 데이터를 목적지에 문제없이 전달하는 것이 목적이다.
    • TCP(Transmission Control Protocol): 전송 제어 프로토콜
  • 비연결형 통신
    • 신뢰성/정확성보다는 효율성이 우선이므로 확인 절차 없이 일방적으로 보낸다.
    • 데이터를 빠르고 효율적으로 전달하는 것이 목적이다.
    • 예시) 동영상을 볼 때는 신뢰할 수 있고 정확한 데이터 전송보다 빠른 전송이 필요하다.
    • UDP(User Datagram Protocol): 사용자 데이터그램 프로토콜
@icstuckyi icstuckyi added the 6장 전송 계층 label Feb 23, 2023
@icstuckyi
Copy link
Owner Author

icstuckyi commented Feb 23, 2023

Lesson 24. TCP의 구조

TCP(Transmission Control Protocol)

  • 신뢰성과 정확성을 우선으로 하는 연결형 통신 프로토콜.
  • 전송 계층에서 TCP로 전송할 때 붙이는 헤더를 TCP 헤더라고 하며, 이 TCP 헤더가 붙은 데이터를 세그먼트 라고 한다.

image

연결(Connection)

  • TCP 통신에서 정보를 전달하기 위해 사용되는 가상의 통신로.
  • 데이터를 전송하기 전에 연결(커넥션)을 확립하고, 그 이후에 데이터를 전송할 수 있다.

코드 비트

  • TCP 헤더의 107번째 비트부터 112번째 비트까지의 6비트로 연결의 제어 정보가 기록되는 곳.
  • 초깃값은 0, 비트가 활성화되면 1이 된다.
  • 연결을 확립하려면 이 중 SYN(연결 요청)과 ACK(확인 응답)가 필요하다.

image

3-way handshake

image

  • 연결은SYNACK를 사용하여 확립할 수 있다.
  • 신뢰할 수 있는 연결을 위하여, 데이터를 전송하기 전에 패킷을 교환하여 세 번 확인한다. (= 3-way handshake)
  • 이때 확립을 위해 코드 비트의 SYNACK가 1로 활성화된다.
  • 데이터를 전송한 후에는 연결을 끊는 요청을 교환하는데, 이 때는 FIN(연결 종료)과 ACK를 사용한다.
  • 연결을 종료할 때는 코드 비트의 FINACK가 1로 활성화된다.

image

@keiwin49
Copy link
Collaborator

keiwin49 commented Feb 24, 2023

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

  • 3-way 핸드셰이크가 끝나고 실제 데이터를 보내거나 받을때는 TCP 헤더의 두개 번호 사용
    • 일련번호(sequence number) : TCP가 보내는 "분할된 데이터"가 "몇번째 데이터"인지 알려주는 역할
    • 확인 응답 번호(acknowledgement number) : 수신 측이 몇번째 데이터를 수신했는 지 송신 측에 알려주는 역할

출처 : https://velog.io/@majaeh43/모두의-네트워크-0w8k7ou8

  • 일련번호, 확인 응답번호 사용 예시

    • 일련번호와 확인 응답 번호를 사용해서 데이터가 손상되거나, 유실된 경우에는 재전송 => 재전송 제어 (일정시간 대기 후 재전송)
      image
  • 위 예시는 세그먼트(데이터) 하나를 보낼 때마다 확인 응답을 한번 반환하는 통신 -> 매번 응답을 기다리면 효율이 낮음

  • 데이터를 여러번 보내고 확인 응답을 반환하게 되면 효율이 높아짐

    • 수신 측은 "버퍼(buffer)"에 받은 세그먼트를 일시적으로 보관
    • 버퍼의 크기보다 많은 데이터가 전송되어 넘쳐버리는 것 = 오버플로(overflow)
    • 오버플로가 발생하지 않도록 버퍼의 한계 크기(= 윈도우 크기, window size)를 TCP 헤더에 전달
      • 윈도우 크기 = 얼마나 많은 용량의 데이터를 저장해 둘 수 있는가 = 확인응답 없이 연속해서 송수신 할 수 있는 데이터 크기
      • 3-way 핸드셰이크를 할 때 윈도우 크기 판단
        image
        image
        image

@keiwin49
Copy link
Collaborator

keiwin49 commented Feb 24, 2023

Lesson 26. 포트 번호의 구조

  • 전송 계층의 역할 2가지
    • 연결 확립(3-way 핸드셰이크), 재전송 제어(일련번호/확인응답번호), 윈도우 제어(버퍼)로 TCP는 데이터 정확하게 전달
    • 전송된 데이터의 목적지가 어떤 애플리케이션인지 구분하는 역할
  • TCP 헤더의 포트 넘버로 목적지 구분
    • 출발지 포트 번호(source port number)
    • 목적지 포트 번호(destination port number)
  • 포트 번호 범위 : 0~65535
    • 0~1023번 : 잘 알려진 포트(well-known ports)
    • 1024번 : 예약되어있지만 사용되지 않는 포트
    • 1025번 이상 : 랜덤 포트 -> 클라이언트 측의 송신 포트로 사용됨
  • 데이터를 전송할 때는 상대방의 IP 주소가 필요
  • 어떤 애플리케이션이 사용되고 있는지 구분하려면 TCP 헤더의 포트번호가 필요
  • 웹 브라우저로 접속할때는 웹 브라우저에 임의의 포트가 자동 할당 되어 클라이언트측은 포트 번호를 정하지 않아도 무방

@keiwin49
Copy link
Collaborator

keiwin49 commented Feb 24, 2023

Lesson 27. UDP의 구조

  • TCP의 역할 : 신뢰할 수 있는 데이터를 상대방에게 전달하는 것(복잡한 확인 절차를 거침)

  • UDP는 비연결형 통신이기 때문에 TCP처럼 확인 작업하지 않음

    • 효율성을 중요시 하는 프로토콜 -> 데이터가 원활하게 전달되어야하는 동영상 스트리밍 서비스 등에 적합
  • UDP 헤더가 붙은 데이터 = UDP 데이터그램

    • 정밀한 확인이 필요하지 않아 이정도 정보로도 충분
      image
      image
  • UDP는 일일히 확인 응답을 받지 않아도 되기 때문에 랜에 있는 컴퓨터나 네트워크에 있는 장비들에게 데이터 일괄 송신(브로드캐스트(broadcast)) 가능
    image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
6장 전송 계층
Projects
None yet
Development

No branches or pull requests

2 participants