같이 읽어보기
[네트워크] 7 layers of OSI model
[네트워크] TCP/IP Model
[네트워크] TCP/UDP
전송 계층transport layer은 응용프로그램 계층application layer에서 데이터를 가져와서, 다음 패킷packets이라고 하는 작은 세그먼트segments로 나눈다. 그 다음 전달을 위해 네트워크 계층network layer으로 처리된다. 전송 계층에서는 크게 2가지, TCP와 UDP 프로토콜을 사용한다(TCP와 UDP는 데이터를 전송할 때 사용하는 프로토콜. ).
TCP는 source에서 destination까지 안정적인 패킷 전송을 보장하기 위해 IP 위에서 사용되는 전송 프로토콜이다. 애플리케이션 계층에서 데이터를 가져온 뒤, 데이터를 패킷으로 나누고 각 패킷에 번호를 부여한다. 통신이 발생하기 전 네트워크 장치 사이에 연결을 설정한다.
TCP는 연결 지향 프로토콜이다. 여기서, 연결 지향이란 통신을 맺고 끊는 과정에서 클라이언트와 서버 간 확인 절차를 거치는 걸 의미한다. 데이터를 전송하기 전 연결을 확인하고, 데이터를 전송한 후에 연결을 끊어야 한다(3-way handshaking 과정을 통해 장치 간 서로 연결이 잘 되었는지 확인한다). 전송 순서를 보장하지만 속도가 UDP보다 느리다.
헤더 크기 : 20바이트
장점
- 100% 전달율 : 손실된 패킷은 다시 전송된다.
- 오류 없음 : checksum 검증을 통해 오류를 감지한다.
- 시퀀시 딜리버리(sequence delivery) : 패킷이 순서대로 전송된다.
**
checksum이란?
네트워크를 통해 전송된 데이터의 값이 변경되었는지(무결성integrity) 검사하는 것.
단점
- 데이텆 전송 속도가 UDP보다 느리다.
- broadcasting을 지원하지 않는다.
- slow handshake (수신자, 발신자 간 handshake)
UDP는 데이터그램 지향 프로토콜이다. 연결하고 연결을 유지하고 연결을 종료하는 데 시간을 쓰지 않으므로 신뢰성이 낮은 대신 속도가 빠르다. 비연결형으로서 스트리밍 서비스와 같이 연속성이 중요한 곳에서 사용된다. 전송 순서가 바뀔 수 있다.
헤더 크기 : 8바이트
장점
- 데이터 패킷 전달이 보장되지 않으므로 TCP보다 빠름.
- 데이터 전송 전 source와 destination을 연결할 필요 없음.
- 모든 패킷에 checksum을 사용해 에러 감지.
단점
- 혼잡 제어 또는 수신된 데이터에 대한 승인절차가 없음
- 데이터 전송에만 관련됨.
- 데이터가 전송된 순서 그대로 수신되도록 할 수 없음.
신뢰성
TCP는 destination router로의 데이터 전달을 보장하므로 신뢰성이 높다. 이렇듯 TCP는 웹이나 이메일과 같이 데이터가 정확하게 전송되어야 하는 통신에 사용된다. 즉, 파일 전송과 같은 신뢰성이 중요한 경우에 사용한다. 반면 UDP는 destination으로의 데이터 전달을 보장하지 않는다.
오류 검사 메커니즘
TCP는 흐름 제어 및 데이터 승인 등 광범위한 오류 검사 메커니즘을 제공한다. UDP는 기본적인 오류 검사 메커니즘만 제공한다.
Acknowledgment
TCP는 acknowledgment segment가 존재하지만, UDP는 그렇지 않다.
전송 순서
데이터 시퀀싱(sequencing of data)은 TCP의 특징이다. 패킷이 순서대로 수신기에 도착한다. 반면 UDP에는 데이터 순서가 없다. 순서가 필요한 경우, 어플리케이션 계층에서 관리해야 한다.
속도
TCP보다 UDP가 더 빠르다.
재전송
TCP에서는 손실된 패킷의 재전송이 가능하지만 UDP에서는 불가능하다.
무게
TCP는 무겁고, UDP는 가볍다.
프로토콜
TCP는 HTTP, HTTPS, FTP(파일 전송 프로토콜), SMTP(전자 메일), Telnet, WWW(World Wide Web)에서 사용된다.
UDP는 DNS(Domain Name System), DHCP, TFTP, SNMP, RIP, VolP(Voice over IP)에서 사용된다.스트림 유형
TCP 연결은 바이트 스트림(a byte stream)이다. UDP는 메시지 스트림이다.
**
tcp와 udp는 공존할 수 있다고 한다. 다만, 단일 애플리케이션에서 tcp와 udp를 사용하려면 2개의 소켓을 생성해 각각 네트워크 인터페이스에 바인딩되어야 한다고 한다.
대표적인 예시가 DNS.
udp는 작은 데이터 패킷 전송을 최적화하는 프로토콜이므로 응답 메시지 크기가 512바이트 미만이면 udp, 초과하면 tcp를 사용한다.
클라이언트가 3-5초 후에도 DNS로부터 응답을 받지 못하면 tcp를 사용해 데이털르 재전송한다.
DNS는 name queries에 UDP를, zone transfer에 TCP를 각각 사용한다. (query == 질문)
Differences between TCP and UDP
How Applications Coexist Over TCP and UDP?