L4 대표 프로토콜인 TCP와 UDP
1) TCP에만 연결(Connection, Session) 개념이 있다.
2) 연결은 결과적으로 순서번호로 구현된다.
3) 연결은 '상태(전이)' 개념을 동반한다.
4) TCP는 배려남, UDP는 배려가 없는 남자에 비유할 수 있다.
...
1) TCP에만 연결(Connection, Session) 개념이 있다.
TCP와 UDP 핵심은 '연결지향'에 있다. TCP는 연결지향이며, UDP는 연결지향이 아니다.
이 때 연결은 매우 논리적(Virtual)이다. 그렇기에 TCP 연결을 다른 말로 Virtual Circuit 이라고도 한다.
2) 연결은 결과적으로 순서번호로 구현된다.
TCP연결은 순서번호이다.
TCP 세그먼트를 퍼즐에 비유한다면, 퍼즐마다 번호가 부여된다.
정확히는 세그먼트 사이즈의 바이트 수 만큼 증가한다. 바이트 수 만큼 시퀀스 번호, 즉 순서 번호가 증가한다. 이를 가지고 송수신 양 측정하기도 한다.
3) 연결은 '상태(전이)' 개념을 동반한다.
예를들어, 전화기의 통화를 생각해보자. 통화 신호음/연결/종료의 과정을 생각해보면 TCP 연결을 생각해보면 크게 차이나지 않는다.
TCP는 데이터를 보낼 때, 수신하는 측에서 여유 공간이 없으면 (Zero-Window), 즉 상대가 못받으면 TCP는 데이터를 보내지 않는다.
그렇기에 'TCP = 배려남' 이라는 비유를 사용하였다. 반면, UDP는 상대의 상황을 생각하지 않고 데이터를 보낸다. 그리고 이러한 TCP와 UDP의 차이가 내부 구조 측면에서 큰 차이가 난다.
...
다시 한번 각 Layer의 식별자와 데이터 단위를 살펴보자.
어플리케이션 계층으로 올라오면 소켓이 있다. 소켓을 데이터 단위라고 하기에는 애매하지만, 소켓은 스트림과 함께 이해하자. 스트림의 특징은 시작은 있는데 끝을 예측하기가 어렵다. 왜냐하면 소켓 통신을 하는 프로세스가 정하는 어플리케이션 프로토콜 규정에 따른다.
그렇기에 L4 이상으로 넘어가면 스트림 데이터를 L4에서는 잘라서 세그멘테이션에서 전송한다.
또한, L4에서 식별자는 포트 번호이다. 다만 L2 네트워크 스위치 수준에서 포트 번호를 말하면 인터페이스 번호를 말하는 것이며, L4 수준에서 포트 번호는 서비스 식별자라고도 한다. 그리고 엔드포인트 서버를 담당한다면 포트 번호를 프로세스 식별자라고 말하기도 한다.
L2 | L4 | L7 | |
포트 번호 | 인터페이스 번호 | 서비스 식별자 | 프로세스 식별자 |
...
TCP와 UDP 통신을 하는 경우를 디테일하게 살펴보자.
TCP를 먼저 살펴보자.
1) 클라이언트와 서버로 구성된다.
2) 서버는 '연결 대기(Listen)'를 하고 있고, 클라이언트측은 '프로세스가 소켓을 생성하여 오픈' 한다.
3) 프로세스는 자신의 식별자(PID)를 갖는데,
4) 프로세스 (PID)가 소켓을 열면 운영체제는 소켓에 TCP 포트 번호를 부여한다. (남는 번호를 랜덤으로 부여함)
5) 클라이언트가 192.168.0.10:3000, 서버가 192.168.0.20:80 이라면 (서버 측 웹 서버는 보통 80)
6) 3000번 포트를 열어 서버에 접속한다.
7) 서버측 프로세스도 소켓을 생성+개방하고, TCP 포트 번호 80을 설정한다.
8) 그리고 소켓을 연결 대기(Listen) 상태로 유지한다.
결국 TCP 통신을 하려면 IP주소를 알아야하고 접속 가능한 TCP 포트 번호를 알아야한다. 그래야만 연결이라는 것을 개념적으로 시도해 볼 수 있다. 만약, 연결를 하려 하는데 연결 대기가 안되어 있으면 Kernel(커널) 영역의 TCP 계층에서 연결 실패에 대한 응답 값을 던진다. 운영체제 단에서 거절이 일어나는 것이다.
UDP는 연결이라는 개념이 없다. 소켓 통신, 포트 번호 부여도 똑같다. 그리고 클라이언트 측 포트 번호를 내가 지정할 것인지 혹은 운영체제에서 사용가능한 포트번호를 지정해주면 그것을 사용할 것인지도 TCP와 동일하다.
'네트워크' 카테고리의 다른 글
TCP 연결종료와 상태변화 (0) | 2024.10.29 |
---|---|
TCP 연결과정과 3-way handshaking (1) | 2024.10.29 |
Proxy Server (Forward Proxy, Reverse Proxy) (0) | 2024.10.24 |
Ping과 RTT란 (0) | 2024.10.23 |
ARP(Address Resolution Protocol) 란 (1) | 2024.10.22 |