[OSI 모델 Layer 4] - 4계층의 역할과 개요

Jin Hur·2022년 1월 18일
0

네트워크(Network)

목록 보기
19/24

reference: "하루 3분 네트워크 교실" / 아미노 에이지

요약

  • 4계층은 신뢰성이 높은 전송을 수행한다.
  • 확인응답, 흐름제어를 수행하고 신뢰성이 높은 데이터 전송을 실시한다.
  • 어느 애플리케이션에 도달할 지를 판별하기 위해 포트 번호를 사용한다.
  • 4계층은 TCP와 UDP 두 가지 프로토콜이 있으며, 둘 중 한 개를 사용하여 데이터 전송을 수행한다.

  • TCP에서의 데이터 전송에는 커넥션 확립이 필요하다.
  • 커넥션은 가상의 데이터 통로이다.
  • 커넥션의 확립은 쓰리웨이 핸드쉐이크 방식으로 수행한다.
  • 큰 데이터는 MSS로 분할해서 전송한다.
  • 전송되는 데이터에는 순서대로 번호가 부여된다.

4계층의 역할(TCP 프로토콜): "3-way 핸드쉐이크를 통한 커넥션", "에러 복구", "흐름 제어", "애플리케이션 식별"

  • 1계층: '통신매체가 연결되어 있는 상대에 대한 신호 전달'
  • 2계층: '신호를 주고 받을 수 있는' 상태일 때 '세그먼트 내에서 어떻게 데이터 송수신 하는지'
  • 3계층: '세그먼트(==네트워크) "사이"에서 어떻게 데이터를 송수신 하는지" / IP 주소와 라우팅

=> 1~3계층의 역할: 수신처 컴퓨터에 데이터를 보내는 것

4계층 이상의 상위 계층에서는 '데이터를 운반'하는 직접적인 동작은 하지 않는다.
4계층 이상의 상위 계층은 전달한, 전달된 데이터에 대한 필요한 처리를 하는 것. 즉, 데이터를 전달하는 것은 3계층까지의 역할이고, 전달 전과 전달 후에 데이터 통신을 위해 필요한 처리를 하는 것.

1. 에러 복구 (by 확인 응답)

구체적으로 '신뢰성이 높은(에러가 적은) 데이터 전송을 하기 위한 처리를 한다. 즉 3계층까지는 수신처 자체가 존재하지 않거나 데이터가 도중에 손실됐거나 에러에 의해 파기 됐다는 등의 문제들은 신경 쓰지 않는다는 것이다.
ex) 4계층의 대표적인 역할 중 하나는 에러 복구

"도달하지 않은 경우에 다시 보냄으로써 에러를 없었던 것으로 한다."
1) 데이터를 수신하면, 송신처에게 수신한 것을 통지한다(확인 응답). 그렇게 함으로써 송신처는 수신처가 데이터를 받은 것을 확인할 수 있다.
2) 도중에 에러 발생으로 데이터가 없어져서 확인 응답이 돌아오지 않을 경우, 다시 보냄으로써 에러를 복구한다.
3) 확인 응답을 다시 기다린다.
=> 도달하지 않은 경우 한번 더 송신

2. 흐름 제어

처리 능력을 넘어선 정보를 받았을 때, 그것을 다 처리할 수 없어서 파기

처리할 수 없는 데이터가 넘쳐 흐르는 것을 방지하는 건데, '넘치는 것을 오버플로우(over flow)라고 한다. 이 오버플로우를 막아주기에 '흐름 제어'라고 부른다.

3. 애플리케이션 식별

통신에서 데이터를 주고받는 컴퓨터 소프트웨어를 애플리케이션이라고 부르는데, 실은 데이터를 주고받는 것은 애플리케이션이다.

어느 애플리케이션이 송신한 데이터인지 어느 애플리케이션이 수신한 데이터인지를 결정하기 위해서 포트 번호라는 것이 부여된다. (가상의 출입구)
각 애플리케이션에서는 이것이 장치되어 있어서 거기에 데이터를 보낸다고 생각하는 것이 이해하기 쉽다. 컴퓨터까지 도달한 데이터는 이 포트 번호를 근거로 그 데이터가 사용될 애플리케이션에 전달.


4계층 프로토콜: TCP vs UDP

TCP와 UDP는 각각이 가진 장점과 단점이 동전의 양면과 같은 관계이다. 그래서 송신할 데이터의 내용이나 상황에 따라 어느 한 쪽을 사용한다.

source: https://diy-multitab.tistory.com/27

TCP

1) 연결을 위해 할당되는 논리적인 경로가 존재
2) 데이터 경계(Boundary) 없음 : Stream 형태
3) 전송 순서가 보장
4) 분실이 일어나면 책임지고 다시 전송
5) 물건을 주고 받을 상황이 아니면 일부만 보내거나, 보내지 않음 : 흐름/혼잡 제어
6) 고려할 것이 많기에 속도가 상대적으로 느림

UDP

1) 연결 개념이 없음
2) 데이터 경계(Boundary) 있음 : Message 형태
3) 전송 순서가 보장되지 않음
4) 분실에 대한 책임이 없음
5) 일단 보내고 생각 : send()가 블로킹되지 않음
6) 단순하기에 속도가 상대적으로 빠름


커넥션과 세그먼트 분할

"연결 시 3-way handshake, 연결 해제 시 4-way handshake 진행"

TCP에서 애플리케이션 간의 송수신을 하는 데이터의 길을 '커넥션'이라 한다.

source: https://jeonghoon.netlify.app/Network/layer_4/

이는 3계층의 라우터 part에서 나온 '경로'와는 다른 의미이다. TCP에서 만들어진 통신로는 가상적인 통신로라고 한다. 사전에 전용 통신로를 확보해 둠으로써 확실하게 데이터를 보내는 것이다.

3계층까지의 역할로 수신처 컴퓨터까지는 데이터를 보낼 수 있다. 하지만 (1) 상대가 존재하지 않을 수도 있고, (2) 상대는 존재하지만 수신할 준비가 안되어 있을 수도 있다. 또한 (3) 수신은 가능한데 바빠서 데이터를 처리 못할 수도 있다. 이런 여러가지의 이유로 '컴퓨터까지 데이터가 도달한다'는 것과 '데이터를 확실하게 주고받는 것'은 별개의 문제이다.
(1~3계층)'컴퓨터에 도달한다.' != (4계층)'확실하게 주고 받는다.'

'여보세요'라는 서로의 인사말로 '확실하게 통신할 수 있다=통신로가 연결되어 있다'는 것을 확인할 수 있다. 그렇게 해서 실제로 케이블이 어떻게 연결되고, 어느 라우터를 통해 수신처까지 도달한 것인지 와는 상관없이, '실제'의 '통신로'가 아닌, 송신측과 수신측 사이에 '가상'의 '통신로'가 생긴다고 여기는 것. 이 가상의 통신로를 만들어 내는 것을 커넥션 확립이라 한다.

커넥션 확립

커넥션을 확립하기 이해서는 상대가 데이터 전송을 허가해 주어야 한다. 따라서 확실한 데이터 전송을 하는 통신로를 확보하기 위해 상대에게 데이터 전송의 허가 요청을 보내는 것이다.
그리고 요청을 받은 상대는 그것에 대한 허가를 송신처에게 알린다. 이것으로 데이터가 상대에게 바르게 전달된 것을 확인할 수 있다. 즉, 통신로가 확보되었다는 뜻이다.

source: https://evan-moon.github.io/2019/11/10/header-of-tcp/

6비트의 플래그에 다음과 같은 대표적인 3가지 의미를 담을 수 있다.

  • SYN: 상대에 대한 접속 요청인 것을 나타냄.
  • ACK: 상대의 통신 응답인 것을 나타냄.
  • FIN: 접속을 종료하는 것을 나타냄.

반대로 수신처 측이 송신처에게 데이터 전송 허가 요청을 보낸다. 그것에 대해 송신처도 데이터 전송 허가를 보내고, 이로써 쌍방향이 통로가 확보된다.

이렇게 해서 TCP는 '쌍방향'으로 데이터를 주고받을 수 있는 커넥션을 확립할 수 있다. 앞서 설명한대로 3번 주고받아야 하기에 3방향(3way)의 악수(handshake), 쓰리웨이 핸드쉐이크라고 불린다.

source: https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake

세그먼트 분할과 시퀀스 번호

TCP는 애플리케이션으로부터 받은 데이터(메시지)(5계층 PDU)를 세그먼트(4계층 PDU)로 캡슐화한다.
캡슐화할 때, 한 개의 데이터를 MSS(Max Segment Size)로 분할하는데, 한 개의 데이터가 복수의 세그먼트가 되는 것이다. 그리고 각 세그먼트에 번호를 부여하고 이것을 "시퀀스 번호"라고 한다.

0개의 댓글

관련 채용 정보