TCP
- 연결 지향형 프로토콜로 신뢰성있는 데이터 전송을 보장
- 신뢰적인 연결방식
- 서버와 클라이언트의 함수 호출 순서가 중요
서버 : socket() 생성 → bind() 소켓 주소 할당 → listen() 연결 요청 대기 상태 → accept() 연결 허용 → read/write() 데이터 송수신 → close() 연결 종료
클라이언트 : socket() 생성 → connect() 연결 요청 → read/write() 데이터 송수신 → close() 연결 종료
서버와 클라이언트의 차이
- 클라이언트 소켓 생성 후 서버로 연결을 요청하는 과정에서 차이가 존재
- 서버는 listen() 호출 이후부터 연결 요청 대기 큐를 만들어 놓고, 그 이후에 클라이언트가 연결 요청을 할 수 있음
- 이때 서버가 바로 accept()를 호출할 수 있는데, 연결되기 전까지 호출된 위치에서 블로킹 상태에 놓이게 됨
특징
- 연결형 서비스로 가상 회선 방식을 제공
- 3 way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제
- 흐름 제어 및 혼잡 제어
- 높은 신뢰성을 보장
- UDP보다 속도가 느림
- 전이중(Full-Duplex), 점대점(Point to Point) 방식
- 흐름 제어 : 송신 측과 수신 측의 데이터 처리 속도 차이 조절해줌
- 혼잡 제어 : 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것
TCP 서버 특징
- 서버 소켓은 연결만 담당
- 연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용되는 서비스로 가상 회선 방식 제공
- 서버와 클라이언트는 1대 1 연결
- 스트림 전송으로 전송 데이터의 크기 무제한
- 패킷에 대한 응답을 해야하므로 성능 낮음
- 스트리밍 서비스에 불리(손실된 경우 재전송 요청하기 때문)
UDP
- 무접속 프로토콜로 빠르지만, 데이터의 유실 가능성이 존재
특징
- 비연결형 서비스로 데이터그램 방식을 제공
- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호 절차를 거치지 않음
- UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
- 신뢰성이 낮음
- TCP보다 속도가 빠름
UDP 서버 특징
- UDP에는 연결 자체가 없어서(connect 함수 불필요) 서버 소켓과 클라이언트 소켓의 구분이 없음
- 소켓 대신 IP를 기반으로 데이터를 전송
- 서버와 클라이언트는 1대1, 1대N, N대M 등으로 연결될 수 있음
- 데이터그램(메세지) 단위로 전송되며 그 크기는 65535바이트로, 크기가 초과하면 잘라서 보냄
- 흐름제어(flow control)가 없어서 패킷이 제대로 전송되었는지, 오류가 없는지 확인할 수 없음
- 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용됨
'CS 지식 > [네트워크]' 카테고리의 다른 글
[네트워크] HTTP & HTTPS (0) | 2023.07.17 |
---|---|
[네트워크] GET & POST (0) | 2023.07.17 |
[네트워크] 대칭키 & 공개키 (0) | 2023.07.17 |
[네트워크] TCP 3 way handshake & 4 way handshake (0) | 2023.07.17 |
[네트워크] OSI 7계층 (0) | 2023.07.17 |