전세계에서 유일하게 특정지을 수 있는 컴퓨터 주소는 바로 IP이다. 그럼 그 안에서 프로그램을 특정지을 수 있는 번호는 무엇일까? 그것은 바로 PORT 번호이다. 참고로 이 둘을 합친 것을 Socket Address라고 한다. 그리고 Transport Layer에서의 주소는 포트번호로 쓰인다. 무슨 말인지 자세히 알아보자!
우리는 운영체제의 구멍(포트번호)을 통해서 그 프로그램과 대화를 시도한다. 하나의 컴퓨터 안에 여러 개의 소프트웨어가 있을 것이고, 여기서 운영체제는 어느 소프트웨어로 전송할지를 이 포트 번호(Transport Layer의 주소)를 보고 결정을 하게되는 것이다. TCP/UDP의 포트번호는 16비트로0~65,535안에 존재한다. 웹브라우저가 웹서버 접속할때 80번에 주로 접속하는데, 이처럼 흔히 쓰이게 되는 포트 번호들을 well-known 넘버라고 한다. 0~1023사이의 기본적인 통신체제가 책정되어있다. 게임 소프트웨어들은 포트 번호 공개하는 경우들이 있는데 이는 바로 충돌을 피할 수 있도록 "우리가 이 번호를 사용하고 있으니 웬만하면 사용하지 마세요"라고 알려주는 것이다.
Transport Layer의 주소를 간략히 하면 이와 같다.
Local Host | Local Process | Remote host | Remote Process |
나의 네트워크, IP 주소 | 나의 TCP/UDP 주소 | 상대편의 IP주소 | 상대편의 TCP/UDP주소 |
그렇다면 Transport Layer의 대표적인 TCP/UDP에 대해 알아보자.
TCP란?
Transmission Control Protocol로서 상대방과의 연결 설정 및 해제를 하고 에러가 발생했는지 검출하고 복구까지하는 전송 프로토콜이다. TCP는 가상의 줄을 만들고 그 위에서 데이터를 주고 받는다. 이는 에러 검출을 위해서인데 그래서 조금 느리고 복잡해지겠지만 프로그램 입장에서는 좀 더 신뢰성있는 프로그램이 된다.
(+참고로 이보다 더 에러검출 및 복구를 강하게 하는 것이 SCTP이다)
UDP는?
UserDatagram Protocol로 프로세스를 식별하기 위한 포트 번호를 헤더에 가지고 있는 프로토콜이다. TCP와는 다르게 에러 검출을 안한다. 복구도 안한다. 연결 설정 및 해제도 없다. 전송이 시작되면 그냥 바로 던져버린다. 그래서 속도가 훨씬 빠르다는 장점이 있다. UDP의 헤더에는 8바이트로 보내는자의 포트 번호, 받는 자의 포트번호 등이 있다.
그렇다면 동영상 스트리밍 서비스은 TCP를 이용할까 UDP를 이용할까?
이건 과거와 현재의 대답이 달라지게 된다. 일단 기본적으로는 유투브, 아프리카TV, 왓차 등과 같은 스트리밍 서비스는 이미 인코딩이 되어있는 경우도 있고, 빠른 전달보다는 화질이 중요했다. 화질을 보장하기 위해서 에러가 났을 때 복구를 위해 대부분의 스트리밍 서비스는 TCP를 이용했다. 이 때문에 로딩이 필요하게 되었는데 동영상이 재생되기 전 광고를 보여주는 것도 이 시간을 버는 것이라고 할 수 있다.
하지만 최근에는 유투브를 포함하여 UDP위에 http3가 올라가 쓰인다. UDP는 OSI 1,2 계층에서 신뢰성을 제공하지 못한 다면 UDP를 쓸 수 없는데 이럴 경우 직접 신뢰성을 제공하던지, 신뢰성이 필요가 없으면 UDP를 쓸 수 있게 된다. 유투브는 그 신뢰성을 직접 제공함으로서 좀 더 빠른 전송을 가능하게 하는 UDP를 쓰는 것으로 보인다. 또한 웹세미나 같은 경우 또한 화질보다는 빠른 전달이 중요하기에 UDP를 쓴다.
'Server, DevOps' 카테고리의 다른 글
[Network] Network Layer에 대한 깊은 이해하기(+IPv4, NAT, PAT, UDP, TCP) (0) | 2021.11.11 |
---|---|
[Server] 2계층 MAC Layer (CSMA/CD, CSMA/CA 개념정리) (0) | 2021.11.10 |