CS/Network
Network TCP/UDP (4계층 전송)
Gaesol
2024. 2. 20. 11:44
TCP / UDP
차이점
- TCP : 정확하게 정보를 전달해야 할 때 사용
- UDP : 정확하진 않아도 될 때 빠르게 정보를 전달하기 위해 사용
- TCP와 UDP는 최종 수신 프로그램에 맞춰 결정된다 (이 데이터를 사용할 프로그램이 정확한 정보를 필요로하면 TCP로 프로토콜을 구성한다)
- TCP 80 포트번호 =/= UDP 80 포트번호 (둘이 포트 번호가 같아도 서로 다른 것)
TCP
TCP (Transmission Control Protocol)
- 정확하게 데이터를 전달해야할 때 사용된다
- 역할 : 신뢰할 수 없는 공용망에서도 정보 유실이 없는 통신을 보장
- 세션을 안전하게 연결
- 데이터를 분할
- 분할된 패킷이 잘 전송되었는지 확인
- 데이터들을 메모리에 유지하고 있다가, ACK 번호를 받고 통신이 잘 된 것을 파악하고 나서야 메모리에서 데이터를 제거한다.
- 중간에 유실이 있으면 시퀀스 번호와 ACK 번호를 비교해가며 메모리에 유지해놓은 데이터를 재전송한다.
패킷 전송 방식
- Sequence Number : 시퀀스 번호. 패킷에 번호를 부여. 순서가 바뀐 패킷 알아챔.
- ACK(Acknowledge) Number : 응답 번호. 패킷이 잘 전송되었는지 응답. 유실된 패킷 알아챔.
- Window Size : 전송 크기. 한꺼번에 얼마나 보내야 수신자가 잘 처리할 수 있는지 고려
슬라이딩 윈도
- RTT(Round Trip Time) : 왕복 지연시간. 송신자와 수신자 간 거리가 멀면, 패킷을 전송하고 ACK 응답 번호를 다시 받아 확인할 때까지 시간이 길어진다.
- Sliding Window : RTT가 크면 패킷을 하나만 보내고 ACK 응답 번호를 받는데 오래 걸리니까, 한 번에 여러 개의 패킷을 보내고 (윈도 사이즈를 크게 하고) ACK 응답 번호는 하나만 받는다.
3방향 핸드셰이크
- TCP에서는 잘못된 통신으로 데이터가 버려지지 않도록, 3번의 패킷을 미리 주고받아 통신이 가능한지 확인한다.
- 서버 상태
- LISTEN 상태 (서버) : 클라이언트의 접속을 받아들여 서비스를 제공할 수 있는 상태
- SYN - SENT 상태 (클라이언트) : 통신을 시도하기 위해 서버로 Syn 패킷을 보낸 상태
- SYN - RECEIVE 상태 (서버) : 클라이언트의 Syn을 받은 상태. Syn, Ack로 응답한다.
- ESTABLISHED 상태 (클라이언트) : 서버의 Syn, Ack를 응답 받은 상태. 이에 대한 응답을 다시 서버로 보낸다.
- ESTABLISHED 상태 (서버) : ESTABLISHED 상태의 클라이언트의 응답을 받은 상태. 클라이언트와 서버가 모두 이 상태가 되면 연결이 성공적으로 완료된 것.
TCP 헤더에 들어가는 flag 종류
- 헤더에 플래그라는 값을 넣어, 초기 연결, 응답, 정상 종료, 비정상 종료 등의 통신 성질을 나타낸다.
- SYN : 연결 시작 용도. 연결이 시작될 때 1로 표시해서 보낸다.
- ACK : ACK 번호가 유효할 경우 1로 표시해 보낸다. (초기 SYN이 아닌 모든 패킷은 기존 메시지에 대한 응답이므로 ACK 플래그가 1이다)
- FIN : 연결 종료 시 1로 표시. 데이터 전송을 마친 후 정상적으로 양방향 종료 시 사용
- RST : 연결 종료 시 1로 표시. 연결 강제 종료를 위해 연결을 일방적으로 끊을 때 사용
- URG : 긴급 데이터인 경우 1로 표시
- PSH : 서버측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 즉시 전달할 것을 지시
UDP
UDP (User Datagram Protocol)
- 단순히 데이터를 보내는 역할만 한다
- TCP와는 달리 데이터 신뢰 통신을 위한 내용이 없다.
- 데이터가 유실되어도 그 상태로 처리해버린다.
- UDP의 첫 데이터는 리소스 확보를 위해 인터럽트(Interrupt)를 거는 용도로 사용되고 유실된다.
- UDP 프로토콜을 사용하는 애플리케이션은 보통 연결 확립은 TCP 프로토콜의 3방향 핸드셰이크 등을 이용하고, 모든 준비를 마친 후 실제 데이터만 UDP를 이용한다.
사용되는 경우
- 응답 시간에 민감한 경우
- 신뢰성보다도, 시간에 맞추어 지속 전송해야하는 서비스에서 사용된다.
- 음성 데이터
- 실시간 스트리밍
- 화상 회의
- 응답을 받기가 어려운 경우
- 단방향으로 다수의 단말과 통신해 응답을 받기 어려울 경우
- 사내 방송 같은 멀티캐스트
헤더 정보
별 내용이 담겨 있지 않다