TCP 와 UDP
4계층 프로토콜, 여러 애플리케이션 프로세스 중 통신해야 할 목적지 프로세스를 정확히 찾아가고 패킷 순서가 바뀌지 않도록 잘 조합해 원래 데이터를 잘 만들어내기 위한 역할을 한다.
4계층 프로토콜의 목적
(목적지 주소가 아니라)애플리케이션에서 사용하는 프로세스를 정확히 찾아가고 데이터를 분할한 패킷을 잘 쪼개 보내고 잘 조립하기.
4계층 프로토콜(TCP, UDP)과 서비스 포트
인캡슐레이션, 디캡슐레이션 과정에서 가장 중요한 두 가지 정보는?
- 각 계층에서 정의하는 정보
- 수신 측 동일 계층에서 사용하기 위한 정보
- 4계층에서는 ACK 번호 시퀀스 번호
- 상위 프로토콜 지시자 정보
- 상위 계층의 프로토콜이나 프로세스를 정확히 찾아가기 위한 정보
- 4계층에서는 포트 번호
- 출발지와 목적지를 구분해 처리해야 함.
💡 HTTP TCP 80, HTTPS TCP 443, SMTP TCP 25 같이 잘 알려진 포트를 웰 노운 포트(Well Known)라고 한다.
💡 서비스 요청 시와 응답 시에는 출발지 IP 와 목적지 IP가 반대가 되듯이, 출발지와 도착지 포트 번호도 요청 패킷과 응답 패킷이 반대가 된다.
TCP
신뢰할 수 없는 공용망에서도 정보유실 없는 통신을 보장하기 위해 세션을 안전하게 연결하고 데이터를 분할하며 분할된 패킷이 잘 전송되었는지 확인할 수 있다. 또, 한꺼번에 얼마나 보내야 수신자가 잘 받아 처리할 수 있는지 전송크기까지 고려해 통신한다.
패킷 순서와 응답 번호
TCP 에서는 분할된 패킷을 잘 분할하고 수신 측이 잘 조합하도록 패킷에 순서를 주고 응답 번호를 부여한다.
시퀀스 번호
패킷에 순서를 부여
ACK 번호
응답 번호를 부여
두 번호가 상호작용해 순서가 바뀌거나 패킷이 손실된 것을 파악할 수 있다.
패킷 요청, 응답 과정 (ACK, Seq 번호)
- 출발지(송신 측) 에서 SEQ 번호 0으로 보냄.
- 수신 측 - 0번 패킷 잘 받았다는 표시로 ACK = 1 로 응답, 본인이 처음 보낸 패킷이므로 자기 패킷에는 SEQ = 0 부여해 송신
- 송신 측 - SEQ = 1 로 (ACK 번호로 1번 패킷을 달라고 했으므로), ACK = 1 로(0번 시퀀스를 잘 받았다는 의미) 송신한다.
윈도 사이즈, 슬라이딩 윈도
TCP 는 일방적으로 패킷을 보내지 않고 상대방이 얼마나 잘 받았는지 확인하기 위해 ACK 번호를 확인하고 다음 패킷을 전송한다. 하지만 송신자/수신자가 먼 거리에 떨어져있으면 왕복 지연시간(RTT) 가 늘어난다. 그래서 패킷을 한꺼번에 여러 개 보내고 응답을 하나만 받는다.
윈도 사이즈 | 한 번에 데이터를 받을 수 있는 크기 |
슬라이딩 윈도 | 네트워크 상황에 따라 윈도 사이즈의 크기를 조절하는 것. |
윈도 사이즈 사용법
- TCP 헤더는 변경이 불가능하므로 헤더 사이즈를 늘리지 않고 뒤의 숫자를 무시함.
데이터 유실이 발생할 경우
- 윈도 사이즈를 절반으로 떨어뜨린다.
- 정상적으로 통신이 되는 경우 서서히 하나씩 늘린다.
작아진 윈도 사이즈로 데이터 통신 속도가 느려져 회선을 제대로 사용하지 못하는 상황
경합을 피하기 위해 …
- 회선 속도 증가 시키거나,
- 임시로 피하기 위해 버퍼가 큰 네트워크 장비 사용.
- TCP 최적화 솔루션 사용.
3방향 핸드셰이크
TCP 에서 유실 없는 안전한 통신을 위해 통신 시작 전 각 통신에 필요한 리소스를 미리 확보하기 위해 3번의 패킷을 주고 받으며하는 사전 연결 작업.
상태
상태 명 | 설명 |
LISTEN | 클라이언트의 접속을 받아들일 수 있는 상태. |
SYN-SENT | 통신을 시도할 때 클라이언트가 Syn 패킷을 보냄. |
SYN-RECEIVE | 서버가 Syn 을 받음, Ack 로 응답. |
ESTABLISHED | 서버와 클라이언트 연결이 성공적으로 완료. |
Flag
어떤 패킷이 새로운 연결 시도인지, 기존 통신에 대한 응답인지 구분하기 위에 헤더에 넣는 값. 플래그를 넣어 통신함.
종류
종류 | 용도 | 설명 |
SYN | 연결 시작 용도. | 연결이 시작될 때 1로 표시 |
ACK | ACK 번호는 몇 번을 달라는 의미기도 함. 시퀀스 번호에 +1 을 추가해 10번+1번 하여 11번째 데이터부터 달라는 뜻으로 줌. | 초기 SYN 이 아닌 모든 패킷은 기존 메시지에 대한 응답이므로 ACK 플래그가 1, ACK 번호가 유효할 경우 |
FIN | 데이터 전송을 마치고 정상적으로 양방향 종료시 사용. | 연결 종료시 1로 표시. |
RST | 연결 강제 종료를 위해 연결을 일방적으로 끊을 때. | 연결 종료시 1로 표시. |
URG | 긴급 데이터인 경우 표시. | 1 |
PSH | 서버 측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 즉시 전달할 것을 지시할 때. |
UDP
데이터 전송을 보장하지 않는 프로토콜. 제한된 용도로만 사용한다.
용도
일부 데이터가 유실되더라도 시간에 맞춰 계속 전송하는 것이 중요한 데이터 주로 이용. 신뢰도는 떨어지지만 응답 시간에 민감한 환경에서 주로 사용한다.
- 음성 데이터나 실시간 스트리밍 같이 시간에 민감한 프로토콜이나 애플리케이션
- 사내 방송이나 증권 시세 데이터 전송에 사용되는 멀티캐스트처럼 단방향으로 다수의 단말과 통신 해 응답을 받기 어려운 환경 에서 주로 사용함.
특징
- UDP 는 TCP 처럼 에서 3방향 핸드셰이크 같이 사전 연결 확립하는 절차가 없다. 첫 데이터는 리소스 확보를 위해 인터럽트 를 거는 용도로 사용되고 유실된다.
- 그래서 보통 동작하거나 연결 확립은 TCP 프로토콜을 사용하고, 실제 데이터만 UDP 를 이용하는 경우가 대부분이다.
💡 넷플릭스나 유튜브같이 시간에 민감하지 않은 단일 시청자를 위한 연결은 TCP 를 사용한다. 데이터를 미리 받아놓고 네트워크에 문제가 생길 때를 대비해 캐시에 저장해놓는다. 하지만 실시간 화상 회의 등은 UDP 를 이용한다.
'개발공부 개발새발 > Network' 카테고리의 다른 글
Network ) 스위치 (0) | 2024.06.14 |
---|---|
Network ) ARP, GARP , 게이트웨이.. (0) | 2024.05.30 |
Network ) 통신 방식 , MAC 주소, IP 주소 (서브네팅) (0) | 2024.05.30 |
Network ) 네트워크 연결 (0) | 2024.05.08 |
Network ) ISO 7 계층 (0) | 2024.04.30 |