전송 계층은 네트워크 계층의 한계를 보완하고 응용 계층(5,6,7계층)과의 연결점을 제공하는 계층입니다.
IP : IP 단편화와 IP 주소 지정
모든 패킷이 제대로 전송되었는지 일일이 확인하고 호스트 간에 연결을 수립하는 작업의 단점
일반적으로 패킷의 빠른 송수신과는 배치되는 작업입니다.
더 많은 시간, 대역폭, 부하가 요구되고, 이는 곧 성능상 악영향으로 이어질 수 있기 때문입니다.
TCP
신뢰성
금융 서비스처럼 반드시 신뢰성 있는 전송을 보장
UDP
빠름
동영상 스트리밍 서비스나 실시간 영상 통화처럼 한두 개의 패킷 손실은 감수하더라도 빠른 전송이 우선시되는 경우
TCP 중심의 전송계층
연결수립, 송수신중에 연결 유지
신뢰성 : 올바른 순서로 전송, 도착확인, 유실자료 재전송
요즘은 TCP 최적화가 많이 되서 TCP가 더 빠를 때도 있음
ip의 한계 극복은 TCP로 함
포트
전송 계층에서는 포트 번호를 통해 특정 애플리케이션을 식별합니다.
정확히는 패킷 내 수신지 포트와 송신지 포트를 통해 송수신지의 호스트의 애플리케이션을 식별합니다.
전송 계층의 핵심 프로토콜인 TCP와 UDP는 모두 포트 번호 필드인 송신지 포트 번호와 수신지 포트 번호를 포함합니다.
포트 번호는 16비트로 표현 가능하며, 사용 가능한 포트의 수는 2의 16승, 0번부터 65535번까지 존재합니다.
0번부터 65535번까지의 포트 번호는 번호의 범위에 따라 세 종류로 나뉩니다.
잘 알려진 포트(0~1023), 등록된 포트(1024~49151), 동적 포트(49152~65535)입니다.
권고사항
잘 알려진 포트 : 0번부터 1023번 자주 사용함 ex)20(21) FTP, 22 SSH, 23 TELNET, 53 DNS, 67(68) DHCP, 80 HTTP, 443 HTTPS
등록된 포트번호 : 1024번부터 49151번 잘 알려진 포트에 비해서는 덜 범용적이지만, 흔히 사용되는 애플리케이션 프로토콜에 할당하기 위해 사용 ex)3306 MySql, 6379 Redis
동적 포트, 사설 포트, 임시 포트 : 49152번부터 65535번 인터넷 할당 번호 관리 기관에 의해 할당된 애플리케이션 프로토콜이 없고, 특별히 관리되지 않는 포트 번호인 만큼 자유롭게 사용할 수 있습니다.
서버로서 동작하는 프로그램은 일반적으로 잘 알려진 포트와 등록된 포트로 동작하는 경우가 많습니다.
즉, 서버로서 동작하는 프로그램의 포트 번호는 사전에 암묵적으로 정해진 경우가 많습니다.
반면에 클라이언트로서 동작하는 프로그램은 동적 포트 번호 중에서 임의의 번호가 할당되는 경우가 많습니다.
포트 번호를 통해 실행 중인 특정 애플리케이션을 식별할 수 있다고 했습니다.
그렇다면 IP 주소와 포트 번호에 대한 정보가 함께 주어지면 특정 호스트에서 실행 중인 특정 애플리케이션 프로세스를 식별할 수 있습니다.
그래서 포트 번호는 일반적으로 다음과 같이 IP주소:포트 번호 형식(ex 192.168.0.15:8000)으로 IP 주소와 함께 표기되는 경우가 많습니다.
포트 기반 NAT
NAT란 IP 주소를 변환하는 기술이며,
주로 네트워크 내부에서 사용되는 사설 IP 주소와 네트워크 외부에서 사용되는 공인 IP 주소를 변환하는데 사용된다
이러한 변환을 위해 사용되는 것이 NAT 변환 테이블입니다.
NAT 변환 테이블에는 변환의 대상이 되는 IP 주소 쌍이 명시되어 있습니다.
NAT(Network Address Translation)는 사설 IP 주소를 공인 IP 주소로 변환하는 기술입니다. 사설 IP와 공인 IP를 일대일로 매칭 하는 방식도 가능하지만, 이는 많은 공인 IP 주소가 필요해 비효율적입니다.
이를 해결하기 위해 NAPT(Network Address Port Translation) 방식을 주로 사용합니다. NAPT는 포트를 활용해 하나의 공인 IP 주소를 여러 사설 IP 주소가 공유할 수 있도록 하여, 공인 IP 주소 부족 문제를 해결합니다. 포트 번호가 다르면 외부에서도 네트워크 내부의 호스트를 특정할 수 있기 때문에 다수의 사설 IP 주소를 변환할 수 있습니다.
NAT 테이블의 항목을 일대일로 대응해 NAT를 활용하는 것이 가능하기는 하지만, 이 방식만으로 많은 사설 IP 주소를 변환하기에는 무리가 있습니다.(ip 주소 부족)
포트 기반의 NAT를 NAPT(Network Address Port Translation)라고 합니다.
NAPT는 포트를 활용해 하나의 공인 IP 주소를 여러 사설 IP 주소가 공유할 수 있도록 하는 NAT의 일종입니다.
외부에서 사용할 IP 주소가 같더라도 포트 번호가 다르면 네트워크 내부의 호스트를 특정할 수 있기에 다수의 사설 IP 주소를 그보다 적은 수의 공인 IP 주소로 변환할 수 있게 됩니다.
이러한 점에서 NAPT는 공인 IP 주소 수 부족 문제를 개선한 기술로도 간주됩니다.
TCP
1) 연결 수립
2) 데이터 송수신
3) 연결 종료
TCP의 연결 수립과 종료를 이해하려면 가장 먼저 MSS라는 단위와 TCP의 세그먼트 구조를 이해해야 합니다.
MSS는 Maximun Segment Size의 약자로, TCP로 전송할 수 있는 최대 페이로드 크기를 의미합니다.
TCP 세그먼트 구조를 알아봅시다.
세그먼트 : 순서가 있음.
확인응답번호 : 도착한 데이터의 순서를 알려줌
송신지 포트와 수신지 포트는 필드 이름 그대로 송신지 또는 수신지 애플리케이션을 식별하는 포트 번호가 명시되는 필드입니다.
순서 번호란 송수신되는 세그먼트의 올바른 순서를 보장하기 위해 세그먼트 데이터의 첫 바이트에 부여되는 번호입니다.
확인 응답 번호는 상대 호스트가 보낸 세그먼트에 대한 응답으로 다음으로 수신하기를 기대하는 순서 번호가 명시됩니다.
윈도우는 수신 윈도우의 크기가 명시됩니다. 수신 윈도우란 한 번에 수신하고자 하는 데이터의 양을 의미합니다.
가운데 영어로 쓰여진 것들이 제어비트입니다. 현재 세그먼트에 대한 부가 정보를 나타냅니다.
신씬에크 는 알아두기
제어 비트
ACK는 세그먼트의 승인을 나타내기 위한 비트입니다. SYN은 연결을 수립하기 위한 비트입니다. FIN은 연결을 종료하기 위한 비트입니다.
순서 번호와 확인 응답 번호
순서 번호 필드와 확인 응답 번호 필드는 한 쌍으로 묶어서 기억(신뢰성)
순서 번호 필드에 명시되는 순서 번호는 세그먼트의 올바른 송수신 순서를 보장하기 위한 번호로, 세그먼트 데이터의 첫 바이트에 부여되는 번호입니다.
처음 통신을 위해 연결을 수립할 경우, 즉 제어 비트에서 연결을 수립하기 위한 비트인 SYN 플래그가 1로 설정된 세그먼트의 경우 순서 번호는 무작위 값이 됩니다. 이를 초기 순서 번호라고 합니다.
초기 순서 번호가 100이라면 가장 먼저 보내게 될 세그먼트의 순서 번호가 초기 순서 번호인 100이 됩니다.
연결 수립 이후 데이터를 송신하는 동안 순서 번호는 송신한 바이트를 더해 가는 형태로 누적값을 가집니다.
즉, 순서 번호는 초기 순서 번호 + 송신한 바이트 수가 되는 셈입니다.
확인 응답 번호
확인 응답 번호는 순서 번호에 대한 응답입니다.
즉, 확인 응답 번호는 수신자가 다음으로 받기를 기대하는 순서 번호입니다. 일반적으로 수신한 순서 번호 + 1로 설정합니다.
확인 응답 번호 값을 보내기 위해서는 제어 비트에서 승인을 나타내는 비트인 ACK 플래그를 1로 설정해야 합니다.
연결 수립
TCP의 연결 수립은 쓰리 웨이 핸드셰이크(Three-way Handshake)를 통해 이루어집니다.
연결 종료
쓰리 웨이 핸드셰이크를 통해 연결을 수립한 뒤 데이터 송수신이 끝났다면, 이제 연결을 종료해야 합니다.
TCP가 연결을 종료하는 과정은 송수신 호스트가 각자 한 번씩 FIN과 ACK를 주고받으며 이루어집니다.
TCP 상태
TCP는 연결형 통신과 신뢰할 수 있는 통신을 유지하기 위해 다양한 상태를 유지합니다.
상태는 현재 어떤 통신 과정에 있는지를 나타내는 정보입니다.
TCP는 상태를 유지하고 활용한다는 점에서 스테이트풀(statueful) 프로토콜이라고 부릅니다.
TCP의 다양한 상태는 간단한 명령어(netstat)로 확인할 수 있습니다.
UDP
UDP는 TCP와 달리 비연결형 통신을 수행하는 신뢰할 수 없는 프로토콜입니다.
UDP를 스테이트리스(stateless) 프로토콜의 일종.(상태를 유지하지도, 활용하지도 않는다)
그래서 연결 수립 및 해제, 재전송을 통한 오류 제어, 혼잡 제어, 흐름 제어 등을 수행하지 않습니다.
UDP는 비연결형 통신을 수행하는 신뢰할 수 없는 스테이트리스(stateless) 프로토콜입니다. 연결 수립 및 해제, 오류 제어, 혼잡 제어, 흐름 제어 등을 수행하지 않으며, 상태를 유지하지도 않습니다.
UDP 데이터그램 구조는 단순하며, 주요 필드는 다음과 같습니다:
송수신지 포트 필드: 송신지와 수신지의 포트 정보 포함.
길이 필드: 헤더를 포함한 데이터그램의 전체 크기.
체크섬 필드: 데이터그램의 정보 훼손 여부를 판단.
체크섬은 데이터그램의 수신 여부를 보장하지 않으며, UDP는 적은 오버헤드로 빠르게 패킷을 처리할 수 있는 장점을 가집니다.
게임 만들며 TCP를 사용하다보면 포트의 중요성을 알게 될 것이다
과제 주제) :
응용 계층이란?
TCP/IP 4계층 중 응용 계층에 대해 조사해주세요(아래 내용이 포함되면 좋을 것 같아요).
DNS
HTTP
5~7계층에서 유명한 프로토콜 정리 해두기. 면접에서도 개발할 때 도 중요함
'내일배움캠프_게임서버(202410) > 분반 수업 스텐다드' 카테고리의 다른 글
응용 계층(Application Layer) 조사 (0) | 2024.12.26 |
---|---|
전송계층 - TIL1223 (0) | 2024.12.23 |
OSI 4계층 전송 계층(Transport Layer) (0) | 2024.12.18 |
스텐다드 2차 과제 - 네트워크 계층 (0) | 2024.12.11 |
스텐다드 241211 (0) | 2024.12.11 |