TCP(Transmission Control Protocol)
연결 지향 방식
연결과 해제 과정이 필요함
3-ways handshaking, 4-ways handshaking
연결 = 패킷을 전송하기 위한 논리적 경로를 배정
높은 신뢰도 보장
데이터의 순서 보장
데이터의 도착 보장
데이터의 무결성 보장 : 보낸 데이터와 받은 데이터가 일치함
흐름 제어, 혼잡 제어
속도가 느리다
연결을 위한 비용
신뢰도 보장을 위한 비용
전이중(Full-Duplex), 점대점(Point to Point) 방식
TCP 서버
서버소켓은 연결만을 담당한다.
연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용된다
서버와 클라이언트는 1대1로 연결된다.
스트림 전송으로 전송 데이터의 크기가 무제한이다.
패킷에 대한 응답을 해야하기 때문에(시간 지연, CPU 소모) 성능이 낮다.
스트리밍 서비스에 불리하다.(손실된 경우 재전송 요청을 하므로)
UDP(User Datagram Protocol)
데이터를 데이터그램 단위로 처리
데이터그램 : 독립적인 관계를 가지는 패킷
비연결형 프로토콜
각각의 패킷은 각자 다른 경로로 전송되고 독립적임
연결하고 해제하는 과정이 필요없음
신뢰성이 낮다
UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
신뢰성을 위한 과정이 없어서 속도가 빠름
UDP 서버
UDP에는 연결 자체가 없어서(connect 함수 불필요) 서버 소켓과 클라이언트 소켓의 구분이 없다.
소켓 대신 IP를 기반으로 데이터를 전송한다.
서버와 클라이언트는 1대1, 1대N, N대M 등으로 연결될 수 있다.
데이터그램 단위로 전송되며 그 크기는 65535바이트로, 크기가 초과하면 잘라서 보낸다.
흐름제어가 없어서 패킷이 제대로 전송되었는지, 오류가 없는지 확인할 수 없다.
파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용된다.
'기본' 카테고리의 다른 글
Node.js에서의 비동기 (0) | 2023.05.07 |
---|---|
QUIC (0) | 2023.04.07 |
Context Switch (0) | 2023.03.14 |
HTTP 메서드 (0) | 2023.03.12 |
Docker (0) | 2023.03.11 |