반응형
Websocket
- TCP 기반인 동시 양방향 통신 채널을 제공하는 통신 프로토콜
- 주로 Web에서 사용
- 일반적으로 443, 89 포트 사용
- TCP 핸드셰이크와 HTTP 헤더 오버헤드로 인해 작은 패킷 통신에는 비효율적
- Fragmentation를 사용하지 않을 시 TCP와 같이 패킷의 전체 크기 바이트를 보낼 헤더가 필요
- OSI 7 Layer에서 응용 계층에 속함
TCP Socket
- Translation Control Protocol(TCP)
- Internet Protocol(IP)를 보완하는 초기 네트워크 구현에서 유래되었기에 TCP/IP 라고 부름
- 애플리케이션간 스트림을 안정적이고 순서대로, 오류가 검사된 방식으로 전달
- OSI7 Layer에서 전송 계층에 속함
- 손실될 수 있는 데이터의 재전송 요청, 순서 재정렬하며 네티워크 혼잡 최소화
차이점
- TCP/IP는 OSI 7 Layer에서 전송 계층, WebSocket은 응용 계층
- WebSocket은 TCP Socket과 동일하게 3-Way Handshake를 이룬 후 추가로 HTTP 헤더 오버헤드가 있기에 성능적으로 TCP에 밀림, 대신 통신 구현이 더 쉬움
- TCP는 커스텀하여 보낼 수 있지만 WebSocket은 항상 보내기 전 모든 준비를 맞춰야함
(대충 TCP가 C언어고 WebSocket이 Python 같은 느낌? WebSocket은 세부적으로 개발자 입맛대로 바꿀 수 없음) - TCP Socket 통신 방식
- 데이터가 여러번에 나눠서 전달될 수 있음
- Send : 항상 보낸 바이트 수를 반환
- SendAsync : 보낸 바이트 수 보다 적은 값을 반환할 수 있음
- Recv : 상대방이 보낸 Send 반환값과 불일치 할 수 있음(Send의 반환값 보다 더 적을 수도, 더 많을 수도 있음)
- Sengment 형식으로 통신하기에 메시지 기반 통신을 하기 위해서는 Segment에서 다시 Message 형태로 조립할 수 있도록 프레이밍 / 메시지 경계 데이터(패킷 헤더)를 추가 캡슐화 해야함
- WebSocket 통신 방식
- 항상 데이터가 한번에 보내지거나 아예 안보내짐
- Recv : 항상 Send의 반환값과 같음
- 일반 TCP 소켓을 기반으로 하며 각 프레임의 크기를 포함하고 어떤 프레임이 메시지의 일부인지 나타내닌 프레임 헤더를 사용하기에 TCP 처럼 번거롭게 패킷 헤더를 추가할 필요가 없음
참고 자료
https://en.wikipedia.org/wiki/WebSocket#Frame-based_message
https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure
반응형
'cs' 카테고리의 다른 글
[CS] 식사하는 철학자 C언어로 해결하기 (0) | 2024.03.03 |
---|