IP, MAC 주소는 목적지를 정확히 찾아가기 위한 주소제공이 목적이었지만 4계층에서 동작하는 프로토콜은 목적지 프로세스를 정확히 찾아가고 패킷 순서가 바뀌지 않도록 잘 조합해 원래 데이터를 잘 만들어내기 위한 역할을 한다.
4계층 프로토콜(TCP, UDP)과 서비스 포트
인캡슐레이션, 디캡슐레이션 과정에 각 계층에서 정의하는 헤더가 추가되고 여러가지 정보가 들어간다.
이중 가장 중요한 정보는 아래와 같다.
- 각 계층에서 정의하는 정보 : 수신 측의 계층에서 사용하기 위한 정보
- 상위 프로토콜 지시자 정보 : 디캡슐레이션 과정에서 상위 계층의 프로토콜이나 프로세스를 찾기 위한 정보
TCP/IP 프로토콜 스택에서 4계층은 TCP, UDP가 담당한다. 4계층에서 패킷을 분할하고 조립하는데 이때 시퀀스번호와 ACK 번호를 사용한다.
그리고 4계층의 상위 프로토콜 지시자는 포트 번호이다.
여기서 포트(Port)란 IP 주소가 가리키는 PC에 접속할 수 있는 통로를 말하며 포트 번호 중 HTTP TCP 80, HTTPS TCP 443, SMTP TCP 25와 같이 잘 알려진 포트를 웰 노운(Well Known) 포트라고 한다. 이 포트들은 이미 인터넷 주소 할당 기구인 IANA(Internet Assigned Numbers Authority)에 등록되고 1023이하의 포트번호를 사용한다.
1024 ~ 49151의 범위는 Registered Port 라 하며 포트 번호를 할당받기 위해 신청하면 IANA에 등록되지만 공식 번호와 비공식 번호가 혼재되어있고 사설 포트 번호를 사용되기도 합니다.
동적, 사설, 임시 포트 범위는 49152~65535이고 IANA에 등록되어 있지 않아 사설용도나 클라이언트의 임시용도로 사용된다.
서비스 요청 시와 응답 시에는 출발지 IP와 목적지 IP가 반대가 되듯이 포트번호 또한 반대가 된다.
서버 측에서 클라이언트 측의 요청에 대한 응답을 할 때는 출발지 포트가 서버의 포트, 도착지 포트가 클라이언트의 포트가 되어 전송된다.
TCP
TCP는 신뢰할 수 없는 공용망에서도 정보유실 없는 통신을 보장하기 위해 세션을 안전하게 연결하고 데이터를 분할하고 패킷이 잘 전송되었는지 확인하는 기능이 있다.
패킷에 시퀀스 번호를 부여하고 잘 전송되었는지에 대해 ACK 번호를 통해 응답한다. 이때 한꺼번에 얼마나 보내야 수신자가 잘 받아 처리할 수 있는지 전송 크기까지 고려해 통신한다.
패킷 순서, 응답 번호
TCP에서 패킷에 순서를 부여하는 것을 시퀀스 번호, 응답 번호를 부여하는 것을 ACK 번호라고 부른다. 두 번호가 상호작용해 순서가 바뀌거나 중간에 패킷이 손실된 것을 파악할 수 있다.
대략적인 순서도는 아래와 같다.
- 보내는 쪽에서 패킷에 번호를 부여하고 받는 쪽은 이 번호의 순서가 맞는지 확인
- 받은 패킷 번호가 맞으면 응답을 주고 다음 번호의 패킷을 요청
윈도 사이즈와 슬라이딩 윈도
TCP는 패킷이 잘 전송되었는지 확인하기위해 별도의 패킷을 받음으로 통신 시간이 늘어나고 더군다나 송신자와 수신자가 먼 거리에 떨어져 있으면 왕복 지연시간(Round Trip Time)이 늘어나 응답을 기다리는 시간이 더 길어진다.
작은 패킷을 보내더라도 응답을 받아야만 하나 더 보낼 수 있기 때문에 이러한 점을 보완하고자 한꺼번에 많은 패킷을 보내고 응답은 하나만 받는 방식을 사용하는데 이는 많은 패킷을 보내 효율적이지만 네트워크 상태가 안좋으면 패킷 유실 가능성이 커지므로 적절한 크기를 결정해야한다.
이때 한 번에 데이터를 받을 수 있는 데이터 크기를 윈도 사이즈라고 하고 네트워크 상황에 따라 이 윈도 사이즈를 조절하는 것을 슬라이딩 윈도라고 한다.
TCP는 만약 데이터 유실이 발생하면 윈도 사이즈를 절반으로 줄이고 정상적인 통신이 되는 경우 서서히 하나씩 늘린다.
윈도 사이즈가 작아지면 데이터 통신 속도도 느려지기 때문에 회선을 제대로 사용하지 못하는 상황이 발생할 수 있다.
이때 회선 속도를 늘리거나 버퍼가 큰 네트워크 장비를 사용하거나 아래에서 설명할 3방향 핸드셰이크 방법을 사용하면 된다.
3방향 핸드셰이크
TCP에서는 유실없는 안전한 통신을 위해 통신 시작 전, 사전 연결작업을 진행한다. 패킷 네트워크에서는 동시에 많은 상대방과 통신하므로 정확한 통신을 위해서는 통신 전, 각 통신에 필요한 리소스를 미리 확보하는 작업이 중요하다.
이때 3번의 패킷을 주고받으면서 통신을 서로 준비하므로 3방향 핸드셰이크라고 한다.
진행 상황에 따라 상태 정보를 부르는 이름이 존재한다
- 서버 - Listen : 서비스를 제공하기 위해 클라이언트의 접속을 받아들일 수 있는 상태
- 클라이언트 - SYN-SENT : 통신을 시도하기 위해 Syn 패킷을 보내는 상태
- 서버 - SYN-RECEIVED : 클라이언트의 Syn을 받고 Syn, Ack로 응답하는 상태
- 클라이언트,서버 - ESTABLISHED : 서버-클라이언트 연결이 성공적으로 완료됨을 알리는 상태
SYN, ACK와 같이 TCP 헤더에 플래그 값을 포함시키는데 이를 TCP 플래그라고 한다.
총 6가지가 있으며 통신의 성질을 나타낸다.
- SYN : 연결 시작 용도, 연결 시작될 때 1로 표시
- ACK : 초기 SYN이 아닌 모든 패킷은 기존 메세지에 대한 응답이므로 1로 표시
- FIN : 데이터 전송을 마친후 정상적으로 양방향 종료 시 1로 표시
- RST : 연결 강제 종료를 위해 연결을 일방적으로 끊을 때 1로 표시
- URG : 긴급 데이터인 경우 1로 표시
- PSH : 서버 측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 즉시 전달할때
UDP
UDP는 앞서 말한 TCP의 특징(3방향 헨드셰이크, 윈도사이즈)을 가지고 있지 않다. 즉 데이터 전송을 보장하지 않는 프로토콜이므로 제한된 용도로만 사용된다.
보통 음성 데이터나 실시간 스트리밍과 같이 시간에 민감한 프로토콜이나 애플리케이션을 사용하는 경우나 사내방송이나 증권시세 데이터 전송에 사용되는 멀티캐스트처럼 단방향으로 다수의 단말과 통신해 응답을 받기 어려운 환경에서 주로 사용한다.
UDP는 중간에 데이터가 일부 유실되더라도 그냥 유실된 상태로 데이터를 처리해버린다. 만약 실시간 방송 중 1프레임이 잘려서 1프레임을 재전송한다면 화면이 멈춰버리기 때문에 사용자는 네트워크 품질이 떨어진다고 생각하게 된다.
정리
TCP | UDP |
연결 지향 | 비연결형 |
오류 제어 수행 | 오류 제어 수행X |
흐름 제어 수행 | 흐름 제어 수행X |
유니캐스트 | 유니캐스트, 멀티캐스트, 브로드캐스트 |
전이중 | 반이중 |
데이터 전송 | 실시간 트래픽 전송 |
'CS > 네트워크' 카테고리의 다른 글
서브넷과 게이트웨이 (0) | 2022.06.03 |
---|---|
ARP(Address Resolution Protocol) (0) | 2022.06.03 |
IP 주소란 (1) | 2022.06.02 |
MAC 주소란 (0) | 2022.06.02 |
유니캐스트, 멀티캐스트, 브로드캐스트, 애니캐스트 (0) | 2022.06.01 |