Server: 항상 연결되어 서비스를 제공하며, 영구적인 IP Address를 가지고 있다.
Client: 간헐적으로 서버와 연결되는 디바이스 또는 응용 프로그램
→ 필요에따라 동적으로 IP Address를 부여 또는 고정 IP 사용
모든 참여자가 서비스를 제공하고 동시에 사용하는 모델로, 각 클라이언트는 동등한 지위를 가진다.
Tracker: p2p 망에 접속할 수 있는 최소한의 정보를 가지고 있는 아주 간단한 서버
- BitTorrent와 같은 P2P 파일 공유 프로토콜에서 사용된다.
- Tracker를 통해 클라이언트들은 파일을 공유하고 다운로드할 수 있다.
→ P2P 네트워크에서 서비스가 제공되고 확장
동일한 호스트(또는 컴퓨터) 내에서 실행 중인 프로세스 간의 통신을 위한 방법
서로 다른 호스트 간에 통신이 필요한 경우, 메시지를 사용
Transport Layer: 인터넷에서 제공하는 서비스를 사용자가 요구하는 서비스로 변환해주는 기능
→ 예를 들어, 인터넷에서는 패킷 순서가 뒤바뀌는 등 엉망인 상태로 서비스를 제공하지만 이를 전송계층에서 그대로 받아들일지(UDP) 또는 오류를 검출하고 재전송이나 오류 복구 매커지니즘을 요청할지(TCP) 결정한다.
TCP: 연결 지향 프로토콜로, 데이터를 안정적으로 전송하기 위해 사용된다.
3-way handshaking 과정을 통한 연결 설정과 4-way handshaking 과정을 통한 연결 해제 과정이 포함되어 있으며, 가상 회선 교환 방식을 사용하여 신뢰성 있는 데이터 전송을 제공
- 장점: 데이터의 송수신에 있어 높은 신뢰성을 제공하며, 흐름 제어 및 혼잡 제어를 지원한다.
- 단점: 연결과정에서 추가적인 시간이 발생하며, 응답을 주고 받으므로 UDP보다 속도가 느리다.
- 과정(Server)
- socket() : OS에게 Socket 생성 요청
- bind() : 목적지 IP주소, Port 번호를 설정
- listen() : 수신 대기열을 통해 몇 개의 클라이언트를 대기시킬지 설정
→ 대기열: 서버가 동시에 처리할 수 있는 연결 요청의 수- accept(): client의 연결을 기다림
→ Client의 connect() 이후에 연결이 성립되고 read() / write()를 하며 통신
- 과정(Client)
- socket() : Socket을 열기
- connect() : 통신할 서버의 IP, Port 입력
UDP: 연결 설정과 해제 과정이 없는 비연결형 프로토콜로, 데이터그램 패킷 교환 방식을 사용한다.
→ connect(), listen(), accept() 불필요하며 sendto(), recvfrom()을 통해 통신
- 장점: 데이터를 빠르게 전송할 수 있으며 코드가 간단하다.
→ 데이터의 신뢰성보다는 빠른 성능이 우선시될 때 UDP를 사용한다.- 단점: 신뢰성을 보장하지 않으며 오류 제어나 혼잡 제어를 수행하지 않으며, 최소한의 Checksum 검사를 통한 오류 검증만 진행하므로 데이터의 손실 가능성이 있으며 신뢰성이 낮다.
→ 오류 제어 및 혼잡 제어 등 부가적인 기능을 Application 계층에 위임한다.
- 과정(Server)
- socket() : 소켓 생성
- bind() : Port 번호 입력
→ 이 후, sendTo(메세지, DA)를 통해 통신
- 과정(Client)
- socket() : 소켓 열기
→ sendto()를 사용하여 메세지를 보내고, recvfrom()을 통해 메세지를 받는다.
TCP : 신뢰성있는 데이터의 전송이 중요할 때 사용
UDP : 신뢰성보다는 신속성있는 데이터의 전송이 중요할 때 사용
TCP | UDP |
---|---|
신뢰성 데이터 전송 | 비신뢰성 데이터 전송 |
흐름 제어(Kernel Buffer 제어) 및 Network혼잡 제어 | X |
연결형 프로토콜 | 비연결형 프로토콜 |
Circuit switching | Packet switching |