240912 CS세션 - L4 전송계층

LIHA·2024년 9월 11일
0

내일배움캠프

목록 보기
46/117
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주소 + 포트번호) 를 소켓 주소 라 한다.


9/24 수업 첨삭

4계층이 전송계층인 이유는 4계층이 전송을 가장 잘 하기 때문이다.

전송 프로토콜은 TCP도 있고 UDP도 있는데 그래서 4계층은 데이터의 기본 단위가 여러개인 계층이다. TCP - Segment, UDP - Datagram 등 여러가지이기 때문.

TCP는 연결 유지를 확인해가면서 전송하기 때문에 정확, 안정이 장점인 대신 느리다. UDP는 그냥 데이터를 뿌리는 것에 가깝다. 이 방식이 가장 좋은건 라이브방송 같은 것.

송신자가 너무 많은 트래픽을 보내면 수신자가 감당을 못할 수 있기 때문에 그 흐름을 제어해주는 역할도 한다.

네트워크의 포트는 논리적 포트이다. 우리가 꽂는 랜선은 물리적 포트.

TCP는 냉전시대 미 국방성에서 나왔다. 중계국이 파괴되면 통신 전체가 박살나는 회선교환방식의 단점 보완을 위해 데이터를 잘게 쪼개서 일부가 파괴되어도 우회로가 존재하도록 분산하여 전송하는 방식을 만들자는 '알파넷 프로젝트'에서 TCP가 탄생함.

  • TCP의 데이터 교환 방식 - 가상회선 패킷 교환 방식. 처음 전송할때의 순서를 지켜서, 미리 할당한 경로로 감.
  • UDP의 데이터 교환 방식 - 데이터그램 패킷 교환 방식. 전송 순서같은건 잊어버리고 어디든 가장 빠른 길로 감.

IP는 IP 단편화와 IP 주소지정이 크게 하는 일이다. 문제는 비신뢰성이자 비연결성 이라는 것.

패킷은 수신지 호스트 주소까징 전달했다고 전송 끝난 것 아님. 실행 중인 특정 어플리케이션 프로세스까지 전달되어야 한다.

패킷의 최종 수신 대상은 특정 어플리케이션 프로세스. 여기까지 전달되려면 특정 어플리케이션을 식별할 수 있는 정보가 포함되어 있어야 한다. 이 정보가 바로 포트.

0 ~ 1023번 까지는 웰 노운 포트, 시스템포트 라고 해서 정해진게 따로 있다. 80번이 HTTP, 443이 HTTPS 같은거.

포트는 1024 ~ 49151까지는 등록된 포트번호.
3306 MySQL, 6379 Redis 등 몇 가지 알려진게 있다.

49152 ~ 65535 까지는 동적 포트, 사설 포트, 임시포트.

포트번호는 16비트로 표현 가능하며, 사용 가능한 포트의 수는 2의 16승, 0~65535

4층은 이 여러가지 전송 프로토콜과 포트를 통해 필요한 정보를 7층까지 전송하는 것.

profile
갑자기 왜 춤춰?

0개의 댓글