240912 CS세션 - L4 전송계층

LIHA·2024년 9월 11일
0

내일배움캠프

목록 보기
46/54
post-thumbnail

OSI 7 Layer는 4층과 7층만 알면 된다는 우스개가 있다. 4층이 전송계층이고 7층이 어플리케이션 계층이라 사용자와 바로 마주하는 층이기 때문.

L4 전송계층

포트번호, 전송방식(TCP/UDP) 결정 -> 이 계층에서 송수신지의 포트번호를 담은 TCP 헤더를 붙여준다.

데이터 전송, 전송속도 조절, 오류발생 부분을 다시 맞춰주는 계층. 이 모든 작업은 데이터의 신뢰성을 위해 수행한다.

일반적으로 TCP 프로토콜을 주로 사용하고, 데이터를 전송받은 경우 이 계층에서 데이터를 합산하여 세션 계층(윗층. 5층)으로 보내준다.

  • TCP : 신뢰성, 연결지향적 - 전송단위: Segment
  • UDP : 비신뢰성, 비연결성 - 전송단위 : Datagram
  • 주요 장비 : L4 스위치 (L3 스위치도 있다)

두 지점간의 신뢰성 있는 데이터를 주고 받게 해주는 역할. (End-To-End Reliable Delivery)
-> 각 연결이 정확히 두개의 종단점을 가지고 있다. 그래서 멀티캐스팅이나 브로드캐스팅이 일어나지 않는다!

종단(Host)의 구체적인 목적지까지 데이터가 도달할 수 있도록 한다. 이때 이 목적지를 특정하기 위한 주소로 포트 번호를 사용한다.

TCP? UDP?

참고1
참고2
TCP와 UDP를 그림으로 설명한 것이 있어 가져와 보았다.

  • TCP
  • UDP

TCP는 데이터 송수신의 신뢰성이 높다는 특성이 있는 반면 UDP는 '보낸다'는 것에 집중되어 있다. 하여 신뢰성이 요구되는 어플리케이션은 TCP를 사용하고, 데이터를 빠른 속도로 전송하고 싶은 어플리케이션은 UDP를 사용한다.

이를테면 한타 타이밍, 킬 관여, 힐과 데미지 중 뭐가 더 빨리 들어왔는지가 아주 중요한 FPS나 MOBA 같은 장르는 예전에 UDP를 쓰는 것이 메타이던 시절이 있었다.

  • TCP의 큰 특징 중 하나는 전이중 방식을 사용한다는 것이다. 전송이 양방향으로 동시에 일어날 수 있다.
    UDP의 단위가 Datagram인 이유는 User Datagram Protocol이라서 이다.

'평화로운 TCP와 그저 주기에 바쁜 UDP' 라는 말이 있다. TCP의 한 가지 단점을 꼽자면 아무래도 전송 속도가 느리다는 것.

느린데도 불구하고 TCP는 왜 필요한걸까?

데이터를 패킷으로 쪼개서 주고받는 데에는 큰 문제가 있다. 컴퓨터가 패킷을 쪼개서 보낼 때 빠르다고 생각하는 회선으로 분리해서 보내기 때문에, '전부, 순서대로 들어왔는지 확인하기 힘들다' 는 문제점이 있다. IP 또한 데이터를 '정확한 주소로 보내는 것'에만 집중하는 프로토콜이라 데이터가 '정상적으로' 들어왔는지는 고려하지 않는다.

-> 그래서 TCP가 필요하다. TCP는 '데이터가 정확하게 들어왔는지'에 집중하는 프로로콜이기 때문이다. TCP가 안정성을 담당한다는 말이 이로 인한 것이다.

TCP/IP? 뭐야뭐야 둘이 무슨 관계야

TCP와 IP의 관계는 택배 기사와 트럭 내비의 관계와 유사하다고 한다. IP는 '정확한 길'을 찾는 것에 집중하고, TCP는 '정상적으로 전송'하는 것에 집중하기 때문. 하여 TCP는 정확하고 정상적인 전송을 위해 수신자가 수신 가능한 상태인지까지 확인하는 세심한 프로토콜인데, IP는 귀차니즘이라 그런 것이 없다. 이때 수신 가능 여부를 확인하는 것을 '님 네트워크에 연결되어 있음?' 이라고 물어서 TCP가 '연결형', IP가 '비연결형' 이라 불린다.
-> 관련하여 3way handshake 라는 것이 있다. TCP의 중요한 기법 중 하나이다. 세 번의 핑퐁을 거쳐 데이터 송신처와 수신처 모두 준비가 되었는지 확인하는 방식이라고.

포트? 프로세스 ID도 있는데 꼭 포트번호가 필요한 이유는?

참고1
Process ID라는 것이 있는데 Port 번호는 왜 알아야 하는걸까?
-> 프로세스 ID는 OS마다 다를 수 있다. 공통된 국제 표준같은 것이 없다.
-> 프로세스 ID는 외부 통신을 요청하는 호스트가 상대방의 PID를 정확히 알 수 없다.
-> 프로세스 ID는 OS에서 실행중인 프로세스에 할당한 것으로 포트번호와는 개념이 다르다.

그래서 외부 통신 시 상대방의 포트번호가 보이는 것. 이 포트가 왜 필요하냐면, 우리가 실행시키는 프로세스 중에는 외부와의 통신창구가 필요한 프로세스가 있다. 이때 특정 포트를 프로그램이나 서비스에 할당하는 것이 '바인딩'이다.
우리가 예전에 AWS나 가비아 도메인을 설정하면서 포트 번호를 바꿔치기 해줬던 것이 '포트 포워딩' 이고, 특정 포트를 할당하는 것을 '포트 바인딩' 이라고 한다. 단, 미리 약속된 번호들이 있으니 0~1023번 까지는 쓰지 말도록 하자. (Unix에서는 이런 well-known 포트 번호들이 /etc/services 파일에 저장되어 있다고 한다.)

이 그림에 따르면 데이터가 목적지까지 도착하기 위해서는 IP주소와 포트번호가 모두 필요하다. 하여 이 묶음 (IP주소 + 포트번호) 를 소켓 주소 라 한다.

profile
갑자기 왜 춤춰?

0개의 댓글